mirror of https://github.com/PCSX2/pcsx2.git
GS/HW: Split up consecutive channel shuffles
This commit is contained in:
parent
51420dade4
commit
f97191e241
|
@ -1361,7 +1361,10 @@ void GSRendererHW::Draw()
|
||||||
|
|
||||||
if (m_channel_shuffle)
|
if (m_channel_shuffle)
|
||||||
{
|
{
|
||||||
m_channel_shuffle = draw_sprite_tex && (m_context->TEX0.PSM == PSM_PSMT8) && single_page;
|
// NFSU2 does consecutive channel shuffles with blending, reducing the alpha channel over time.
|
||||||
|
// Fortunately, it seems to change the FBMSK along the way, so this check alone is sufficient.
|
||||||
|
m_channel_shuffle = draw_sprite_tex && m_context->TEX0.PSM == PSM_PSMT8 && single_page &&
|
||||||
|
m_last_channel_shuffle_fbmsk == m_context->FRAME.FBMSK;
|
||||||
if (m_channel_shuffle)
|
if (m_channel_shuffle)
|
||||||
{
|
{
|
||||||
GL_CACHE("Channel shuffle effect detected SKIP");
|
GL_CACHE("Channel shuffle effect detected SKIP");
|
||||||
|
@ -1375,6 +1378,7 @@ void GSRendererHW::Draw()
|
||||||
{
|
{
|
||||||
GL_INS("Channel shuffle effect detected");
|
GL_INS("Channel shuffle effect detected");
|
||||||
m_channel_shuffle = true;
|
m_channel_shuffle = true;
|
||||||
|
m_last_channel_shuffle_fbmsk = m_context->FRAME.FBMSK;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1621,6 +1625,7 @@ void GSRendererHW::Draw()
|
||||||
{
|
{
|
||||||
GL_INS("Channel shuffle effect detected (2nd shot)");
|
GL_INS("Channel shuffle effect detected (2nd shot)");
|
||||||
m_channel_shuffle = true;
|
m_channel_shuffle = true;
|
||||||
|
m_last_channel_shuffle_fbmsk = m_context->FRAME.FBMSK;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -107,8 +107,10 @@ private:
|
||||||
int m_skip = 0;
|
int m_skip = 0;
|
||||||
int m_skip_offset = 0;
|
int m_skip_offset = 0;
|
||||||
|
|
||||||
bool m_tex_is_fb = false;
|
u32 m_last_channel_shuffle_fbmsk = 0;
|
||||||
bool m_channel_shuffle = false;
|
bool m_channel_shuffle = false;
|
||||||
|
|
||||||
|
bool m_tex_is_fb = false;
|
||||||
bool m_userhacks_tcoffset = false;
|
bool m_userhacks_tcoffset = false;
|
||||||
float m_userhacks_tcoffset_x = 0.0f;
|
float m_userhacks_tcoffset_x = 0.0f;
|
||||||
float m_userhacks_tcoffset_y = 0.0f;
|
float m_userhacks_tcoffset_y = 0.0f;
|
||||||
|
|
Loading…
Reference in New Issue