mirror of https://github.com/PCSX2/pcsx2.git
GS/HW: If HW Move is outside of target, make a new target instead
This commit is contained in:
parent
0506b8d996
commit
d87a744599
|
@ -3758,6 +3758,19 @@ bool GSTextureCache::Move(u32 SBP, u32 SBW, u32 SPSM, int sx, int sy, u32 DBP, u
|
|||
if (alpha_only && (!dst || GSLocalMemory::m_psm[dst->m_TEX0.PSM].bpp != 32))
|
||||
return false;
|
||||
|
||||
// Beware of the case where a game might create a larger texture by moving a bunch of chunks around.
|
||||
if (dst && DBP == SBP && dy > dst->m_unscaled_size.y)
|
||||
{
|
||||
const u32 new_DBP = DBP + (((dy / GSLocalMemory::m_psm[dst->m_TEX0.PSM].pgs.y) * DBW) << 5);
|
||||
|
||||
dst = nullptr;
|
||||
|
||||
DBP = new_DBP;
|
||||
dy = 0;
|
||||
|
||||
dst = GetExactTarget(DBP, DBW, dpsm_s.depth ? DepthStencil : RenderTarget, DBP);
|
||||
}
|
||||
|
||||
// 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.
|
||||
// We can also recreate the target if it's previously been created in the height cache with a valid size.
|
||||
|
|
Loading…
Reference in New Issue