From c6d31bd9549ecefc982da923cca0de47fdd7b490 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sat, 9 Mar 2019 11:27:52 -0800 Subject: [PATCH] GBA Video: Fix scanline cache with scale factor change edge cases --- CHANGES | 4 +++- src/gba/renderers/video-software.c | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 6117bcaaa..6e7e43f97 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,7 @@ 0.7.2: (Future) -Bugfixes: +Emulation fixes: + - GBA Video: Fix scanline cache with scale factor change edge cases +Other fixes: - Qt: More app metadata fixes - Qt: Fix load recent from archive (fixes mgba.io/i/1325) - LR35902: Fix disassembly of several CB-prefix instructions diff --git a/src/gba/renderers/video-software.c b/src/gba/renderers/video-software.c index f31239d09..6c4853bab 100644 --- a/src/gba/renderers/video-software.c +++ b/src/gba/renderers/video-software.c @@ -539,6 +539,14 @@ static void GBAVideoSoftwareRendererDrawScanline(struct GBAVideoRenderer* render dirty = true; } + if (GBARegisterDISPCNTGetMode(softwareRenderer->dispcnt) != 0) { + if (softwareRenderer->cache[y].scale[0][0] != softwareRenderer->bg[2].sx || + softwareRenderer->cache[y].scale[0][1] != softwareRenderer->bg[2].sy || + softwareRenderer->cache[y].scale[1][0] != softwareRenderer->bg[3].sx || + softwareRenderer->cache[y].scale[1][1] != softwareRenderer->bg[3].sy) { + dirty = true; + } + } softwareRenderer->cache[y].scale[0][0] = softwareRenderer->bg[2].sx; softwareRenderer->cache[y].scale[0][1] = softwareRenderer->bg[2].sy; softwareRenderer->cache[y].scale[1][0] = softwareRenderer->bg[3].sx;