diff --git a/CHANGES b/CHANGES index be5d78206..84dbb27fa 100644 --- a/CHANGES +++ b/CHANGES @@ -18,6 +18,7 @@ Emulation fixes: - GB Video: Delay LYC STAT check (fixes mgba.io/i/1331) - GB Video: Fix window being enabled mid-scanline (fixes mgba.io/i/1328) - GB I/O: Filter IE top bits properly (fixes mgba.io/i/1329) + - GBA Video: Fix wrapped sprite mosaic clamping (fixes mgba.io/i/1432) Other fixes: - Qt: Fix some Qt display driver race conditions - Core: Improved lockstep driver reliability (Le Hoang Quyen) diff --git a/cinema/gba/obj/sma2-mosaic-clamp/baseline_0000.png b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0000.png new file mode 100644 index 000000000..d05b02e16 Binary files /dev/null and b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0000.png differ diff --git a/cinema/gba/obj/sma2-mosaic-clamp/baseline_0001.png b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0001.png new file mode 100644 index 000000000..bcb7a39ea Binary files /dev/null and b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0001.png differ diff --git a/cinema/gba/obj/sma2-mosaic-clamp/baseline_0002.png b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0002.png new file mode 100644 index 000000000..92763de4a Binary files /dev/null and b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0002.png differ diff --git a/cinema/gba/obj/sma2-mosaic-clamp/baseline_0003.png b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0003.png new file mode 100644 index 000000000..c48410ca5 Binary files /dev/null and b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0003.png differ diff --git a/cinema/gba/obj/sma2-mosaic-clamp/baseline_0004.png b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0004.png new file mode 100644 index 000000000..11cb7a1f4 Binary files /dev/null and b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0004.png differ diff --git a/cinema/gba/obj/sma2-mosaic-clamp/baseline_0005.png b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0005.png new file mode 100644 index 000000000..0796c9e35 Binary files /dev/null and b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0005.png differ diff --git a/cinema/gba/obj/sma2-mosaic-clamp/baseline_0006.png b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0006.png new file mode 100644 index 000000000..8172f4670 Binary files /dev/null and b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0006.png differ diff --git a/cinema/gba/obj/sma2-mosaic-clamp/baseline_0007.png b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0007.png new file mode 100644 index 000000000..3ccd126c3 Binary files /dev/null and b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0007.png differ diff --git a/cinema/gba/obj/sma2-mosaic-clamp/test.mvl b/cinema/gba/obj/sma2-mosaic-clamp/test.mvl new file mode 100644 index 000000000..9fece4fdb Binary files /dev/null and b/cinema/gba/obj/sma2-mosaic-clamp/test.mvl differ diff --git a/src/gba/renderers/video-software.c b/src/gba/renderers/video-software.c index 4c83844ad..86c3bc409 100644 --- a/src/gba/renderers/video-software.c +++ b/src/gba/renderers/video-software.c @@ -808,12 +808,12 @@ static void _drawScanline(struct GBAVideoSoftwareRenderer* renderer, int y) { if ((y < sprite->y && (sprite->endY - 256 < 0 || y >= sprite->endY - 256)) || y >= sprite->endY) { continue; } - if (GBAObjAttributesAIsMosaic(sprite->obj.a)) { + if (GBAObjAttributesAIsMosaic(sprite->obj.a) && mosaicV > 1) { localY = mosaicY; - if (localY < sprite->y) { + if (localY < sprite->y && sprite->y < GBA_VIDEO_VERTICAL_PIXELS) { localY = sprite->y; } - if (localY >= sprite->endY) { + if (localY >= (sprite->endY & 0xFF)) { localY = sprite->endY - 1; } }