From 74ea27817dee587a1f3185e1c7b34e82ba1fb2b4 Mon Sep 17 00:00:00 2001 From: refractionpcsx2 Date: Tue, 18 Jun 2024 04:56:07 +0100 Subject: [PATCH] GS/HW: Keep real rect before draw to avoid bad valid rect update --- pcsx2/GS/Renderers/HW/GSRendererHW.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp index 286de46b0c..c05a2f969a 100644 --- a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp +++ b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp @@ -3339,6 +3339,7 @@ void GSRendererHW::Draw() } // + const GSVector4i real_rect = m_r; if (!skip_draw) DrawPrims(rt, ds, src, tmm); @@ -3358,9 +3359,9 @@ void GSRendererHW::Draw() { //rt->m_valid = rt->m_valid.runion(r); // Limit to 2x the vertical height of the resolution (for double buffering) - rt->UpdateValidity(m_r, can_update_size || (m_r.w <= (resolution.y * 2) && !m_texture_shuffle)); + rt->UpdateValidity(real_rect, can_update_size || (real_rect.w <= (resolution.y * 2) && !m_texture_shuffle)); - g_texture_cache->InvalidateVideoMem(context->offset.fb, m_r, false); + g_texture_cache->InvalidateVideoMem(context->offset.fb, real_rect, false); // Remove overwritten Zs at the FBP. g_texture_cache->InvalidateVideoMemType(GSTextureCache::DepthStencil, m_cached_ctx.FRAME.Block(), @@ -3371,9 +3372,9 @@ void GSRendererHW::Draw() { //ds->m_valid = ds->m_valid.runion(r); // Limit to 2x the vertical height of the resolution (for double buffering) - ds->UpdateValidity(m_r, can_update_size || (m_r.w <= (resolution.y * 2) && !m_texture_shuffle)); + ds->UpdateValidity(real_rect, can_update_size || (real_rect.w <= (resolution.y * 2) && !m_texture_shuffle)); - g_texture_cache->InvalidateVideoMem(context->offset.zb, m_r, false); + g_texture_cache->InvalidateVideoMem(context->offset.zb, real_rect, false); // Remove overwritten RTs at the ZBP. g_texture_cache->InvalidateVideoMemType( @@ -3415,7 +3416,7 @@ void GSRendererHW::Draw() #ifdef DISABLE_HW_TEXTURE_CACHE if (rt) - g_texture_cache->Read(rt, m_r); + g_texture_cache->Read(rt, real_rect); #endif //