diff --git a/pcsx2/GS/Renderers/HW/GSTextureCache.cpp b/pcsx2/GS/Renderers/HW/GSTextureCache.cpp index d77cb44112..95de4c7e1d 100644 --- a/pcsx2/GS/Renderers/HW/GSTextureCache.cpp +++ b/pcsx2/GS/Renderers/HW/GSTextureCache.cpp @@ -1765,7 +1765,7 @@ bool GSTextureCache::Move(u32 SBP, u32 SBW, u32 SPSM, int sx, int sy, u32 DBP, u // Beware of the case where a game might create a larger texture by moving a bunch of chunks around. // We use dx/dy == 0 and the TBW check as a safeguard to make sure these go through to local memory. // Good test case for this is the Xenosaga I cutscene transitions, or Gradius V. - if (src && !dst && dx == 0 && dy == 0 && ((static_cast(w) + 63) / 64) == DBW) + if (src && !dst && dx == 0 && dy == 0 && ((static_cast(w) + 63) / 64) <= DBW) { GIFRegTEX0 new_TEX0 = {}; new_TEX0.TBP0 = DBP; @@ -1774,7 +1774,8 @@ bool GSTextureCache::Move(u32 SBP, u32 SBW, u32 SPSM, int sx, int sy, u32 DBP, u const int real_height = GetTargetHeight(DBP, DBW, DPSM, h); const GSVector2 scale(src->m_texture->GetScale()); - dst = LookupTarget(new_TEX0, GSVector2i(static_cast(w * scale.x), static_cast(real_height * scale.y)), src->m_type, true); + dst = LookupTarget(new_TEX0, GSVector2i(static_cast(Common::AlignUpPow2(w, 64) * scale.x), + static_cast(real_height * scale.y)), src->m_type, true); if (dst) { dst->m_texture->SetScale(scale);