From 67f97b0e154c57a4867a955bd42cdbe952de59e1 Mon Sep 17 00:00:00 2001 From: kd-11 Date: Fri, 8 Dec 2023 23:11:04 +0300 Subject: [PATCH] rsx: Let 308a::color have a synchronization side-effect in strict mode - Some games use 308a::color to implement custom sync primitives (ETQW). - When the color data is written, the engine assumes all occlusion reports are ready which can cause severe flickering if we don't flush the pipeline. --- rpcs3/Emu/RSX/rsx_methods.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/rpcs3/Emu/RSX/rsx_methods.cpp b/rpcs3/Emu/RSX/rsx_methods.cpp index 6598e69f62..683944be3d 100644 --- a/rpcs3/Emu/RSX/rsx_methods.cpp +++ b/rpcs3/Emu/RSX/rsx_methods.cpp @@ -1054,6 +1054,13 @@ namespace rsx // Skip "handled methods" rsx->fifo_ctrl->skip_methods(count - 1); + // 308A::COLOR can be used to create custom sync primitives. + // Hide this behind strict mode due to the potential performance implications. + if (count == 1 && !g_cfg.video.relaxed_zcull_sync && g_cfg.video.strict_rendering_mode) + { + rsx->sync(); + } + switch (*method_registers.blit_engine_nv3062_color_format()) { case blit_engine::transfer_destination_format::a8r8g8b8: