You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
Repost of previously deleted comment:
This may entirely be on my end only, posting it just in case.
It took a while but after about an hour of testing i encountered a silent crash, testing with NHL 18: #4125 CUSA07569.log
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!).
So that's a big + for me...
EDIT:
Yup, just beat the crystal sages (a long fight which always crashed sooner or later before) so that's definately helped...
It does not however fix the 'outofdevicememory' crash (when too much environnement assets are loaded too fast) but it's OK as it's a totaly different problem...
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.