GS: Force Blend TFF when scanmsk is used on the frame

This commit is contained in:
refractionpcsx2 2022-01-22 01:12:17 +00:00
parent e5a4f27e79
commit 7d356a2d20
1 changed files with 6 additions and 2 deletions

View File

@ -158,6 +158,7 @@ bool GSRenderer::Merge(int field)
GSVector4 dst[2];
const bool slbg = m_regs->PMODE.SLBG;
bool scanmsk_frame = true;
for (int i = 0; i < 2; i++)
{
@ -191,7 +192,10 @@ bool GSRenderer::Merge(int field)
}
if (m_scanmask_used && display_diff.y == 1) // Scanmask effect wouldn't look correct if we scale the offset
{
off.y = display_diff.y;
scanmsk_frame = false; // Scanmsk is used between the 2 merge circuits.
}
else if (display_diff.y >= 4) // Shouldn't this be >= 2?
{
off.y = tex[i]->GetScale().y * display_diff.y;
@ -235,9 +239,9 @@ bool GSRenderer::Merge(int field)
if (m_regs->SMODE2.INT && GSConfig.InterlaceMode != GSInterlaceMode::Off)
{
if (GSConfig.InterlaceMode == GSInterlaceMode::Automatic && m_regs->SMODE2.FFMD) // Auto interlace enabled / Odd frame interlace setting
if (GSConfig.InterlaceMode == GSInterlaceMode::Automatic && (m_regs->SMODE2.FFMD || (m_scanmask_used && scanmsk_frame))) // Auto interlace enabled / Odd frame interlace setting
{
int field2 = 0;
int field2 = m_scanmask_used;
int mode = 2;
g_gs_device->Interlace(ds, field ^ field2, mode, tex[1] ? tex[1]->GetScale().y : tex[0]->GetScale().y);
}