From ed2353ff76da104221a0dfcdfe26a724a536a517 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 31 Dec 2019 00:05:59 -0800 Subject: [PATCH] GBA Video: Fix BLDY for semitransparent sprite on non-target-2 backgrounds --- CHANGES | 3 ++- .../obj-semitrans-brighten/baseline_0000.png | Bin 0 -> 6339 bytes .../obj-semitrans-brighten/baseline_0001.png | Bin 0 -> 6339 bytes cinema/gba/blend/obj-semitrans-brighten/test.mvl | Bin 0 -> 6601 bytes .../mgba/internal/gba/renderers/video-software.h | 3 ++- src/gba/renderers/software-obj.c | 3 ++- src/gba/renderers/video-software.c | 7 ++++--- 7 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 cinema/gba/blend/obj-semitrans-brighten/baseline_0000.png create mode 100644 cinema/gba/blend/obj-semitrans-brighten/baseline_0001.png create mode 100644 cinema/gba/blend/obj-semitrans-brighten/test.mvl diff --git a/CHANGES b/CHANGES index a8121ee70..99e2f192a 100644 --- a/CHANGES +++ b/CHANGES @@ -91,8 +91,9 @@ Emulation fixes: - ARM: Partially fix LDM/STM writeback with empty register list - ARM: Fix stepping when events are pending - GBA DMA: Fix case where DMAs could get misaligned (fixes mgba.io/i/1092) - - GBA Video: Fix OpenGL renderer 512x512 backgrounds (fixes mgba.io/i/1572) - GBA Memory: Fix open bus from IWRAM (fixes mgba.io/i/1575) + - GBA Video: Fix OpenGL renderer 512x512 backgrounds (fixes mgba.io/i/1572) + - GBA Video: Fix BLDY for semitransparent sprite on non-target-2 backgrounds Other fixes: - 3DS: Fix screen darkening (fixes mgba.io/i/1562) - Core: Fix uninitialized memory issues with graphics caches diff --git a/cinema/gba/blend/obj-semitrans-brighten/baseline_0000.png b/cinema/gba/blend/obj-semitrans-brighten/baseline_0000.png new file mode 100644 index 0000000000000000000000000000000000000000..65cca4f0a61dd3eff0b5de25c0458bf3b59cd02e GIT binary patch literal 6339 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 G|GxlTf3F(= literal 0 HcmV?d00001 diff --git a/cinema/gba/blend/obj-semitrans-brighten/baseline_0001.png b/cinema/gba/blend/obj-semitrans-brighten/baseline_0001.png new file mode 100644 index 0000000000000000000000000000000000000000..65cca4f0a61dd3eff0b5de25c0458bf3b59cd02e GIT binary patch literal 6339 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 G|GxlTf3F(= literal 0 HcmV?d00001 diff --git a/cinema/gba/blend/obj-semitrans-brighten/test.mvl b/cinema/gba/blend/obj-semitrans-brighten/test.mvl new file mode 100644 index 0000000000000000000000000000000000000000..966724a7d54571e9f9ab10fbfb9e1d4e9b871f4e GIT binary patch literal 6601 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 literal 0 HcmV?d00001 diff --git a/include/mgba/internal/gba/renderers/video-software.h b/include/mgba/internal/gba/renderers/video-software.h index b15dc47b4..59c2a7ce8 100644 --- a/include/mgba/internal/gba/renderers/video-software.h +++ b/include/mgba/internal/gba/renderers/video-software.h @@ -131,7 +131,8 @@ struct GBAVideoSoftwareRenderer { struct GBAVideoSoftwareBackground bg[4]; - int oamDirty; + bool forceTarget1; + bool oamDirty; int oamMax; struct GBAVideoRendererSprite sprites[128]; int16_t objOffsetX; diff --git a/src/gba/renderers/software-obj.c b/src/gba/renderers/software-obj.c index d638dd332..cbc050fc8 100644 --- a/src/gba/renderers/software-obj.c +++ b/src/gba/renderers/software-obj.c @@ -165,7 +165,7 @@ int GBAVideoSoftwareRendererPreprocessSprite(struct GBAVideoSoftwareRenderer* re } int objwinSlowPath = GBARegisterDISPCNTIsObjwinEnable(renderer->dispcnt) && GBAWindowControlGetBlendEnable(renderer->objwin.packed) != GBAWindowControlIsBlendEnable(renderer->currentWindow.packed); - int variant = renderer->target1Obj && + int variant = (renderer->target1Obj || GBAObjAttributesAGetMode(sprite->a) == OBJ_MODE_SEMITRANSPARENT) && GBAWindowControlIsBlendEnable(renderer->currentWindow.packed) && (renderer->blendEffect == BLEND_BRIGHTEN || renderer->blendEffect == BLEND_DARKEN); if (GBAObjAttributesAGetMode(sprite->a) == OBJ_MODE_SEMITRANSPARENT || objwinSlowPath) { @@ -175,6 +175,7 @@ int GBAVideoSoftwareRendererPreprocessSprite(struct GBAVideoSoftwareRenderer* re target2 |= renderer->bg[2].target2; target2 |= renderer->bg[3].target2; if (target2) { + renderer->forceTarget1 = true; flags |= FLAG_REBLEND; variant = 0; } else { diff --git a/src/gba/renderers/video-software.c b/src/gba/renderers/video-software.c index bd47ad2b2..6be917d93 100644 --- a/src/gba/renderers/video-software.c +++ b/src/gba/renderers/video-software.c @@ -592,6 +592,7 @@ static void GBAVideoSoftwareRendererDrawScanline(struct GBAVideoRenderer* render _updatePalettes(softwareRenderer); softwareRenderer->blendDirty = false; } + softwareRenderer->forceTarget1 = false; int w; x = 0; @@ -622,7 +623,7 @@ static void GBAVideoSoftwareRendererDrawScanline(struct GBAVideoRenderer* render _drawScanline(softwareRenderer, y); - if (softwareRenderer->target2Bd) { + if (softwareRenderer->forceTarget1 && softwareRenderer->target2Bd) { x = 0; for (w = 0; w < softwareRenderer->nWindows; ++w) { uint32_t backdrop = 0; @@ -640,9 +641,9 @@ static void GBAVideoSoftwareRendererDrawScanline(struct GBAVideoRenderer* render } } } - if (softwareRenderer->target1Obj && (softwareRenderer->blendEffect == BLEND_DARKEN || softwareRenderer->blendEffect == BLEND_BRIGHTEN)) { + if (softwareRenderer->forceTarget1 && (softwareRenderer->blendEffect == BLEND_DARKEN || softwareRenderer->blendEffect == BLEND_BRIGHTEN)) { x = 0; - uint32_t mask = FLAG_REBLEND | FLAG_TARGET_1 | FLAG_IS_BACKGROUND; + uint32_t mask = FLAG_REBLEND | FLAG_IS_BACKGROUND; uint32_t match = FLAG_REBLEND; if (GBARegisterDISPCNTIsObjwinEnable(softwareRenderer->dispcnt)) { mask |= FLAG_OBJWIN;