mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-01 14:58:14 +00:00
From another pass over ge.prx against our code, each checked on a PSP with gpu/ge/callbackstate except the last: - A list's context is restored after its finish callback, which sees the state the list left. We restored at the FINISH, before it. Now that nothing runs until InterruptEnd(), that's where it happens. - sceGeSaveContext/RestoreContext only fail while the GE is executing. It's stopped during a finish callback and a SUSPEND signal callback, however much is queued, so they work there. We said busy whenever a list existed. - sceGeListDeQueue emptying the queue doesn't turn completed lists into nothing, only sceGeDrawSync does. CheckDrawSync() is gone. - The "break in progress" flag that makes sceGeContinue only requeue the list is cleared by an interrupt that follows the break at once, so it's only seen from a callback or with interrupts off. Ours lasted until the next GE interrupt of any kind. - sceKernelLoadExec restarts the GE driver, which begins by zeroing every register and matrix. Reinitialize() now does too, so a program started that way finds the same GE as one booted directly, rather than its launcher's. Not testable on hardware: nothing after the restart can report back. Co-Authored-By: Claude Fable 5.1 <[email protected]>