rsx: Clean up and simplify texture register manipulation tests
Some checks are pending
Build RPCS3 / RPCS3 Linux ${{ matrix.os }} ${{ matrix.compiler }} (/rpcs3/.ci/build-linux.sh, gcc, rpcs3/rpcs3-ci-jammy:1.2, ubuntu-24.04) (push) Waiting to run
Build RPCS3 / RPCS3 Linux ${{ matrix.os }} ${{ matrix.compiler }} (a1d35836e8d45bfc6f63c26f0a3e5d46ef622fe1, rpcs3/rpcs3-binaries-linux-arm64, /rpcs3/.ci/build-linux-aarch64.sh, clang, rpcs3/rpcs3-ci-jammy-aarch64:1.2, ubuntu-24.04-arm) (push) Waiting to run
Build RPCS3 / RPCS3 Linux ${{ matrix.os }} ${{ matrix.compiler }} (d812f1254a1157c80fd402f94446310560f54e5f, rpcs3/rpcs3-binaries-linux, /rpcs3/.ci/build-linux.sh, clang, rpcs3/rpcs3-ci-jammy:1.2, ubuntu-24.04) (push) Waiting to run
Build RPCS3 / RPCS3 Windows (push) Waiting to run

This commit is contained in:
kd-11 2025-03-08 20:58:44 +03:00 committed by kd-11
parent 93899bf5a9
commit 3be1e0b6ff

View File

@ -100,47 +100,28 @@ namespace rsx
ensure(!command_span.empty() && command_span.size() <= count);
u32* const dst_regs = &REGS(ctx)->registers[reg];
//u8 change_mask = 0;
u8 change_mask = 0xff;
if (dst_regs[0] != REGS(ctx)->latch)
{
// Fixup for the first method
change_mask |= 1;
}
bool set_dirty = (dst_regs[0] != REGS(ctx)->latch);
for (usz i = 1; i < command_span.size(); i++)
{
const u32 command_data = std::bit_cast<be_t<u32>>(command_span[i]);
change_mask |= command_data != dst_regs[i] ? (1u << i) : 0;
set_dirty = set_dirty || (command_data != dst_regs[i]);
dst_regs[i] = command_data;
}
// Disabled
// Bits set:
// NV4097_SET_TEXTURE_OFFSET
// NV4097_SET_TEXTURE_IMAGE_RECT
//constexpr u32 mask_of_texture_data_not_affecting_shader_config = 0x41;
constexpr u32 mask_of_texture_data_not_affecting_shader_config = 0;
if (change_mask)
{
RSX(ctx)->m_textures_dirty[texture_index] = true;
if (~mask_of_texture_data_not_affecting_shader_config & change_mask)
{
if (RSX(ctx)->current_fp_metadata.referenced_textures_mask & (1 << texture_index))
{
RSX(ctx)->m_graphics_state |= rsx::pipeline_state::fragment_program_state_dirty;
}
}
}
// Skip handled methods
RSX(ctx)->fifo_ctrl->skip_methods(static_cast<u32>(command_span.size()) - 1);
if (set_dirty)
{
RSX(ctx)->m_textures_dirty[texture_index] = true;
if (RSX(ctx)->current_fp_metadata.referenced_textures_mask & (1 << texture_index))
{
RSX(ctx)->m_graphics_state |= rsx::pipeline_state::fragment_program_state_dirty;
}
}
}
void set_vertex_texture_dirty_bit(rsx::context* ctx, u32 index)