GS: Limit the offset for FFMD to prevent over scaling.

This commit is contained in:
refractionpcsx2 2022-06-24 20:00:34 +01:00
parent 75d57640eb
commit 539e285f86
2 changed files with 3 additions and 2 deletions

View File

@ -378,7 +378,7 @@ void GSDevice::Interlace(const GSVector2i& ds, int field, int mode, float yoffse
if (mode == 0 || mode == 2) // weave or blend
{
// weave first
const float offset = -yoffset * static_cast<float>(field);
const float offset = yoffset * static_cast<float>(field);
DoInterlace(m_merge, m_weavebob, field, false, GSConfig.DisableInterlaceOffset ? 0.0f : offset);

View File

@ -308,7 +308,8 @@ bool GSRenderer::Merge(int field)
if (m_regs->SMODE2.FFMD && !is_bob && !GSConfig.DisableInterlaceOffset)
{
interlace_offset += (tex[1] ? tex[1]->GetScale().y : tex[0]->GetScale().y) * static_cast<float>(field ^ field2);
// Why 3/4? Mainly to line up the odd scanlines for the interlacing routine.
interlace_offset += ((tex[1] ? tex[1]->GetScale().y : tex[0]->GetScale().y) * 0.75f) * static_cast<float>(field ^ field2);
// We're handling the interlacing offset for upscaling in the merge circuit, rather than in the interlacing shader.
offset = 0.0f;
}