DS GX: Hack around writing to a full FIFO that has a swap pending (fixes mgba.io/i/608)

This commit is contained in:
Vicki Pfau 2017-04-12 10:12:53 -07:00
parent a688e62123
commit 01738f3bf6
2 changed files with 6 additions and 0 deletions

View File

@ -12,6 +12,7 @@ Bugfixes:
- 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

View File

@ -1374,6 +1374,11 @@ static void DSGXWriteFIFO(struct DSGX* gx, struct DSGXEntry 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);
}