Commit Graph

80 Commits

Author SHA1 Message Date
Unknown W. Brackets
abc396cbe1 Sync the GPU thread on list/draw sync.
Otherwise, the CPU gets ahead (inside the frame) and games get confused.
I don't think there's any good workaround to avoid this.
2013-08-10 15:16:49 -07:00
Unknown W. Brackets
450e4c7fea Factor out event queue logic to a template mixin. 2013-08-10 03:33:09 -07:00
Unknown W. Brackets
a80a7690c8 Fix SyncThread() not syncing during last event. 2013-08-09 23:18:37 -07:00
Unknown W. Brackets
e82bae3708 Simplify easy_guard to avoid coding errors. 2013-08-09 22:57:53 -07:00
Unknown W. Brackets
1226c3dbd9 Try to prevent a deadlock if CPU doesn't NEXTFRAME. 2013-08-09 22:57:53 -07:00
Unknown W. Brackets
e71cf2ec7e Don't queue Flush() etc. while on GPU thread.
Oops, that makes it not actually flush properly of course.

Also made a simpler guard wrapper to avoid extra braces in too many
places.  Reduced contention areas slightly.
2013-08-09 22:57:52 -07:00
Unknown W. Brackets
68fb78e203 Be more careful with the stall address.
In case it's moved while running the list.
2013-08-09 22:57:52 -07:00
Unknown W. Brackets
8c69020fa8 Use separate condition vars/locks for GPU sync. 2013-08-09 22:57:51 -07:00
Unknown W. Brackets
b0e6967697 Rename UseCPUThread to SeparateCPUThread. 2013-08-09 22:41:33 -07:00
Unknown W. Brackets
a56cac1eb3 Bail when CPU thread disabled to ensure good perf. 2013-08-09 22:41:32 -07:00
Unknown W. Brackets
3819886e2e Add a way to synchronize with the GPU thread. 2013-08-09 22:41:32 -07:00
Unknown W. Brackets
02e301e5fe Add a simple message event system to the GE.
With this, the CPU thread feature now mostly works.
2013-08-09 22:41:31 -07:00
Unknown W. Brackets
52ca93aab2 Add mutex locks around list management.
This way we can safely execute lists on a separate thread.
2013-08-09 22:41:31 -07:00
Unknown W. Brackets
00fc5ec40e Enable interrupts as a property of the list.
This way there's no behavior change when enqueue is async.
2013-08-07 00:32:30 -07:00
Unknown W. Brackets
3aa2db9a8e Simplify ProcessDLQueue() slightly. 2013-08-04 16:31:54 -07:00
Unknown W. Brackets
f7a39d1b12 Move ReapplyGfxState() to GPUCommon.
This way it can be overridden, and simplifies some other things.
2013-08-04 15:15:50 -07:00
Henrik Rydgard
a95daf4647 Reduce logspam for some GE signals. doesn't seem to be a problem (although that might change if we paralellize). 2013-06-27 17:49:29 +02:00
Unknown W. Brackets
9c85bd92e4 Show statistics for GPU cycles executed per frame. 2013-05-31 10:40:16 -07:00
Unknown W. Brackets
46e5b84242 Small opt. for common immediately stalled list. 2013-04-28 14:56:38 -07:00
Unknown W. Brackets
597cdbca3f Simplify, don't let InterpretList do downcount. 2013-04-28 14:30:28 -07:00
Unknown W. Brackets
1edbfa3212 Use a downcount and fast run loop in the GE. 2013-04-28 14:23:30 -07:00
Unknown W. Brackets
5a03888b56 Centralize state and pc changes in the GE.
To make later things easier.
2013-04-28 13:34:29 -07:00
Unknown W. Brackets
9208f6389d Avoid calling time_update in GE w/o debug stats.
Just wastes time, especially if the game hammers sceGeListUpdateStallAddr,
which many games do.
2013-04-22 22:04:27 -07:00
Henrik Rydgard
628c223234 GPUCommon: Get rid of prev variable. 2013-04-21 19:32:56 +02:00
Unknown W. Brackets
b54eb41041 Don't signal again if a PAUSE handler unstalls.
Basically, if the handler calls sceGeListUpdateStallAddr(), and it hits
a finish (which it might), before we were triggering another PAUSE.

THat's wrong, it should just be a FINISH as usual.
2013-04-20 20:15:47 -07:00