From 175ab359719a414c343b76c4166e9f813bcbfcaf Mon Sep 17 00:00:00 2001 From: Sergey Lipskiy Date: Mon, 12 Sep 2016 21:27:38 +0700 Subject: [PATCH] VI_UpdateSize() : correct width/height calculation in interlaced mode. Still hackish. Fixed Star Wars Episode One Racer Flicker and Black Screen with Frame Buffer Emulation #1119 Fixed Top Gear Overdrive black screen #1122 --- src/VI.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/VI.cpp b/src/VI.cpp index 1b732c34..78a4b728 100644 --- a/src/VI.cpp +++ b/src/VI.cpp @@ -39,9 +39,10 @@ void VI_UpdateSize() VI.width = *REG.VI_WIDTH; VI.interlaced = (*REG.VI_STATUS & 0x40) != 0; - const bool bCFB = (gDP.changed&CHANGED_CPU_FB_WRITE) == CHANGED_CPU_FB_WRITE; - if (VI.interlaced && !bCFB) { - f32 fullWidth = 640.0f*xScale; + if (VI.interlaced) { + f32 fullWidth = 640.0f; + if ((*REG.VI_X_SCALE) % 512 == 0) + fullWidth *= xScale; if (*REG.VI_WIDTH > fullWidth) { const u32 scale = (u32)floorf(*REG.VI_WIDTH / fullWidth + 0.5f); VI.width /= scale;