From da21b101442c295769cd3086a3f96a291be251ff Mon Sep 17 00:00:00 2001 From: kd-11 Date: Sun, 14 Dec 2025 21:25:37 +0300 Subject: [PATCH] rsx: Propagate state changes to trigger permutation lookup - Alpha test - MSAA (for CSAA enable flag) - Polygon stipple --- rpcs3/Emu/RSX/NV47/HW/nv4097.cpp | 8 ++++++-- rpcs3/Emu/RSX/rsx_methods.cpp | 8 ++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/rpcs3/Emu/RSX/NV47/HW/nv4097.cpp b/rpcs3/Emu/RSX/NV47/HW/nv4097.cpp index d0298cf359..8db588da60 100644 --- a/rpcs3/Emu/RSX/NV47/HW/nv4097.cpp +++ b/rpcs3/Emu/RSX/NV47/HW/nv4097.cpp @@ -250,8 +250,12 @@ namespace rsx const auto current = REGS(ctx)->decode(arg); const auto previous = REGS(ctx)->decode(REGS(ctx)->latch); - if (*current.antialias() != *previous.antialias() || // Antialias control has changed, update ROP parameters - current.is_integer_color_format() != previous.is_integer_color_format()) // The type of color format also requires ROP control update + if (current.is_integer_color_format() != previous.is_integer_color_format()) // Different ROP emulation + { + RSX(ctx)->m_graphics_state |= rsx::pipeline_state::fragment_program_state_dirty; + } + + if (*current.antialias() != *previous.antialias()) // Antialias control has changed, update ROP parameters { RSX(ctx)->m_graphics_state |= rsx::pipeline_state::fragment_state_dirty; } diff --git a/rpcs3/Emu/RSX/rsx_methods.cpp b/rpcs3/Emu/RSX/rsx_methods.cpp index 903a10c582..3d12440882 100644 --- a/rpcs3/Emu/RSX/rsx_methods.cpp +++ b/rpcs3/Emu/RSX/rsx_methods.cpp @@ -716,9 +716,9 @@ namespace rsx state_signals[NV4097_SET_POINT_SIZE] = rsx::vertex_state_dirty; state_signals[NV4097_SET_ALPHA_FUNC] = rsx::fragment_state_dirty; state_signals[NV4097_SET_ALPHA_REF] = rsx::fragment_state_dirty; - state_signals[NV4097_SET_ALPHA_TEST_ENABLE] = rsx::fragment_state_dirty; - state_signals[NV4097_SET_ANTI_ALIASING_CONTROL] = rsx::fragment_state_dirty | rsx::pipeline_config_dirty; - state_signals[NV4097_SET_SHADER_PACKER] = rsx::fragment_state_dirty; + state_signals[NV4097_SET_ALPHA_TEST_ENABLE] = rsx::fragment_program_state_dirty; + state_signals[NV4097_SET_ANTI_ALIASING_CONTROL] = rsx::fragment_program_state_dirty; + state_signals[NV4097_SET_SHADER_PACKER] = rsx::fragment_program_state_dirty; state_signals[NV4097_SET_SHADER_WINDOW] = rsx::fragment_state_dirty; state_signals[NV4097_SET_FOG_MODE] = rsx::fragment_state_dirty; state_signals[NV4097_SET_SCISSOR_HORIZONTAL] = rsx::scissor_config_state_dirty; @@ -733,7 +733,7 @@ namespace rsx state_signals[NV4097_SET_VIEWPORT_OFFSET + 0] = rsx::vertex_state_dirty; state_signals[NV4097_SET_VIEWPORT_OFFSET + 1] = rsx::vertex_state_dirty; state_signals[NV4097_SET_VIEWPORT_OFFSET + 2] = rsx::vertex_state_dirty; - state_signals[NV4097_SET_POLYGON_STIPPLE] = rsx::fragment_state_dirty; + state_signals[NV4097_SET_POLYGON_STIPPLE] = rsx::fragment_program_state_dirty; state_signals[NV4097_SET_POLYGON_STIPPLE_PATTERN + 0] = rsx::polygon_stipple_pattern_dirty; state_signals[NV4097_SET_POLYGON_STIPPLE_PATTERN + 1] = rsx::polygon_stipple_pattern_dirty; state_signals[NV4097_SET_POLYGON_STIPPLE_PATTERN + 2] = rsx::polygon_stipple_pattern_dirty;