Conversation
|
No regressions in my titles. |
|
Repost of previously deleted comment: It took a while but after about an hour of testing i encountered a silent crash, testing with NHL 18: #4125 Apart from that i believe the IRQ flip to be fixed for this game after multiple tests i haven't encountered other "Out of order flip IRQ" from this PR. 👍 |
|
This seems to fix Dark Souls 3 random crashes (or I was very lucky!). EDIT: |
|
The issue is present also on Bramble so it helps this game too... |
|
Issue happens a lot in bloodborne |
Doesn't on my comp with CUSA03173... |
with this PR ? Upload log here |
Crash:
ASSERT_MSG(port->buffer_labels[buf_id] == 1, "Out of order flip IRQ")Main:
sceVideoOutSubmitEopFlip pushes a callback into a FIFO (RegisterOnce). The callback has buf_id baked in. When GPU finishes, Signal(GfxFlip) grabs the first one in line. With multiple flips queued, that's not necessarily the one that belongs to the submission that just finished — buffer_labels[buf_id] isn't set for it, assert crashes.
PR:
PatchFlipRequest still writes buf_id and flip_arg into the NOP data block in the command buffer. But instead of pushing a callback into the FIFO via RegisterOnce, the flip data is passed to SubmitGfx as optional and stored alongside the task in Liverpool's submission queue. When a submission completes (task.done()), Liverpool checks if that specific submission has a flip attached. If it does, it calls EnqueueFlip with that submission's own buf_id and flip_arg — not whatever happens to be at the front of a shared queue.
Main: NHL 19 - playing for ~10min - ooof IRQ assert.
PR: NHL 19 - playing for 1h 50min - no crash.
Thoughts ?
Players can try to break it.