mirror of https://github.com/PCSX2/pcsx2.git
GS/HW: Fix GT4/T5 CRC hacks in DirectX renderers
This commit is contained in:
parent
4af3856d15
commit
fff8592b4e
|
@ -2742,13 +2742,22 @@ __ri bool GSRendererHW::EmulateChannelShuffle(GSTextureCache::Target* src, bool
|
||||||
// First let's check we really have a channel shuffle effect
|
// First let's check we really have a channel shuffle effect
|
||||||
if (m_game.title == CRC::PolyphonyDigitalGames)
|
if (m_game.title == CRC::PolyphonyDigitalGames)
|
||||||
{
|
{
|
||||||
|
// These games appear to grab red and write it to a new page-sized render target, then
|
||||||
|
// grab green and blue, with alpha blending turned on, to accumulate them to the temporary
|
||||||
|
// target, then copy the temporary target back to the main FB. The CLUT is set to an offset
|
||||||
|
// ramp texture, presumably this is for screen brightness.
|
||||||
GL_INS("Gran Turismo RGB Channel");
|
GL_INS("Gran Turismo RGB Channel");
|
||||||
if (test_only)
|
if (test_only)
|
||||||
|
{
|
||||||
|
// Since test_only gets executed when creating a source, before target lookup, we can hack
|
||||||
|
// the FBP here to point to the source, which is where it will eventually be copied back to.
|
||||||
|
pxAssertMsg((m_context->TEX0.TBP0 & 31) == 0, "TEX0 should be page aligned");
|
||||||
|
m_context->FRAME.FBP = m_context->TEX0.TBP0 >> 5;
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
m_conf.ps.channel = ChannelFetch_RGB;
|
m_conf.ps.channel = ChannelFetch_RGB;
|
||||||
m_context->TEX0.TFX = TFX_DECAL;
|
m_context->TEX0.TFX = TFX_DECAL;
|
||||||
m_conf.rt = src->m_texture;
|
|
||||||
}
|
}
|
||||||
else if (m_game.title == CRC::Tekken5)
|
else if (m_game.title == CRC::Tekken5)
|
||||||
{
|
{
|
||||||
|
@ -2757,14 +2766,17 @@ __ri bool GSRendererHW::EmulateChannelShuffle(GSTextureCache::Target* src, bool
|
||||||
// Used in stages: Secret Garden, Acid Rain, Moonlit Wilderness
|
// Used in stages: Secret Garden, Acid Rain, Moonlit Wilderness
|
||||||
GL_INS("Tekken5 RGB Channel");
|
GL_INS("Tekken5 RGB Channel");
|
||||||
if (test_only)
|
if (test_only)
|
||||||
|
{
|
||||||
|
pxAssertMsg((m_context->TEX0.TBP0 & 31) == 0, "TEX0 should be page aligned");
|
||||||
|
m_context->FRAME.FBP = m_context->TEX0.TBP0 >> 5;
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
m_conf.ps.channel = ChannelFetch_RGB;
|
m_conf.ps.channel = ChannelFetch_RGB;
|
||||||
m_context->FRAME.FBMSK = 0xFF000000;
|
m_context->FRAME.FBMSK = 0xFF000000;
|
||||||
// 12 pages: 2 calls by channel, 3 channels, 1 blit
|
// 12 pages: 2 calls by channel, 3 channels, 1 blit
|
||||||
// Minus current draw call
|
// Minus current draw call
|
||||||
m_skip = 12 * (3 + 3 + 1) - 1;
|
m_skip = 12 * (3 + 3 + 1) - 1;
|
||||||
m_conf.rt = src->m_texture;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue