Skip to content

test(agc): cover the context, shader and uconfig indirect register count patches - #11679

Merged
adriadam10 merged 1 commit into
boykopovar:mainfrom
milescoviello:test/agc-indirect-register-patches
Oct 28, 2026
Merged

adriadam10 merged 1 commit into
boykopovar:mainfrom
milescoviello:test/agc-indirect-register-patches

Conversation

@milescoviello

@milescoviello milescoviello commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

What

tests/Commands.cpp gets a testIndirectRegisterPatches case after testRegisters. For each indirect register packet kind (opcode 0x9f for context, 0x63 for shader and 0x64 for uconfig registers), the matching sceAgcSet*RegIndirectPatchAddRegisters adds to the packet's register count, from 2 to 5 and then up to the largest count, 0x3fff. One more register overflows, and a patch of another kind refuses the packet; both are refused without changing it.

It is called by all eight titles run here (PPSA01494, PPSA03984, PPSA18194, PPSA21564, PPSA30839, PPSA31162, PPSA34502, PPSA36591) for each of the three functions (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 d70a82d5d3 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

…unt patches

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

Copy link
Copy Markdown
Contributor Author

Windows 11 VM (GT 1030, NVIDIA 582.66, WinLibs GCC 15.2.0, Release, Ninja): this head d70a82d5d3 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 d70a82d5d3, 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, #11678, #11677, #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 merged commit 9e21cb3 into boykopovar:main Oct 28, 2026
13 checks passed
@adriadam10

Copy link
Copy Markdown
Collaborator

Checked the three sceAgcSet{Cx,Sh,Uc}RegIndirectPatchAddRegisters wrappers against PatchIndirectCount (opcodes 0x9f/0x63/0x64, 0x3fff limit): the new test pins the added count, the largest count, the overflow refusal and the wrong-kind refusal without modifying the packet. Windows NVIDIA run by @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