diff --git a/pcsx2/GS/Renderers/Common/GSTexture.h b/pcsx2/GS/Renderers/Common/GSTexture.h index 72c6cb229e..cccbae0ea2 100644 --- a/pcsx2/GS/Renderers/Common/GSTexture.h +++ b/pcsx2/GS/Renderers/Common/GSTexture.h @@ -88,6 +88,7 @@ public: int GetWidth() const { return m_size.x; } int GetHeight() const { return m_size.y; } GSVector2i GetSize() const { return m_size; } + GSVector4i GetRect() const { return GSVector4i(m_size).zwxy(); } int GetMipmapLevels() const { return m_mipmap_levels; } bool IsMipmap() const { return m_mipmap_levels > 1; } diff --git a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp index 3c4e970b94..852dd51d73 100644 --- a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp +++ b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp @@ -4560,7 +4560,7 @@ bool GSRendererHW::OI_BlitFMV(GSTextureCache::Target* _rt, GSTextureCache::Sourc // Copy back the texture into the GS mem. I don't know why but it will be // reuploaded again later - m_tc->Read(tex, r_texture); + m_tc->Read(tex, r_texture.rintersect(tex->m_texture->GetRect())); m_tc->InvalidateVideoMemSubTarget(_rt); diff --git a/pcsx2/GS/Renderers/HW/GSTextureCache.cpp b/pcsx2/GS/Renderers/HW/GSTextureCache.cpp index 0faaed72d2..3a5bf063c7 100644 --- a/pcsx2/GS/Renderers/HW/GSTextureCache.cpp +++ b/pcsx2/GS/Renderers/HW/GSTextureCache.cpp @@ -2830,6 +2830,9 @@ void GSTextureCache::Read(Target* t, const GSVector4i& r) void GSTextureCache::Read(Source* t, const GSVector4i& r) { + if (r.rempty()) + return; + const GSVector4i drc(0, 0, r.width(), r.height()); if (!PrepareDownloadTexture(drc.z, drc.w, GSTexture::Format::Color, &m_color_download_texture))