Merge pull request #653 from PCSX2/texture-shuffle-again

gsdx: texture shuffle detection
This commit is contained in:
Gregory Hainaut 2015-07-12 18:48:00 +02:00
commit c9d6ce3b63
1 changed files with 11 additions and 11 deletions

View File

@ -404,21 +404,21 @@ void GSRendererHW::Draw()
m_mem.m_clut.Read32(context->TEX0, env.TEXA); m_mem.m_clut.Read32(context->TEX0, env.TEXA);
} }
bool not_really_16_bits = tex->m_32_bits_fmt;
if (rt) { if (rt) {
not_really_16_bits |= rt->m_32_bits_fmt; // Hypothesis: texture shuffle is used as a postprocessing effect so texture will be an old target.
} // Initially code also tested the RT but it gives too much false-positive
// Both input and output are 16 bits but either texture or RT was initially 32 bits! //
m_texture_shuffle = (context->FRAME.PSM & 0x2) && ((context->TEX0.PSM & 3) == 2) && (m_vt.m_primclass == GS_SPRITE_CLASS) && not_really_16_bits; // Both input and output are 16 bits and texture was initially 32 bits!
m_texture_shuffle = (context->FRAME.PSM & 0x2) && ((context->TEX0.PSM & 3) == 2) && (m_vt.m_primclass == GS_SPRITE_CLASS) && tex->m_32_bits_fmt;
// Be sure texture shuffle detection is properly propagated // Be sure texture shuffle detection is properly propagated
if (m_texture_shuffle && rt) { // Otherwise set or clear the flag (Code in texture cache only set the flag)
rt->m_32_bits_fmt |= tex->m_32_bits_fmt; rt->m_32_bits_fmt = m_texture_shuffle || !(context->FRAME.PSM & 0x2);
}
// Texture shuffle is not yet supported with strange clamp mode // Texture shuffle is not yet supported with strange clamp mode
ASSERT(!m_texture_shuffle || (context->CLAMP.WMS < 3 && context->CLAMP.WMT < 3)); ASSERT(!m_texture_shuffle || (context->CLAMP.WMS < 3 && context->CLAMP.WMT < 3));
} }
}
if(s_dump) if(s_dump)
{ {