Don't mark a list complete too early.

This would matter probably mostly if we implemented CONTINUE properly.
This commit is contained in:
Unknown W. Brackets 2014-04-11 23:49:33 -07:00
parent 7fd7337911
commit 26933384a7
2 changed files with 7 additions and 1 deletions

View file

@ -107,6 +107,12 @@ public:
}
}
// Set the list as complete once the interrupt starts.
// In other words, not before another interrupt finishes.
if (dl->signal != PSP_GE_SIGNAL_HANDLER_PAUSE && cmd == GE_CMD_FINISH) {
dl->state = PSP_GE_DL_STATE_COMPLETED;
}
SubIntrHandler* handler = get(subintr);
if (handler != NULL)
{

View file

@ -920,11 +920,11 @@ void GPUCommon::ExecuteOp(u32 op, u32 diff) {
default:
currentList->subIntrToken = prev & 0xFFFF;
currentList->state = PSP_GE_DL_STATE_COMPLETED;
UpdateState(GPUSTATE_DONE);
if (currentList->interruptsEnabled && __GeTriggerInterrupt(currentList->id, currentList->pc, startingTicks + cyclesExecuted)) {
currentList->pendingInterrupt = true;
} else {
currentList->state = PSP_GE_DL_STATE_COMPLETED;
currentList->waitTicks = startingTicks + cyclesExecuted;
busyTicks = std::max(busyTicks, currentList->waitTicks);
__GeTriggerSync(GPU_SYNC_LIST, currentList->id, currentList->waitTicks);