From 4c94c69f02035bcf9af800c19a1d0105bb9d7de2 Mon Sep 17 00:00:00 2001 From: refractionpcsx2 Date: Sat, 10 May 2025 01:09:32 +0100 Subject: [PATCH] GS: Clear Adaptive Interlacing buffer when outputs are disabled --- pcsx2/GS/Renderers/Common/GSDevice.h | 3 ++- pcsx2/GS/Renderers/Common/GSRenderer.cpp | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/pcsx2/GS/Renderers/Common/GSDevice.h b/pcsx2/GS/Renderers/Common/GSDevice.h index b61dca49be..bbca6aa0f9 100644 --- a/pcsx2/GS/Renderers/Common/GSDevice.h +++ b/pcsx2/GS/Renderers/Common/GSDevice.h @@ -934,7 +934,8 @@ public: __fi bool IsPresentThrottleAllowed() const { return m_allow_present_throttle; } __fi GSTexture* GetCurrent() const { return m_current; } - + __fi GSTexture* GetMAD() const { return m_mad; } + void Recycle(GSTexture* t); /// Returns true if it's an OpenGL-based renderer. diff --git a/pcsx2/GS/Renderers/Common/GSRenderer.cpp b/pcsx2/GS/Renderers/Common/GSRenderer.cpp index 839b06bc60..8cd34b34bf 100644 --- a/pcsx2/GS/Renderers/Common/GSRenderer.cpp +++ b/pcsx2/GS/Renderers/Common/GSRenderer.cpp @@ -118,6 +118,18 @@ bool GSRenderer::Merge(int field) if (!tex[0] && !tex[1]) { m_real_size = GSVector2i(0, 0); + + // Clear out the MAD buffer as some remnants of the previously shown frame came be left over, causing a flash for one frame. + if (GSConfig.InterlaceMode == GSInterlaceMode::Automatic || GSConfig.InterlaceMode >= GSInterlaceMode::AdaptiveTFF) + { + GSTexture* mad_tex = g_gs_device->GetMAD(); + + if (mad_tex) + { + g_gs_device->ClearRenderTarget(mad_tex, 0); + mad_tex = nullptr; + } + } return false; }