mirror of https://github.com/PCSX2/pcsx2.git
GS/HW: Move Tekken 5 CRC hack to the GSC
This commit is contained in:
parent
061ea30199
commit
b2dc31ba80
|
@ -195,6 +195,36 @@ bool GSHwHack::GSC_Tekken5(GSRendererHW& r, int& skip)
|
|||
{
|
||||
if (skip == 0)
|
||||
{
|
||||
if (r.IsPossibleChannelShuffle())
|
||||
{
|
||||
pxAssertMsg((RTBP0 & 31) == 0, "TEX0 should be page aligned");
|
||||
|
||||
GSTextureCache::Target* rt = g_texture_cache->LookupTarget(GIFRegTEX0::Create(RTBP0, RFBW, RFPSM),
|
||||
GSVector2i(1, 1), r.GetTextureScaleFactor(), GSTextureCache::RenderTarget);
|
||||
if (!rt)
|
||||
return false;
|
||||
|
||||
GL_INS("GSC_Tekken5(): HLE channel shuffle");
|
||||
|
||||
// have to set up the palette ourselves too, since GSC executes before it does
|
||||
r.m_mem.m_clut.Read32(RTEX0, r.m_draw_env->TEXA);
|
||||
std::shared_ptr<GSTextureCache::Palette> palette =
|
||||
g_texture_cache->LookupPaletteObject(r.m_mem.m_clut, GSLocalMemory::m_psm[RTEX0.PSM].pal, true);
|
||||
if (!palette)
|
||||
return false;
|
||||
|
||||
GSHWDrawConfig& conf = r.BeginHLEHardwareDraw(
|
||||
rt->GetTexture(), nullptr, rt->GetScale(), rt->GetTexture(), rt->GetScale(), rt->GetUnscaledRect());
|
||||
conf.pal = palette->GetPaletteGSTexture();
|
||||
conf.ps.channel = ChannelFetch_RGB;
|
||||
conf.colormask.wa = false;
|
||||
r.EndHLEHardwareDraw(false);
|
||||
|
||||
// 12 pages: 2 calls by channel, 3 channels, 1 blit
|
||||
skip = 12 * (3 + 3 + 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!s_nativeres && RTME && (RFBP == 0x02d60 || RFBP == 0x02d80 || RFBP == 0x02ea0 || RFBP == 0x03620 || RFBP == 0x03640) && RFPSM == RTPSM && RTBP0 == 0x00000 && RTPSM == PSMCT32)
|
||||
{
|
||||
// Don't enable hack on native res if crc is below aggressive.
|
||||
|
|
|
@ -3137,37 +3137,7 @@ bool GSRendererHW::TestChannelShuffle(GSTextureCache::Target* src)
|
|||
|
||||
__ri bool GSRendererHW::EmulateChannelShuffle(GSTextureCache::Target* src, bool test_only)
|
||||
{
|
||||
// First let's check we really have a channel shuffle effect
|
||||
if (m_game.title == CRC::Tekken5)
|
||||
{
|
||||
if (m_cached_ctx.FRAME.FBW == 1)
|
||||
{
|
||||
// Used in stages: Secret Garden, Acid Rain, Moonlit Wilderness
|
||||
GL_INS("Tekken5 RGB Channel");
|
||||
if (test_only)
|
||||
{
|
||||
pxAssertMsg((m_context->TEX0.TBP0 & 31) == 0, "TEX0 should be page aligned");
|
||||
m_cached_ctx.FRAME.FBP = m_context->TEX0.TBP0 >> 5;
|
||||
return true;
|
||||
}
|
||||
|
||||
m_conf.ps.channel = ChannelFetch_RGB;
|
||||
m_cached_ctx.FRAME.FBMSK = 0xFF000000;
|
||||
// 12 pages: 2 calls by channel, 3 channels, 1 blit
|
||||
// Minus current draw call
|
||||
m_skip = 12 * (3 + 3 + 1) - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Could skip model drawing if wrongly detected
|
||||
if (test_only)
|
||||
return false;
|
||||
|
||||
m_channel_shuffle = false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if ((src->m_texture->GetType() == GSTexture::Type::DepthStencil) && !src->m_32_bits_fmt)
|
||||
if ((src->m_texture->GetType() == GSTexture::Type::DepthStencil) && !src->m_32_bits_fmt)
|
||||
{
|
||||
// So far 2 games hit this code path. Urban Chaos and Tales of Abyss
|
||||
// UC: will copy depth to green channel
|
||||
|
|
Loading…
Reference in New Issue