fix sky and tfrag bugs (#1058)

This commit is contained in:
water111
2022-01-07 14:43:43 -05:00
committed by GitHub
parent 06541db768
commit 5b3098d617
2 changed files with 4 additions and 2 deletions
@@ -32,15 +32,17 @@ void blend_sky_initial_fast(u8 intensity, u8* out, const u8* in, u32 size) {
void blend_sky_fast(u8 intensity, u8* out, const u8* in, u32 size) {
__m256i intensity_vec = _mm256_set1_epi16(intensity);
__m256i max_intensity = _mm256_set1_epi16(255);
for (u32 i = 0; i < size / 16; i++) {
__m128i tex_data8 = _mm_loadu_si128((const __m128i*)(in + (i * 16)));
__m128i out_val = _mm_loadu_si128((const __m128i*)(out + (i * 16)));
__m256i tex_data16 = _mm256_cvtepu8_epi16(tex_data8);
tex_data16 = _mm256_mullo_epi16(tex_data16, intensity_vec);
tex_data16 = _mm256_srli_epi16(tex_data16, 7);
tex_data16 = _mm256_min_epi16(max_intensity, tex_data16);
auto hi = _mm256_extracti128_si256(tex_data16, 1);
auto result = _mm_packus_epi16(_mm256_castsi256_si128(tex_data16), hi);
out_val = _mm_add_epi16(out_val, result);
out_val = _mm_adds_epu8(out_val, result);
_mm_storeu_si128((__m128i*)(out + (i * 16)), out_val);
}
}
@@ -139,7 +139,7 @@ bool Tfrag3::update_load(const std::vector<tfrag3::TFragmentTreeKind>& tree_kind
case State::UPLOAD_VERTS: {
constexpr u32 MAX_VERTS = 40000;
bool remaining = false;
for (size_t tree_idx = 0; tree_idx < lev_data->tie_trees.size(); tree_idx++) {
for (size_t tree_idx = 0; tree_idx < lev_data->tfrag_trees.size(); tree_idx++) {
const auto& tree = lev_data->tfrag_trees[tree_idx];
if (std::find(tree_kinds.begin(), tree_kinds.end(), tree.kind) != tree_kinds.end()) {