all repos — mgba @ 01738f3bf60c25f9372396c542ebb0c91d9978e0

mGBA Game Boy Advance Emulator

DS GX: Hack around writing to a full FIFO that has a swap pending (fixes mgba.io/i/608)
Vicki Pfau vi@endrift.com
Wed, 12 Apr 2017 10:12:53 -0700
commit

01738f3bf60c25f9372396c542ebb0c91d9978e0

parent

a688e62123738a8a54b6efade0ab2d2515896781

2 files changed, 6 insertions(+), 0 deletions(-)

jump to
M CHANGESCHANGES

@@ -12,6 +12,7 @@ - DS Video: Bitmap sprites use alpha bit for transparent

- DS GX: Fix 4-color texture coordinates - DS GX: Reset polygon attributes between buffer swaps - DS Video: Fix blend bit on windows for 3D layer (fixes mgba.io/i/611) + - DS GX: Hack around writing to a full FIFO that has a swap pending (fixes mgba.io/i/608) Misc: - DS: Set boot complete bit in RAM on boot (fixes mgba.io/i/576, mgba.io/i/580, mgba.io/i/586) - DS Memory: Ensure DS9 I/O is 8-byte aligned
M src/ds/gx.csrc/ds/gx.c

@@ -1374,6 +1374,11 @@ if (CircleBufferSize(&gx->fifo) == (DS_GX_FIFO_SIZE * sizeof(entry))) {

mLOG(DS_GX, INFO, "FIFO full"); while (gx->p->cpuBlocked & DS_CPU_BLOCK_GX) { // Can happen from STM + if (gx->swapBuffers) { + // XXX: Let's hope those GX entries aren't important, since STM isn't preemptable + mLOG(DS_GX, ERROR, "FIFO full with swap pending"); + return; + } mTimingDeschedule(&gx->p->ds9.timing, &gx->fifoEvent); _fifoRun(&gx->p->ds9.timing, gx, 0); }