mirror of https://github.com/PCSX2/pcsx2.git
GS/HW: Always update preloaded dirty areas
This commit is contained in:
parent
b38d008a96
commit
faa54f6c14
|
@ -2746,7 +2746,7 @@ void GSRendererHW::Draw()
|
||||||
m_last_channel_shuffle_fbp = rt->m_TEX0.TBP0;
|
m_last_channel_shuffle_fbp = rt->m_TEX0.TBP0;
|
||||||
|
|
||||||
// If it's a new target, we don't know where the end is as it's starting on a shuffle, so just do every shuffle following.
|
// If it's a new target, we don't know where the end is as it's starting on a shuffle, so just do every shuffle following.
|
||||||
m_last_channel_shuffle_end_block = (rt->m_last_draw == s_n) ? (MAX_BLOCKS - 1) : (rt->m_end_block < rt->m_TEX0.TBP0 ? (rt->m_end_block + MAX_BLOCKS) : rt->m_end_block);
|
m_last_channel_shuffle_end_block = (rt->m_last_draw >= s_n) ? (MAX_BLOCKS - 1) : (rt->m_end_block < rt->m_TEX0.TBP0 ? (rt->m_end_block + MAX_BLOCKS) : rt->m_end_block);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3220,7 +3220,8 @@ void GSRendererHW::Draw()
|
||||||
|
|
||||||
if (rt)
|
if (rt)
|
||||||
{
|
{
|
||||||
if (m_texture_shuffle || m_channel_shuffle || (!rt->m_dirty.empty() && !rt->m_dirty.GetTotalRect(rt->m_TEX0, rt->m_unscaled_size).rintersect(m_r).rempty()))
|
// Always update the preloaded data (marks s_n to last draw or newer)
|
||||||
|
if (rt->m_last_draw >= s_n || m_texture_shuffle || m_channel_shuffle || (!rt->m_dirty.empty() && !rt->m_dirty.GetTotalRect(rt->m_TEX0, rt->m_unscaled_size).rintersect(m_r).rempty()))
|
||||||
{
|
{
|
||||||
const u32 alpha = m_cached_ctx.FRAME.FBMSK >> 24;
|
const u32 alpha = m_cached_ctx.FRAME.FBMSK >> 24;
|
||||||
const u32 alpha_mask = GSLocalMemory::m_psm[m_cached_ctx.FRAME.PSM].fmsk >> 24;
|
const u32 alpha_mask = GSLocalMemory::m_psm[m_cached_ctx.FRAME.PSM].fmsk >> 24;
|
||||||
|
@ -3231,7 +3232,7 @@ void GSRendererHW::Draw()
|
||||||
}
|
}
|
||||||
if (ds)
|
if (ds)
|
||||||
{
|
{
|
||||||
if (m_texture_shuffle || m_channel_shuffle || (!ds->m_dirty.empty() && !ds->m_dirty.GetTotalRect(ds->m_TEX0, ds->m_unscaled_size).rintersect(m_r).rempty()))
|
if (ds->m_last_draw >= s_n || m_texture_shuffle || m_channel_shuffle || (!ds->m_dirty.empty() && !ds->m_dirty.GetTotalRect(ds->m_TEX0, ds->m_unscaled_size).rintersect(m_r).rempty()))
|
||||||
ds->Update();
|
ds->Update();
|
||||||
else
|
else
|
||||||
ds->m_age = 0;
|
ds->m_age = 0;
|
||||||
|
|
|
@ -2422,7 +2422,7 @@ GSTextureCache::Target* GSTextureCache::CreateTarget(GIFRegTEX0 TEX0, const GSVe
|
||||||
if (dst->m_dirty.empty() && GSLocalMemory::m_psm[TEX0.PSM].depth == 0 && (GSUtil::GetChannelMask(TEX0.PSM) & 0x8))
|
if (dst->m_dirty.empty() && GSLocalMemory::m_psm[TEX0.PSM].depth == 0 && (GSUtil::GetChannelMask(TEX0.PSM) & 0x8))
|
||||||
dst->m_rt_alpha_scale = true;
|
dst->m_rt_alpha_scale = true;
|
||||||
else
|
else
|
||||||
dst->m_last_draw -= 1; // If we preload and it needs to decorrect and we couldn't catch it early, we need to make sure it decorrects the data.
|
dst->m_last_draw += 1; // If we preload and it needs to decorrect and we couldn't catch it early, we need to make sure it decorrects the data.
|
||||||
|
|
||||||
pxAssert(dst && dst->m_texture && dst->m_scale == scale);
|
pxAssert(dst && dst->m_texture && dst->m_scale == scale);
|
||||||
return dst;
|
return dst;
|
||||||
|
|
Loading…
Reference in New Issue