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
{{ message }}
Repository navigation
feat(libSceAgc): implement sceAgcAcbSetFlip and execute flips on compute queues - #6794
Implements sceAgcAcbSetFlip. It writes the same 6-dword flip packet as sceAgcDcbSetFlip. In the PS5 6.00 libSceAgc module both exports are the same 176-byte wrapper around one libSceAgcDriver helper; the only argument that differs selects the release event (CS_DONE for ACB), which our flip packet does not model.
The second commit lets the driver execute that packet on a compute queue. Until now the PM4 validator (Pm4.cpp) accepted a flip only on queue 0 and threw graphics packet in compute queue otherwise. The flip path after validation already handles any queue: it reserves the output, hands it the frame and raises the end-of-pipe interrupt on the submitting queue, the way other compute-queue releases are delivered. Since two workers can now reach the flip, the frame serial became atomic, and a compute flip gets its own frame timing instead of taking queue 0's.
Earlier attempts #1052 and #1585 were closed because no title was shown to reach it. Open PR 6447 writes the same packet for this function among changes to 100 files; this PR is only ACB flips. Death Stranding 2 (PPSA02015) stops on the export on its loading screen, about 1085 s in:
terminate called after throwing an instance of 'std::runtime_error'
what(): sceAgcAcbSetFlip not implemented
and, with the first commit alone, at 1333 s on the packet it writes:
terminate called after throwing an instance of 'std::runtime_error'
what(): AGC driver: FLIP at DWORD 0: graphics packet in compute queue
Tested
Linux, on main6a32550: agc_commands fails on main with sceAgcAcbSetFlip not implemented; agc_driver_flip (new compute-queue case) fails without the second commit with AGC driver: FLIP at DWORD 0: graphics packet in compute queue. Both pass with this PR.
test
RTX 5080 (NVIDIA 615.78.08)
Radeon 610M (RADV)
lavapipe
agc_commands
pass
pass
pass
agc_driver_flip
pass
pass
pass
agc_driver_flip_stores_small_results
pass
pass
pass
agc_driver_flip_compute
pass
pass
pass
Windows (WinLibs GCC 15.2 UCRT, no GPU): the whole suite builds and runs; the one failure is one main has there too.
Death Stranding 2 on Linux, RTX 5080: with both commits the run passes 1333 s with no refused submission, stays on the loading screen and stops at 1630 s on a heap corruption abort (corrupted size vs. prev_size) that is not in this code. The title does not reach this call on plain main: it also needs the open PRs #6437, #6297, #6277, #6196, #6530, #6300, #6727, #6492 and #6174 (none of them touches this code) and local changes for EQAA targets and image-table residency that are not ready to submit.
Checklist
Based on current main; no other open PR implements the same functions
The conventions failure is only the PR-template Depends on field: the validator requires Depends on: #N or Depends on: none directly on the checklist line. This PR lists integration-only prerequisites in prose, so please keep the checklist line in the accepted form (likely Depends on: none, since you state there is no code dependency) and move the runtime/integration context to the description above. The failed run reported this as its sole finding; eligibility, intake and progress report pass.
Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.
Thanks, fixed: the checklist line is now Depends on: none and the prerequisites are listed in the description. The conventions check passes on the edit.
fma-rc
changed the title
feat(libSceAgc): implement sceAgcAcbSetFlip
feat(libSceAgc): implement sceAgcAcbSetFlip and execute flips on compute queues
Oct 17, 2026
Checked the ACB flip packet against sceAgcDcbSetFlip, the compute-queue flip path (no flip hold on non-zero queues, own frame timing, EOP raised on the submitting queue) and the new agc_commands / agc_driver_flip cases, which fail on main with the errors quoted in the description; merged.
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.
What
Implements
sceAgcAcbSetFlip. It writes the same 6-dword flip packet assceAgcDcbSetFlip. In the PS5 6.00libSceAgcmodule both exports are the same 176-byte wrapper around onelibSceAgcDriverhelper; the only argument that differs selects the release event (CS_DONE for ACB), which our flip packet does not model.The second commit lets the driver execute that packet on a compute queue. Until now the PM4 validator (
Pm4.cpp) accepted a flip only on queue 0 and threwgraphics packet in compute queueotherwise. The flip path after validation already handles any queue: it reserves the output, hands it the frame and raises the end-of-pipe interrupt on the submitting queue, the way other compute-queue releases are delivered. Since two workers can now reach the flip, the frame serial became atomic, and a compute flip gets its own frame timing instead of taking queue 0's.Earlier attempts #1052 and #1585 were closed because no title was shown to reach it. Open PR 6447 writes the same packet for this function among changes to 100 files; this PR is only ACB flips. Death Stranding 2 (PPSA02015) stops on the export on its loading screen, about 1085 s in:
and, with the first commit alone, at 1333 s on the packet it writes:
Tested
Linux, on
main6a32550:agc_commandsfails onmainwithsceAgcAcbSetFlip not implemented;agc_driver_flip(new compute-queue case) fails without the second commit withAGC driver: FLIP at DWORD 0: graphics packet in compute queue. Both pass with this PR.agc_commandsagc_driver_flipagc_driver_flip_stores_small_resultsagc_driver_flip_computeWindows (WinLibs GCC 15.2 UCRT, no GPU): the whole suite builds and runs; the one failure is one
mainhas there too.Death Stranding 2 on Linux, RTX 5080: with both commits the run passes 1333 s with no refused submission, stays on the loading screen and stops at 1630 s on a heap corruption abort (
corrupted size vs. prev_size) that is not in this code. The title does not reach this call on plainmain: it also needs the open PRs #6437, #6297, #6277, #6196, #6530, #6300, #6727, #6492 and #6174 (none of them touches this code) and local changes for EQAA targets and image-table residency that are not ready to submit.Checklist
main; no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file.mdfiles or images added to the repository (attach them to this PR)