Skip to content

test(agc): cover the jump, parser stall, rendering wait and compute queue reset packets - #11677

Merged
adriadam10 merged 2 commits into
boykopovar:mainfrom
milescoviello:test/agc-flow-packets
Oct 28, 2026
Merged

adriadam10 merged 2 commits into
boykopovar:mainfrom
milescoviello:test/agc-flow-packets

Conversation

@milescoviello

@milescoviello milescoviello commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

What

tests/Commands.cpp gets a testFlowPackets case after testContextState. sceAgcDcbJump writes a four-word INDIRECT_BUFFER with the target address in two words and a control word carrying 0x0f200000, the cache policy at bit 28, the chain bit at bit 20 and the dword count. sceAgcAcbJump always chains. A mode above 1, a cache policy above 3, a count of 0x100000 and a misaligned target are refused before anything is written. sceAgcDcbStallCommandBufferParser writes a two-word PFP_SYNC_ME, and sceAgcDcbWaitUntilSafeForRendering the four-word rendering wait with the video out handle and buffer index. sceAgcAcbResetQueue writes a two-word NOP with flags 0x24 carrying the operation, ignoring the value, and refuses a null command buffer. The size getters report 16, 16 and 8 bytes.

It is called by all eight titles run here for sceAgcAcbResetQueue, sceAgcDcbStallCommandBufferParser and sceAgcDcbWaitUntilSafeForRendering; PPSA01494, PPSA18194, PPSA30839, PPSA31162, PPSA34502, PPSA36591 for sceAgcDcbJump; PPSA18194, PPSA30839, PPSA31162, PPSA34502, PPSA36591 for sceAgcAcbJump (call sites found through the import's PLT stub in each title's relinked eboot.bin), and until now no test called it.

Changed: core/libs/prx/libSceAgc/tests/Commands.cpp. Test only, no change to the library.

Tested

Linux (Ubuntu 26.04, GCC 15.2), Release: cmake --build build --target agc_command_tests and ctest -R '^agc_commands$' --repeat until-fail:3 pass on this branch, which is current main plus the test. tools/check_conventions.py --base upstream/main passes.

Windows 11 with an RTX 2070 SUPER (maskym's run, NVIDIA 621.01, Khronos validation layer, WinLibs GCC 15.2, Release): this PR's tests pass at head da9b869e8f merged into main f759e165d9, in a joint tree with other open PRs, and every other agc and video_out test gives the same result as on main.

Checklist

  • Based on current main; no other open PR implements the same functions
  • One topic per PR; follow-ups go in a new PR
  • No comments in code except technical debt
  • Unimplemented paths throw (NotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file
  • No notes, investigation .md files or images added to the repository (attach them to this PR)
  • New third-party code is a submodule built from source
  • Generic behaviour, not specific to one title
  • Depends on: none
  • Fixes: none
  • Unblocks: none
  • GPUs tested: n/a
  • AI-assisted: yes

🤖 Generated with Claude Code

milescoviello and others added 2 commits October 27, 2026 02:26
…ueue reset packets

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…unchanged

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@milescoviello

Copy link
Copy Markdown
Contributor Author

Pushed da9b869. It applies the check MarcZX10 asked for on #11674: the refused-packet buffer is filled with a sentinel first, and after each refusal the test compares all 64 words and cursor_up with the snapshot, instead of only the first word. agc_initialization and agc_commands pass on Linux.

AI-assisted: yes (Claude Code)

@milescoviello

Copy link
Copy Markdown
Contributor Author

Windows 11 VM (GT 1030, NVIDIA 582.66, WinLibs GCC 15.2.0, Release, Ninja): this head da9b869e8f and its base main abed035 each build agc_command_tests, and agc_initialization and agc_commands pass 3 of 3 on both.

AI-assisted: yes (Claude Code)

@github-actions

Copy link
Copy Markdown

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.

Pull request Shared files not compared
PR 1060 core/libs/prx/libSceAgc/tests/Commands.cpp

@maskym

maskym commented Oct 28, 2026

Copy link
Copy Markdown
Contributor

Windows + NVIDIA result for head da9b869e8f, merged into main f759e165d9 (the PR's GPUs tested line names no NVIDIA run on Windows).

This PR's own tests: the libSceAgc packet tests agc_commands (0.15 s), agc_shader_helpers (0.08 s), agc_register_command_tests, agc_dma_data_tests and agc_initialization, which are CPU-side, all passed.

Host: Windows 11 26300, Intel i7-12700K, NVIDIA GeForce RTX 2070 SUPER (vendor 0x10de, device 0x1e84; Vulkan loader 1.4.357 from the NVIDIA driver 621.01), Khronos Validation Layers nightly 1.4.366 (b2b44c0d37) through VK_ADD_LAYER_PATH, WinLibs GCC 15.2.0 (x86_64-ucrt-posix-seh, r6), Release, BUILD_TESTING=ON, Ninja.

Same focused run on main f759e165d9 and on this tree, same machine and GPU: VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation, ANYPS5_NO_SHADER_CACHE=1, ANYPS5_REQUIRE_VULKAN=1, VK_LOADER_DEBUG=error,warn,layer, ctest --test-dir build -R '^(agc|guest_video_out|video_out)' --parallel 4 -V.

The tree also carried the open PRs #11948, #12062, #12132, #12070, #11680, #11679, #11678, #11675, #11674, #11605, #11604, #11600, all merged cleanly, so the run is a joint one. Not run on a PS5.

AI-assisted: yes (Claude Code), the runs and the numbers above are from this machine.

@milescoviello

Copy link
Copy Markdown
Contributor Author

@maskym thanks for the Windows NVIDIA run with the validation layer. I've added it to Tested.

AI-assisted: yes (Claude Code)

@adriadam10 adriadam10 self-assigned this Oct 28, 2026
@adriadam10
adriadam10 merged commit b475792 into boykopovar:main Oct 28, 2026
12 checks passed
@adriadam10

Copy link
Copy Markdown
Collaborator

Checked the expected words against WriteJump, Emit, Header and sceAgcAcbResetQueue (jump, PFP_SYNC_ME, rendering wait, reset NOP), the refusal cases throw before writing and the test compares the whole buffer and cursor_up; Windows NVIDIA run from @maskym noted; merged.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agc libSceAgc*

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants