GS/HW: Don't break out of target search loop on dirty target

This commit is contained in:
Stenzek 2023-04-06 21:41:35 +10:00 committed by refractionpcsx2
parent c121aae8f1
commit 631f75a79c
1 changed files with 11 additions and 12 deletions

View File

@ -735,12 +735,6 @@ GSTextureCache::Source* GSTextureCache::LookupSource(const GIFRegTEX0& TEX0, con
if (swizzle_match) if (swizzle_match)
{ {
new_rect = TranslateAlignedRectByPage(t, bp, psm, bw, r); new_rect = TranslateAlignedRectByPage(t, bp, psm, bw, r);
if (new_rect.eq(GSVector4i::zero()))
{
rect_clean = false;
break;
}
} }
else else
{ {
@ -760,6 +754,8 @@ GSTextureCache::Source* GSTextureCache::LookupSource(const GIFRegTEX0& TEX0, con
} }
new_rect = TranslateAlignedRectByPage(t, bp & ~((1 << 5) - 1), psm, bw, new_rect); new_rect = TranslateAlignedRectByPage(t, bp & ~((1 << 5) - 1), psm, bw, new_rect);
} }
rect_clean = !new_rect.eq(GSVector4i::zero());
} }
else else
{ {
@ -781,14 +777,17 @@ GSTextureCache::Source* GSTextureCache::LookupSource(const GIFRegTEX0& TEX0, con
} }
} }
for (auto& dirty : t->m_dirty) if (rect_clean)
{ {
GSVector4i dirty_rect = dirty.GetDirtyRect(t->m_TEX0); for (auto& dirty : t->m_dirty)
if (!dirty_rect.rintersect(new_rect).rempty())
{ {
rect_clean = false; GSVector4i dirty_rect = dirty.GetDirtyRect(t->m_TEX0);
partial |= !new_rect.rintersect(dirty_rect).eq(new_rect); if (!dirty_rect.rintersect(new_rect).rempty())
break; {
rect_clean = false;
partial |= !new_rect.rintersect(dirty_rect).eq(new_rect);
break;
}
} }
} }