GS: Don't apply offset when using SLBG. Fixes The Suffering video monitors

This commit is contained in:
Christian Kenny 2022-01-09 16:42:32 -05:00 committed by refractionpcsx2
parent f1d3177b69
commit 074ffacf9d
1 changed files with 30 additions and 26 deletions

View File

@ -157,6 +157,8 @@ bool GSRenderer::Merge(int field)
GSVector4 src_hw[2];
GSVector4 dst[2];
const bool slbg = m_regs->PMODE.SLBG;
for (int i = 0; i < 2; i++)
{
if (!en[i] || !tex[i])
@ -172,6 +174,10 @@ bool GSRenderer::Merge(int field)
GSVector2i display_diff(dr[i].left - display_baseline.x, dr[i].top - display_baseline.y);
GSVector2i frame_diff(fr[i].left - frame_baseline.x, fr[i].top - frame_baseline.y);
// Don't apply offset when blending with background color
// The Suffering - video monitors (feedback write)
if (!slbg)
{
// Time Crisis 2/3 uses two side by side images when in split screen mode.
// Though ignore cases where baseline and display rectangle offsets only differ by 1 pixel, causes blurring and wrong resolution output on FFXII
if (display_diff.x > 2)
@ -199,7 +205,7 @@ bool GSRenderer::Merge(int field)
{
off.y = tex[i]->GetScale().y * frame_diff.y;
}
}
dst[i] = GSVector4(off).xyxy() + scale * GSVector4(r.rsize());
fs.x = std::max(fs.x, (int)(dst[i].z + 0.5f));
@ -214,8 +220,6 @@ bool GSRenderer::Merge(int field)
}
m_real_size = ds;
bool slbg = m_regs->PMODE.SLBG;
if (tex[0] || tex[1])
{
if (tex[0] == tex[1] && !slbg && (src[0] == src[1] & dst[0] == dst[1]).alltrue())