mirror of https://github.com/PCSX2/pcsx2.git
GS/HW: Stop 24bit targets from RT Alpha correcting
This commit is contained in:
parent
088ba4e2ea
commit
553ad0a372
|
@ -5397,7 +5397,7 @@ __ri void GSRendererHW::DrawPrims(GSTextureCache::Target* rt, GSTextureCache::Ta
|
||||||
// If we Correct/Decorrect and tex is rt, we will need to update the texture reference
|
// If we Correct/Decorrect and tex is rt, we will need to update the texture reference
|
||||||
const bool req_src_update = tex && rt && tex->m_target && tex->m_target_direct && tex->m_texture == rt->m_texture;
|
const bool req_src_update = tex && rt && tex->m_target && tex->m_target_direct && tex->m_texture == rt->m_texture;
|
||||||
|
|
||||||
m_can_correct_alpha = !needs_ad;
|
m_can_correct_alpha = !needs_ad && (GSUtil::GetChannelMask(m_cached_ctx.FRAME.PSM) & 0x8);
|
||||||
|
|
||||||
if (rt)
|
if (rt)
|
||||||
{
|
{
|
||||||
|
@ -5464,7 +5464,7 @@ __ri void GSRendererHW::DrawPrims(GSTextureCache::Target* rt, GSTextureCache::Ta
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!rt->m_rt_alpha_scale)
|
else if (!rt->m_rt_alpha_scale)
|
||||||
m_can_correct_alpha = rt->m_alpha_max <= 128 && !needs_ad;
|
m_can_correct_alpha = rt->m_alpha_max <= 128 && m_can_correct_alpha;
|
||||||
|
|
||||||
m_conf.ps.rta_correction = rt->m_rt_alpha_scale;
|
m_conf.ps.rta_correction = rt->m_rt_alpha_scale;
|
||||||
}
|
}
|
||||||
|
@ -6412,7 +6412,8 @@ bool GSRendererHW::TryTargetClear(GSTextureCache::Target* rt, GSTextureCache::Ta
|
||||||
{
|
{
|
||||||
const u32 c = GetConstantDirectWriteMemClearColor();
|
const u32 c = GetConstantDirectWriteMemClearColor();
|
||||||
u32 clear_c = c;
|
u32 clear_c = c;
|
||||||
const bool alpha_one_or_less = (c >> 24) <= 0x80;
|
const bool has_alpha = GSLocalMemory::m_psm[rt->m_TEX0.PSM].trbpp != 24;
|
||||||
|
const bool alpha_one_or_less = has_alpha && (c >> 24) <= 0x80;
|
||||||
GL_INS("TryTargetClear(): RT at %x <= %08X", rt->m_TEX0.TBP0, c);
|
GL_INS("TryTargetClear(): RT at %x <= %08X", rt->m_TEX0.TBP0, c);
|
||||||
|
|
||||||
if (rt->m_rt_alpha_scale || alpha_one_or_less)
|
if (rt->m_rt_alpha_scale || alpha_one_or_less)
|
||||||
|
@ -6431,7 +6432,7 @@ bool GSRendererHW::TryTargetClear(GSTextureCache::Target* rt, GSTextureCache::Ta
|
||||||
|
|
||||||
g_gs_device->ClearRenderTarget(rt->m_texture, clear_c);
|
g_gs_device->ClearRenderTarget(rt->m_texture, clear_c);
|
||||||
|
|
||||||
if (GSLocalMemory::m_psm[rt->m_TEX0.PSM].trbpp != 24)
|
if (has_alpha)
|
||||||
{
|
{
|
||||||
rt->m_alpha_max = c >> 24;
|
rt->m_alpha_max = c >> 24;
|
||||||
rt->m_alpha_min = c >> 24;
|
rt->m_alpha_min = c >> 24;
|
||||||
|
|
|
@ -2367,7 +2367,7 @@ GSTextureCache::Target* GSTextureCache::CreateTarget(GIFRegTEX0 TEX0, const GSVe
|
||||||
|
|
||||||
dst->m_last_draw = GSState::s_n;
|
dst->m_last_draw = GSState::s_n;
|
||||||
|
|
||||||
if (dst->m_dirty.empty())
|
if (dst->m_dirty.empty() && (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.
|
||||||
|
|
Loading…
Reference in New Issue