diff --git a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp index ac829f0d71..e40e09cc85 100644 --- a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp +++ b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp @@ -267,11 +267,14 @@ GSTexture* GSRendererHW::GetOutput(int i, int& y_offset) TEX0.TBW = DISPFB.FBW; TEX0.PSM = DISPFB.PSM; + const int videomode = static_cast(GetVideoMode()) - 1; + int display_height = VideoModeOffsets[videomode].y * ((isinterlaced() && !m_regs->SMODE2.FFMD) ? 2 : 1); + int fb_height = std::min(GetFramebufferHeight(), display_height); // TRACE(_T("[%d] GetOutput %d %05x (%d)\n"), (int)m_perfmon.GetFrame(), i, (int)TEX0.TBP0, (int)TEX0.PSM); GSTexture* t = NULL; - if (GSTextureCache::Target* rt = m_tc->LookupTarget(TEX0, GetTargetSize(), GetFramebufferHeight())) + if (GSTextureCache::Target* rt = m_tc->LookupTarget(TEX0, GetTargetSize(), fb_height)) { t = rt->m_texture; diff --git a/pcsx2/GS/Renderers/SW/GSRendererSW.cpp b/pcsx2/GS/Renderers/SW/GSRendererSW.cpp index 9261717d80..175a2b054f 100644 --- a/pcsx2/GS/Renderers/SW/GSRendererSW.cpp +++ b/pcsx2/GS/Renderers/SW/GSRendererSW.cpp @@ -141,7 +141,10 @@ GSTexture* GSRendererSW::GetOutput(int i, int& y_offset) const GSRegDISPFB& DISPFB = m_regs->DISP[i].DISPFB; int w = DISPFB.FBW * 64; - int h = GetFramebufferHeight(); + + const int videomode = static_cast(GetVideoMode()) - 1; + int display_height = VideoModeOffsets[videomode].y * ((isinterlaced() && !m_regs->SMODE2.FFMD) ? 2 : 1); + int h = std::min(GetFramebufferHeight(), display_height); // TODO: round up bottom