From af554c0baa0880b7d993fb34da84adf834b20e67 Mon Sep 17 00:00:00 2001 From: MaranBr Date: Tue, 17 Mar 2026 19:53:28 +0100 Subject: [PATCH] [video_core] Fix Maxwell3D register processing to always mark dirty flags (#3712) Removed the early return in ProcessDirtyRegisters to ensure all dependent dirty flags are set even if the register value hasn't changed. This fixes flickering and vertex explosions on the Hero's Path in The Legend of Zelda: Breath of the Wild, fixes the teleport bug in The Legend of Zelda: Tears of the Kingdom, fixes the grey Luigi in Luigi's Mansion 3, and may also improve rendering in other games that rely on redundant register writes. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3712 Reviewed-by: Lizzie Reviewed-by: CamilleLaVey Co-authored-by: MaranBr Co-committed-by: MaranBr --- src/video_core/engines/maxwell_3d.cpp | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp index e48f294a5a..6d9ebd6296 100644 --- a/src/video_core/engines/maxwell_3d.cpp +++ b/src/video_core/engines/maxwell_3d.cpp @@ -315,15 +315,10 @@ void Maxwell3D::ConsumeSinkImpl() { } void Maxwell3D::ProcessDirtyRegisters(u32 method, u32 argument) { - if (regs.reg_array[method] != argument) { - regs.reg_array[method] = argument; - auto const& table0 = dirty.tables[0]; - auto const& table1 = dirty.tables[1]; - u8 const flag0 = table0[method]; - u8 const flag1 = table1[method]; - dirty.flags[flag0] = true; - if (flag1 != flag0) - dirty.flags[flag1] = true; + regs.reg_array[method] = argument; + + for (const auto& table : dirty.tables) { + dirty.flags[table[method]] = true; } }