Commit Graph

650 Commits

Author SHA1 Message Date
Unknown W. Brackets 4078dcd917 Support save/restore of context on list run/finish. 2013-09-20 09:51:44 -07:00
Unknown W. Brackets bd70d04930 Include GE_CMD_PATCHFACING just in case. 2013-09-20 00:45:48 -07:00
Unknown W. Brackets 50e9e45d65 Check version in each DoState() func.
They bail on PointerWrap error or bad version.
2013-09-14 20:23:03 -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 08b41df6a2 Change a few more log types. 2013-09-07 13:31:14 -07:00
Unknown W. Brackets 8998a1b303 Don't trash a list the GE interrupt handler needs.
Even after it's marked COMPLETED, the CPU needs it to start and finish the
interrupt.  Fixes #2956, where an existing completed list was not having
its interrupt run correctly.
2013-09-01 12:39:45 -07:00
Unknown W. Brackets dc9b5156d9 Cleanup comment (broke savestates anyway.) 2013-09-01 00:52:25 -07:00
Unknown W. Brackets 15a0f39fa1 Return yet more errors while inside interrupts. 2013-08-28 23:15:13 -07:00
Unknown W. Brackets 211c2bd955 Refuse a few more waits w/ dispatch/intr disabled. 2013-08-28 22:35:05 -07:00
The Dax 4d9eb24f29 Fix hang in Project Diva 2nd in single-threaded mode. Doesn't seem to affect other games, but I don't have every game in existence, so there could be one or two out there that might break from this. 2013-08-24 21:13:34 -04:00
Unknown W. Brackets 8dbcf6572e Add some additional reporting. 2013-08-24 11:34:38 -07:00
Henrik Rydgard 520453a5bd Fix gpu cycle call level counting, of course halving the numbers I mentioned in the previous commit comment. 2013-08-23 11:42:15 +02:00
Henrik Rydgard dfb91d4532 Track number of GPU commands executed per call level.
This is to get an idea if it would be beneficial to compile and cache display lists. Looks like it would be for some games, for example in GTA it's often 20k/80k/20k commands per frame - that is 100k executed commands per frame that could potentially just be executed instead of interpreted. Likewise in Wipeout. Of course, this means yet another cache with invalidation issues etc..
2013-08-23 11:29:55 +02:00
Unknown W. Brackets 1ed8edb0d3 Avoid some dangerous hex constant widths. 2013-08-22 23:23:48 -07:00
raven02 e68ddf671c Temporary fix issue #3167 in non-multithread mode #2 2013-08-15 03:44:20 +08:00
Unknown W. Brackets 49ab98c7fd Use atomic operations on Android + warning fixes. 2013-08-12 08:51:49 -07:00
Unknown W. Brackets cf7c718706 Use a timer to keep gpu/cpu in sync periodically.
Fixes Diva Extend demo, at least, losing FPS.
2013-08-11 13:41:42 -07:00
Unknown W. Brackets e0f699fd5f Use a possibly harmless hack to prevent hangs.
Not sure where the problem is, but this fixes it pretty consistently for
me... seems like lists are somehow not being processed after becoming
processable?
2013-08-10 20:03:43 -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 55c07bdc73 Avoid a possible thread sync issue.
Could be that it's about to wake listsync, does, and then we wait.
2013-08-10 17:18:31 -07:00
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
Henrik Rydgard 98daf18d56 Add skeleton code for Windows multitouch, to be filled in by someone who can test :P 2013-04-16 21:14:46 +02:00
Unknown W. Brackets f86e01707f Use a struct for the GE stack entries, cleaner. 2013-04-15 23:06:56 -07:00
Unknown W. Brackets 7b184602df Remember the GE offset in the stack on call/ret. 2013-04-15 22:20:49 -07:00
Henrik Rydgard ea11c36091 Fix a vshader id bit collision, avoid color test when set to 'ALWAYS', zeroinitialize dls. 2013-04-15 22:57:54 +02:00
Henrik Rydgard cbbc4e2c9e Reset gstate_c.offsetAddr on RET. Fixes some "CALL to illegal address"
(as seen in Flatout for example).
2013-04-15 22:24:30 +02:00