From 0c24f2db7b38f57a3e9a96b2a90c6ed50d7fbdf7 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Tue, 1 Aug 2023 12:52:46 +1000 Subject: [PATCH] GS/HW: Don't discard target when SCANMSK is set --- pcsx2/GS/Renderers/HW/GSRendererHW.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp index f58de8a658..6b5a1acbfa 100644 --- a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp +++ b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp @@ -5779,16 +5779,17 @@ bool GSRendererHW::OI_BlitFMV(GSTextureCache::Target* _rt, GSTextureCache::Sourc bool GSRendererHW::IsDiscardingDstColor() { - return ( - (!PRIM->ABE || IsOpaque() || m_context->ALPHA.IsBlack()) && // no blending or writing black - !m_cached_ctx.TEST.ATE && // not testing alpha (might discard some pixels) - !m_cached_ctx.TEST.DATE && // not reading alpha + return ((!PRIM->ABE || IsOpaque() || m_context->ALPHA.IsBlack()) && // no blending or writing black + !(m_draw_env->SCANMSK.MSK & 2) && // not skipping rows + !m_cached_ctx.TEST.ATE && // not testing alpha (might discard some pixels) + !m_cached_ctx.TEST.DATE && // not reading alpha (m_cached_ctx.FRAME.FBMSK & GSLocalMemory::m_psm[m_cached_ctx.FRAME.PSM].fmsk) == 0); // no channels masked } bool GSRendererHW::IsDiscardingDstRGB() { return ((!PRIM->ABE || IsOpaque() || m_context->ALPHA.IsBlack()) && // no blending or writing black + !(m_draw_env->SCANMSK.MSK & 2) && // not skipping rows !m_cached_ctx.TEST.ATE && // not testing alpha (might discard some pixels) !m_cached_ctx.TEST.DATE && // not reading alpha ((m_cached_ctx.FRAME.FBMSK & GSLocalMemory::m_psm[m_cached_ctx.FRAME.PSM].fmsk) & 0xFFFFFFu) == @@ -5798,6 +5799,7 @@ bool GSRendererHW::IsDiscardingDstRGB() bool GSRendererHW::IsDiscardingDstAlpha() { return ((!PRIM->ABE || m_context->ALPHA.C != 1) && // not using Ad + !(m_draw_env->SCANMSK.MSK & 2) && // not skipping rows !m_cached_ctx.TEST.ATE && // not testing alpha (might discard some pixels) !m_cached_ctx.TEST.DATE && // not reading alpha ((m_cached_ctx.FRAME.FBMSK & GSLocalMemory::m_psm[m_cached_ctx.FRAME.PSM].fmsk) & 0xFF000000u) ==