diff --git a/rpcs3/Emu/RSX/Program/ProgramStateCache.cpp b/rpcs3/Emu/RSX/Program/ProgramStateCache.cpp index 15546afd7e..4420e51555 100644 --- a/rpcs3/Emu/RSX/Program/ProgramStateCache.cpp +++ b/rpcs3/Emu/RSX/Program/ProgramStateCache.cpp @@ -651,7 +651,7 @@ fragment_program_utils::fragment_program_metadata fragment_program_utils::analys case RSX_FP_OPCODE_TXB: case RSX_FP_OPCODE_TXL: result.referenced_textures_mask |= (1 << d0.tex_num); - result.has_tex_bx2_conv |= !!d0.exp_tex; + result.bx2_texture_reads_mask |= ((d0.exp_tex ? 1u : 0u) << d0.tex_num); break; case RSX_FP_OPCODE_PK4: case RSX_FP_OPCODE_UP4: diff --git a/rpcs3/Emu/RSX/Program/ProgramStateCache.h b/rpcs3/Emu/RSX/Program/ProgramStateCache.h index ce5be4a425..76e168d20a 100644 --- a/rpcs3/Emu/RSX/Program/ProgramStateCache.h +++ b/rpcs3/Emu/RSX/Program/ProgramStateCache.h @@ -56,10 +56,10 @@ namespace program_hash_util u32 program_ucode_length; u32 program_constants_buffer_length; u16 referenced_textures_mask; + u16 bx2_texture_reads_mask; bool has_pack_instructions; bool has_branch_instructions; - bool has_tex_bx2_conv; bool is_nop_shader; // Does this affect Z-pass testing??? }; diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index 5bfc60ee2a..65958e189f 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -2326,7 +2326,7 @@ namespace rsx texture_control |= format_ex.texel_remap_control; texture_control |= format_ex.features << texture_control_bits::FORMAT_FEATURES_OFFSET; - if (current_fp_metadata.has_tex_bx2_conv) + if (current_fp_metadata.bx2_texture_reads_mask) { const u32 remap_hi = tex.decoded_remap().shuffle_mask_bits(0xFu); current_fragment_program.texture_params[i].remap &= ~(0xFu << 16u);