GS/HW: Don't kill old targets unless completely dirty or targets overlap

This commit is contained in:
refractionpcsx2 2024-06-12 20:27:23 +01:00
parent 21df138833
commit e6714db7b3
1 changed files with 2 additions and 2 deletions

View File

@ -4296,7 +4296,7 @@ void GSTextureCache::IncAge()
AgeHashCache();
// As of 04/15/2024 this is s et to 60 (just 1 second of targets), which should be fine now as it doesn't destroy targets which haven't been coevred.
// As of 04/15/2024 this is s et to 60 (just 1 second of targets), which should be fine now as it doesn't destroy targets which haven't been covered.
//
// For reference, here are some games sensitive to killing old targets:
// Original maxage was 4 here, Xenosaga 2 needs at least 240, else it flickers on scene transitions.
@ -4318,7 +4318,7 @@ void GSTextureCache::IncAge()
{
const Target* overlapping_tgt = FindOverlappingTarget(t);
if (!t->m_dirty.empty() || overlapping_tgt != nullptr)
if (overlapping_tgt != nullptr || t->m_dirty.GetTotalRect(t->m_TEX0, GSVector2i(t->m_valid.width(), t->m_valid.height())).rintersect(t->m_valid).eq(t->m_valid))
{
i = list.erase(i);
GL_CACHE("TC: Remove Target(%s): (0x%x) due to age", to_string(type),