From f2b3db9cbc4e3041f45dbdd699b52d48180b4d34 Mon Sep 17 00:00:00 2001 From: lightningterror <18107717+lightningterror@users.noreply.github.com> Date: Tue, 27 Feb 2024 16:15:12 +0100 Subject: [PATCH] GS/HW: Improve how we handle decorrection on texture shuffles. Avoid copies if we can. --- pcsx2/GS/Renderers/HW/GSRendererHW.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp index a46146769c..7ba2476a97 100644 --- a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp +++ b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp @@ -5311,6 +5311,27 @@ __ri void GSRendererHW::DrawPrims(GSTextureCache::Target* rt, GSTextureCache::Ta if (rta_decorrection) { + if (m_texture_shuffle) + { + if (m_conf.ps.read_ba) + { + rt->RTADecorrect(rt); + m_conf.rt = rt->m_texture; + } + else if (m_conf.colormask.wa) + { + if (!(m_cached_ctx.FRAME.FBMSK & 0xFFFC0000)) + { + rt->m_rt_alpha_scale = false; + } + else if (m_cached_ctx.FRAME.FBMSK & 0xFFFC0000) + { + rt->RTADecorrect(rt); + m_conf.rt = rt->m_texture; + } + } + } + if (rt->m_last_draw == s_n) rt->m_rt_alpha_scale = false; else