Skip to content

test(agc): cover sceAgcUpdatePrimState's output and primitive type updates - #11605

Merged
oneandonlydean merged 1 commit into
boykopovar:mainfrom
milescoviello:test/update-prim-state
Oct 28, 2026
Merged

oneandonlydean merged 1 commit into
boykopovar:mainfrom
milescoviello:test/update-prim-state

Conversation

@milescoviello

@milescoviello milescoviello commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

What

tests/ShaderHelpers.cpp gets an UpdatedPrimitiveType case after HandBuiltUserVgprRegister. With neither the GS nor the HS stage enabled, sceAgcUpdatePrimState replaces only the low three bits of VGT_GS_OUT_PRIM_TYPE with the output type of the new primitive (lines for a line strip, Rectangle2D for a rect list) and only the low five bits of VGT_PRIMITIVE_TYPE with the primitive, and leaves the other registers and words as they were. A null context or a null primitive list updates only the other one. With the GS or the HS stage enabled, the output type is kept and only the primitive type changes.

It is called by PPSA34502 (one call site) (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/ShaderHelpers.cpp. Test only, no change to the library.

Tested

Linux (Ubuntu 26.04, GCC 15.2), Release: cmake --build build --target agc_shader_helpers_tests and ctest -R '^agc_shader_helpers$' --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 0e64510e59 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

…dates

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

@MarcZX10 MarcZX10 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed head 0e64510e59e8459e667b0064955212c72424a612. The expectations match sceAgcUpdatePrimState: it preserves non-type bits in the two registers, maps a line strip to GS output Lines, maps RectList to Rectangle2D, updates only the available register when one pointer is null, and retains the GS output field if either GS or HS stage bit is set. The PR reports three repeated Linux shader-helper runs and conventions passing; I did not rerun locally. Hosted eligibility, conventions, intake, labels and report pass; build jobs are skipped for this test-only change. No blocking issue found.

@maskym

maskym commented Oct 28, 2026

Copy link
Copy Markdown
Contributor

Windows + NVIDIA result for head 0e64510e59, 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, #11677, #11675, #11674, #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)

@oneandonlydean
oneandonlydean merged commit 365e6bf into boykopovar:main Oct 28, 2026
13 checks passed
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.

4 participants