Commit Graph
28 Commits
Author SHA1 Message Date
Henrik Rydgård d21467beb0 De-claude some commments. 2026-09-21 16:50:22 -06:00
Henrik RydgårdandClaude Fable 5.1 cc41a23256 GPU: empty the display list queue on sceKernelLoadExec, fixes Crazy Taxi
Reinitialize() wiped the 64 display lists but kept the queue of their ids.
Whatever the old executable still had queued came back as lists with no state
and a pc of 0, behind the first list of the new executable, where they
blocked everything. Crazy Taxi: Fare Wars is a launcher for its two games,
and stopped at a black screen that way. Fixes #19894.

This removes the workaround for it, which dropped such a list but returned
before currentList was cleared, and only worked as long as something else
happened to clear it later. A list with a bad pc is now dropped like one that
ran into an error, instead of sitting at the head of the queue for good.

Also narrows what sceGeBreak(1) throws away to interrupts that have actually
been raised, which is what gpu/ge/intrsuspend shows. The ones we haven't
raised yet are only late because we execute lists ahead of time: a game that
breaks right after its last list, and then waits for what the finish callback
signals, got that callback long ago on hardware.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 13:10:02 -06:00
Henrik RydgårdandClaude Fable 5.1 91c9c4d14e sceGe: sceGeBreak(1) takes pending interrupts with it
Resetting the GE also gets rid of an interrupt that was raised but not taken
yet, so a list that reached its FINISH just before never gets its finish
callback. We delivered one anyway, for a list that no longer existed. If the
break comes from inside a GE callback, the interrupt being handled is kept,
since its handler still has to return.

Found by gpu/ge/intrsuspend, which also confirms from a thread, with
interrupts suspended, that nothing moves along the queue until the FINISH
interrupt has been taken.

Savestates: bump GPUCommon to 7. We didn't use to mark a PAUSE signal as
delivered, which sceGeContinue now goes by, so a state saved with a list
paused that way would load into a game that could never continue it. Fixed
up on load.

gpu/signals/handlercalls goes in as known failing: with an old SDK version, a
stall address set from inside a SUSPEND callback doesn't reach the GE, which
we can't express with just the one stall address per list. See docs/sceGe.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 12:48:03 -06:00
Henrik Rydgård 990cba8e6c Fix problem with background image when rotating some dialogs 2026-02-09 14:35:32 +01:00
Henrik Rydgård 7853881210 GPU header cleanup: Avoid including GPUCommon.h in some places 2025-11-23 20:37:37 +01:00
Henrik Rydgård 0df2a40487 Remove the "GPUInterface" base class. Not really useful, GPUCommon is pretty much the same thing. 2024-12-02 11:12:14 +01:00
Henrik Rydgård 4c0a4dadac sceGe: Unexpose some functions 2024-12-01 20:42:16 +01:00
JimLee168 8099281928 check for duplicated stack addresses
Based on https://code.google.com/p/jpcsp/source/detail?r=3569

Fix WWE SmackDown! vs. RAW 2006
2014-08-13 21:28:22 +08:00
Unknown W. Brackets 5076a080c4 In case interrupts are delayed, read cmd early.
Otherwise, in Project Diva, the cmd may be overwritten (probably due to a
sync or etc.) by some other cmd.  Fixes #5896.
2014-04-17 22:33:13 -07:00
Unknown W. Brackets 7cde2311e0 Include sceKernelThread.h in less headers. 2014-03-29 17:02:41 -07:00
Henrik Rydgard c80510fb3b MemMap should not be included in MIPS.h. 2014-03-15 10:45:39 +01:00
lioncash b9886942a7 Fix some vertical alignments in misc Core source files. 2014-03-03 11:16:53 -05:00
Unknown W. Brackets 4078dcd917 Support save/restore of context on list run/finish. 2013-09-20 09:51:44 -07:00
Unknown W. Brackets 8ae6694e1d Use a waiting thread list in sceGe as well. 2013-09-08 11:57:44 -07:00
Unknown W. Brackets 26c072df51 Don't wait directly from GPUCommon, do it in sceGe.
Makes debugging a bit easier.
2013-08-10 18:24:40 -07:00
Unknown W. Brackets 9e94f9a896 Specify memory layout endianness in sceGe. 2013-07-29 22:47:37 -07:00
Unknown W. Brackets 57770dbd95 Delay GPU signals and waits to simulate cycles. 2013-04-07 17:05:11 -07:00
Unknown W. Brackets c0f20c2fdd If the interrupt is not run, don't flip gpuState.
Technically this is a hack, hopefully can remove it soon.
2013-04-06 02:30:37 -07:00
Unknown W. Brackets ef1086413c Correct wait signal handling. 2013-04-05 00:32:35 -07:00
Unknown W. Brackets 21483f2d4c Cut down on rescheduling in sceGeListEnqueue.
Fixes ClaDun X2.
2013-02-12 07:45:20 -08:00
Unknown W. Brackets 430139b12a Minimal revert of the GE-related interrupt changes.
Keep most of them, just revert using getList() which isn't cutting it
right now.  Fixes #595.
2013-02-10 02:03:02 -08:00
Florent Castelli 8004d360dd Interrupt handler reorganization for easier GE interrupt support 2013-02-04 03:10:01 +01:00
Florent Castelli c37566d3bc Use proper draw sequence in PPGeDraw 2013-02-04 01:28:19 +01:00
Unknown W. Brackets 97bdaf5dd2 Add support for selecting the GE callback per list.
Not sure if interrupts are right, but this should be more right.
2012-12-29 15:55:05 -08:00
Unknown W. Brackets 5999fac10d Start saving the state of the GPU.
Not 100% sure this is all that's needed, but let's try it.
2012-12-28 13:55:30 -08:00
Henrik Rydgard e37a1fb1d3 Add internal 2D drawing library that goes through the Ge emulation for portability.
To be used for things like sceUtility* and other overlays like FPS and stats.
2012-11-18 13:04:49 +01:00
Henrik Rydgard 64cc573703 Switch to "GPL 2.0 or later" for various reasons. I wrote most of the code I imported from Dolphin (which is GPL2-but-not-later), so it should be OK. 2012-11-04 23:24:00 +01:00
Henrik Rydgard 4f7ad15758 Add snapshot of the whole source code. 2012-11-01 16:19:01 +01:00