Skip to content

build(agc): register each AGC test executable in its own CMake fragment - #12862

Merged
adriadam10 merged 3 commits into
boykopovar:mainfrom
janzezno:build/agc-test-fragments
Oct 31, 2026
Merged

adriadam10 merged 3 commits into
boykopovar:mainfrom
janzezno:build/agc-test-fragments

Conversation

@janzezno

@janzezno janzezno commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

What

Moves the AGC test registrations out of core/libs/prx/libSceAgcDriver/CMakeLists.txt into one fragment per test executable, tests/cmake/<executable>.cmake, as agreed in #12521. CMakeLists.txt includes the fragments in sorted order after the execution tests are created. A new test, a new mode of an existing test or a property of one then changes one fragment instead of shared lines.

Three commits:

  1. tools/agc_test_split.py and its tests. refactor and split produce the next two commits; resolve moves the registrations of a change made before the split, like debt_split.py resolve.
  2. python3 tools/agc_test_split.py refactor: the three loops that register tests for a list of executables become functions, agc_add_default_test, agc_add_draw_pipeline_test and agc_add_spirv_mode_tests. The execution tests get their default test right after they are created; every other executable calls the function in its own registration. This also removes the long foreach(agcTest IN ITEMS ...) and set(agcDrawPipelineTests ...) lines that pull requests append to.
  3. python3 tools/agc_test_split.py split: 279 fragments; CMakeLists.txt goes from 4506 to 909 lines. A statement moves with the executable whose targets or tests it changes; statements that write the same variable move together; a loop over several executables and anything that reads every registered test stays in CMakeLists.txt. A test name built from a variable (set_tests_properties(agc_pad_status_overlay_${padStatusName} ...)) moves with the one executable whose tests share its literal prefix; when the prefix matches tests of several executables, split stops with an error instead of leaving the statement before the fragments. Fragments that share a statement are merged into the fragment of the larger executable: 3 fragments hold 8 executables, from statements like one set_target_properties over four overlay executables. Comment lines are not carried into fragments; one two-line comment, before agc_driver_vertex_clip_cull_draw_no_key, is dropped. The commit also adds the resolve rule to CONTRIBUTING.md.

The fragment commit is generated, so it can be regenerated from the main it lands on: git checkout main -- core/libs/prx/libSceAgcDriver/CMakeLists.txt, delete tests/cmake, run refactor and split again.

After the split, a pull request whose CMakeLists.txt change conflicts runs python3 tools/agc_test_split.py resolve during the stopped rebase; the rule is in CONTRIBUTING.md, after "Keep the branch up to date".

Regenerated on main ca073ec. Since 73f4f7e the file only gained #9696's agc_driver_target_address_window block, which is now its own fragment. The resolve results under Tested are from 73f4f7e, where 191 other open pull requests changed the file.

Merge order with #11566 (agreed with B-Howell): #11566 is still open, so this goes first and #11566 moves its registration with resolve, which gives exactly the split of the merge (below).

Merge order with #14084 (agreed with Amoenus): this goes first and #14084 moves its agc_driver_native_depth_initial_owner registration with resolve. Checked on ca073ec with #14084 at b582949: resolve puts it in agc_driver_native_multisample_depth_tests.cmake with no conflict, and every file is identical to the split of the merge.

Tested

Arch Linux, CMake 4.4.5, Ninja 1.13.2, GCC 16.2.1.

Registration: configured main 0f30281 and this branch regenerated on it with the same options (the branch's diff is byte-identical on ca073ec, which only adds #13671 in libSceNpWebApi) and compared every test's command and properties (ctest --show-only=json-v1, source and build directory paths normalized) and the targets in build.ninja (ninja -t targets all). In each configuration below the only differences are the new agc_test_split test and the 279 fragment files build.ninja lists as configure inputs. In the first configuration the build commands (ninja -t commands all, 6634) are identical too.

Configuration Tests on main
BUILD_TESTING=ON 3062
BUILD_TESTING=ON, ANYPS5_ENABLE_SPIRV_TOOLS=ON 3074
BUILD_TESTING=ON, AGC_BUILD_VISUAL_TEST=ON 3062
BUILD_TESTING=ON, ANYPS5_ENABLE_ASAN=ON 3061
BUILD_TESTING=ON, APS5_ENABLE_TRACY=ON 3062
BUILD_TESTING=ON, ANYPS5_AGC_EXECUTION_TESTS=PooledBufferRange 3062
BUILD_TESTING=ON, ANYPS5_AGC_EXECUTION_TESTS=PooledBufferRange;CommittedReadMapping 3062
BUILD_TESTING=ON, ANYPS5_RELINKER_CLI=OFF 2853
BUILD_TESTING=ON, ANYPS5_RUN_QUARANTINED_FRAME_REPLAY=ON 3062
BUILD_TESTING=ON, CMAKE_CXX_COMPILER_LAUNCHER=ccache 3062
BUILD_TESTING=OFF 0 (targets only)
set(WIN32 ON) at the top of the AGC CMakeLists.txt 3112
set(WIN32 ON) and set(MINGW ON), with a stand-in anyps5_windows_test_exit 3112

The WIN32/MINGW rows only run the Windows branches of this directory on Linux. A Windows (MSYS2) comparison is still open; I can't run one, so a run on Windows (ctest -N and ctest --show-only=json-v1 on main and this branch) would close it.

Rebase script, resolve:

  • The last 150 commits on main 73f4f7e that changed the file: applying each one's change to the split of its parent gives exactly the split of the commit, with no conflicts, 150 of 150.
  • The 191 other open pull requests that changed the file on main 73f4f7e, before this regeneration: all 153 that merge cleanly today give exactly the split of that merge, test(agc): support draw profiling in the graphics fixture #11566 among them; 5 that conflict today apply without a conflict; 17 conflict both ways, 16 of them in one fragment each (10 in the recorder tests, 4 in the native multisample depth tests, 1 each in the shader memory and graphics tests) and perf(agc): build the pipelines of a submission ahead on a compile pool #5925 in CMakeLists.txt and three fragments; 16 leave the file unchanged.

python3 -m unittest tools/tests/test_agc_test_split.py: 15 tests pass. python3 tools/check_test_registration.py on the configured branch: 1632 test executables, none built and not run, as on main; --scripts: 231 test scripts, each run (230 on main, plus test_agc_test_split.py).

Not built or run beyond configuration: no source file changes, and the registrations are identical.

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 (no driver code changes; test registrations only, identical to main)
  • AI-assisted: yes

@github-actions

github-actions Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Other open pull requests touch the same code. Merging one will break the other, or both implement the same thing. If this one builds on them, list them in Depends on.

Pull request Conflicting files (lines on main) Same exports Same new files
PR 4449 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 6185 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 6186 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 6501 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3209-3363
PR 6743 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3609-3661
PR 6921 core/libs/prx/libSceAgcDriver/CMakeLists.txt L693-1073
PR 6959 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3209-3363
PR 6973 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846
PR 6987 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846
PR 6989 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846
PR 6995 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846
PR 7002 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846
PR 7223 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2848-2861, L3093-3207
PR 7310 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846, L3209-3363
PR 7395 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2848-2861, L3093-3207
PR 7446 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3385-3546
PR 7642 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337, L2466-2846, L2863-2869, L2871, L2899-2901, L3010-3048, L3093-3207, L3385-3546
PR 7694 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2848-2861
PR 8089 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 8707 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 8874 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337, L3093-3207
PR 8887 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 8939 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3093-3207
PR 9020 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846
PR 9176 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2931-2984
PR 9188 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 9287 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2931-2984
PR 9289 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2931-2984
PR 9335 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846, L2931-3005
PR 9445 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337, L4045-4501
PR 9457 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3093-3207
PR 9508 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337, L2466-2846, L2863-2869, L2871, L2899-2901, L3010-3048, L3093-3207, L3385-3546
PR 9533 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3093-3207
PR 9633 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3093-3207
PR 9700 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846
PR 9717 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3093-3207
PR 9742 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3093-3207
PR 9748 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846
PR 9749 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3093-3207
PR 9790 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3093-3207
PR 9875 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337, L2466-2846
PR 9892 core/libs/prx/libSceAgcDriver/CMakeLists.txt L693-1073
PR 9897 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2873-2877, L2881-2897, L3093-3207
PR 9898 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 9899 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846
PR 9969 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3093-3207
PR 10000 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2848-2861, L2881-2897
PR 10043 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 10064 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3093-3207
PR 10069 core/libs/prx/libSceAgcDriver/CMakeLists.txt L693-1073
PR 10141 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3093-3207
PR 10159 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 10193 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337, L2466-2846, L2863-2869, L2871, L2899-2901, L3010-3048, L3093-3207, L3385-3546
PR 10194 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337, L2931-2984
PR 10333 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 10351 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3609-3661
PR 10359 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846
PR 10382 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846
PR 10443 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 10472 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337, L2466-2846, L2931-2984, L3385-3546
PR 10489 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2848-2861, L2881-2897
PR 10720 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846
PR 10750 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846
PR 10760 core/libs/prx/libSceAgcDriver/CMakeLists.txt L491-684
PR 10764 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 10773 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 10846 core/libs/prx/libSceAgcDriver/CMakeLists.txt L693-1073, L2466-2846, L2848-2861, L3093-3207
PR 10867 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3548-3604
PR 10886 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 11104 core/libs/prx/libSceAgcDriver/CMakeLists.txt L442-484
PR 11351 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3209-3363
PR 11435 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3869-3964
PR 11436 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3869-3964
PR 11490 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 11566 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 11914 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 11920 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 12070 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846
PR 12318 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3869-3964
PR 12323 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 12348 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846, L3975-4013
PR 12478 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3385-3546
PR 12565 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3869-3964
PR 12567 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3869-3964
PR 12568 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3869-3964
PR 12662 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846
PR 12696 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3869-3964
PR 12745 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3385-3546
PR 12786 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3385-3546
PR 12840 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846, L2916-2928
PR 12855 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337, L4045-4501
PR 12871 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3869-3964
PR 12904 core/libs/prx/libSceAgcDriver/CMakeLists.txt L4045-4501
PR 12921 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 12980 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846
PR 13021 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3093-3207
PR 13023 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3093-3207
PR 13044 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 13159 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846
PR 13251 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 13262 core/libs/prx/libSceAgcDriver/CMakeLists.txt L4045-4501
PR 13263 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 13707 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3385-3546
PR 13774 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2916-2928
PR 13793 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 13809 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 13858 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2466-2846
PR 13863 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2916-2928, L2931-2984
PR 13920 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337, L2916-2928, L2931-2984
PR 13928 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337, L2466-2846, L2863-2869, L2871, L2899-2901, L3010-3048, L3093-3207, L3385-3546
PR 13929 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337, L2466-2846, L2863-2869, L2871, L2899-2901, L3010-3048, L3093-3207, L3385-3546
PR 13931 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 13942 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1127-2337
PR 13984 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3869-3964
PR 14005 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3093-3207
PR 14032 core/libs/prx/libSceAgcDriver/CMakeLists.txt L2873-2877, L2881-2897, L3093-3207
PR 14051 core/libs/prx/libSceAgcDriver/CMakeLists.txt L3010-3048

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 674 CMakeLists.txt
PR 1368 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 1395 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 1835 CMakeLists.txt
PR 1896 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 2434 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 3786 CMakeLists.txt
PR 5021 CMakeLists.txt
core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5371 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5925 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6182 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6187 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6188 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6192 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6209 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6280 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6300 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6412 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6481 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6808 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6905 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7048 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7085 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7275 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7457 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7464 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7508 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7514 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7604 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7689 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 8014 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 8246 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 8484 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 8542 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 8592 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9248 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9539 CMakeLists.txt
PR 9712 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9852 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9884 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9891 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10026 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10233 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10442 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10492 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10497 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10757 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10897 CMakeLists.txt
PR 10920 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10940 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 11442 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 11444 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 11554 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 12120 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 12324 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 12536 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 12746 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 12828 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 13148 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 13578 CMakeLists.txt

@B-Howell

B-Howell commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

At #11566 head b1d83958a3e225477f61fc2ac812a6eb71923398, the PR adds agc_graphics_profile_draw beside agc_command_batch_fence_failure in core/libs/prx/libSceAgcDriver/CMakeLists.txt. It adds mock timestamp-pool support in tests/Graphics.cpp; the profile test also needs its ANYPS5_NO_SHADER_CACHE=1;APS5_PROFILE_DRAW=1, skip/timeout/working-directory settings and Windows PATH property preserved.

At #12862 head b137f38f80c71956e33d298676b3aef551ff6997, the registration refactor moves agc_command_batch_fence_failure into tests/cmake/agc_driver_graphics_tests.cmake, but does not include agc_graphics_profile_draw. Since both checklists currently say Depends on: none, I propose landing #11566 before #12862 so your split can migrate the profile registration and properties into that fragment. Please confirm this order or say if you prefer #12862 first; if it lands first, I will move the #11566 registration into the new fragment while preserving those properties.

Registration preservation check on frozen main

Against #12862 b137f38f80c71956e33d298676b3aef551ff6997 and frozen main 992d3fa639c76abbcd5438ea1c437c7dd8c2ed75, the older fragments omit five newer-main registrations: agc_address_copy_cap_mirror, agc_address_space_unwatched_mirror_import, agc_shader_region_merge, agc_small_tiled_shadow_label, and agc_written_buffer_index. Please retain these when refreshing the migration, including the existing agc_written_buffer_index_tests target.

Our private composition with #11566 c6cbfa69 uses your fragment layout plus those existing registrations. All 3,065 baseline tests retained identical generated CTest commands and properties after build-directory/backtrace normalization; the added agc_test_split gives 3,066 total. All 164 AGC test target/source/property command definitions match the frozen main. The helper CTest passed 1/1 (12 unit tests in 12.315 seconds; CTest 12.46 seconds). This is Windows configuration/registration preservation and a helper-test result, not a full AGC build, GPU qualification or other-platform execution result.

If #11566 lands first, its existing agc_graphics_profile_draw registration and environment, skip code, timeout, working directory and Windows PATH properties must move into the graphics fragment too. If this migration lands first, we will adapt our #11566 branch to the fragment layout. The existing order proposal remains unanswered; the private composition does not establish author agreement or whole-PR readiness.

AI-assisted: yes (Codex).

@janzezno

Copy link
Copy Markdown
Contributor Author

@B-Howell, thanks for the check. #11566 first is fine with me. This PR stays a draft until a merge batch lands anyway, and if #11566 has merged by then, the regenerated split picks its registration up with nothing to do on your side. If #11566 is still open then, I'd rather not hold the split for it: this goes first and python3 tools/agc_test_split.py resolve moves your registration during the rebase.

The five newer-main registrations: the last two commits aren't refreshed from the old fragments. At landing, I regenerate them from that main's CMakeLists.txt (refactor and split), so everything on that main moves, including agc_written_buffer_index_tests.

I checked both orders on main 1e15e0a501 with #11566 at c6cbfa6936:

Result
main + #11566, then split 275 fragments. agc_graphics_profile_draw lands in agc_driver_graphics_tests.cmake next to agc_command_batch_fence_failure, with its environment, SKIP_RETURN_CODE 77, TIMEOUT 60, WORKING_DIRECTORY and the WIN32 PATH modification. The five registrations land in agc_driver_graphics_tests, agc_shader_memory_tests, agc_driver_recorder_tests and agc_written_buffer_index_tests
ctest --show-only=json-v1, unsplit vs split, paths normalized identical: 3008 tests on Linux, 3058 with set(WIN32 1) forced at the top of the AGC CMakeLists.txt
split of main, then #11566 merged and resolve #11566's CMakeLists.txt conflict resolves into agc_driver_graphics_tests.cmake. CMakeLists.txt and all fragments are byte-identical to the first row

I'll record the order in the body.

@janzezno
janzezno force-pushed the build/agc-test-fragments branch from b137f38 to 05598e0 Compare October 31, 2026 14:22
@janzezno
janzezno marked this pull request as ready for review October 31, 2026 14:22
@github-actions github-actions Bot added needs rebase Conflicts with main, rebase needed and removed needs rebase Conflicts with main, rebase needed labels Oct 31, 2026
@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head 05598e0 merged onto main 73f4f7e · tested 2026-10-31 15:47 UTC · 31 min

GPU NVIDIA RTX 2000 Ada Generation, driver 595.99.02, Vulkan 1.4.329
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-38-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ✅ 3,018 passed · 5 failed (0 new, 4 also fail on main, 1 unstable on main) · 50 skipped (ANYPS5_REQUIRE_VULKAN=1)
Test setup CPU-only tests without a GPU; GPU tests (and any CPU-only test that failed or skipped without one) once on the GPU with VK_LAYER_KHRONOS_validation and ANYPS5_NO_SHADER_CACHE=1; main ran the same way
Vulkan validation ✅ no new validation IDs vs main (1219 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_bda_device 60.6 s, ⚠️ agc_driver_lookup_log_fits_build 60.0 s, ⚠️ agc_driver_pipeline_journal 54.5 s, ⚠️ agc_driver_graphics_maps_fallback 30.3 s
Unstable on main (1, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_submit_progress: failed in 7 of the last 10 main runs
Failing on main too (4, not counted against this PR)
agc_driver_idle_store_yields
agc_driver_image_table
guest_mmap_executable
guest_socket_options_multicast
Validated but not compared (1, not in the main baseline's validation pass)
agc_test_split
Validation IDs already present on main (5 IDs in 708 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (708 tests): agc_compute_pipeline_replay, agc_driver, agc_driver_address_passes, agc_driver_address_passes_draw_transitions, agc_driver_address_passes_targets_split, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, and 700 more
VUID-vkCmdCopyImage-srcImage-01548 (13 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_cpu_write_after_memo, agc_driver_depth_plane_cpu_write_after_page_unwatch, agc_driver_depth_plane_cpu_write_after_partial_unwatch, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_plane_sampling, and 5 more
VUID-vkCmdCopyImage-srcImage-01551 (13 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_cpu_write_after_memo, agc_driver_depth_plane_cpu_write_after_page_unwatch, agc_driver_depth_plane_cpu_write_after_partial_unwatch, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_plane_sampling, and 5 more
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (2 tests): agc_driver_prepared_exports, agc_driver_srgb8_color_target
VUID-VkShaderModuleCreateInfo-pCode-08737 (1 test): agc_driver_image_sample_derivatives
Skipped (50)
agc_driver_bda_reads_shadowed_results: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_bda_reads_shadowed_results_per_build: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_msaa_dcc_compared_import_2: skipped, the device reports host imports that keep write protection, so the write-watch probe compares none of them
agc_driver_msaa_dcc_compared_import_4: skipped, the device reports host imports that keep write protection, so the write-watch probe compares none of them
agc_driver_msaa_dcc_compared_import_8: skipped, the device reports host imports that keep write protection, so the write-watch probe compares none of them
agc_driver_sample_order_grid_reference: skipped, the device does not keep depth drawn at custom sample locations at those locations, even after a transition that names them: the composite of uniform renders holds the guest's depth in 0 of 3005 sloped samples, so no path can be compared with it bit for bit
agc_driver_sparse_dma_buf_import: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_stencil_ref_export: skipped, the device lacks VK_EXT_shader_stencil_export
agc_driver_vertex_elected_atomic_max: skipped, the device runs vertex programs in subgroups, so they keep their cross-lane reductions
agc_host_import_sparse: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_import_settle_initial_dcc: skipped, the device has no deferred settle of host imports: imports under 1 MiB wait for one only on Windows
agc_unit_shadow_completion_store: skipped, the device reports watched host memory written when it imports or reads it
guest_http_uri_locale: 
guest_net_ctl: skipped, the host has no IPv4 address
guest_video_out_color_space: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_hdr: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_high_frame_rate: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_output_mode: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_resolution_status: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_wqhd_detection: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
video_out_flip_aftergpu: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_backtoback: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_controls: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip_in_order: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_dcc: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_deferred: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or pla
Reproduce
git fetch origin 05598e0d9d473be76679e92079b2cb03cc1992d3 73f4f7e06e4f210a8c6570e335fd654dc0a86134
git checkout 73f4f7e06e4f210a8c6570e335fd654dc0a86134 && git merge --no-ff 05598e0d9d473be76679e92079b2cb03cc1992d3
git submodule update --init --recursive
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON -DANYPS5_ENABLE_SPIRV_TOOLS=ON
cmake --build build && cmake --build build --target libs
VK_DRIVER_FILES=/nonexistent/icd.json ctest --test-dir build -E '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 32 --output-on-failure
ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation \
  ctest --test-dir build -R '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 4 --output-on-failure
# failures are then re-run alone: --timeout 360 --parallel 2; new validation IDs: the test alone, twice, --parallel 1

Automated build and test on a contributor's NVIDIA machine; it does not replace upstream CI. A new comment is posted for each new push. Full logs.

@adriadam10 adriadam10 self-assigned this Oct 31, 2026
Celegans12 pushed a commit to Celegans12/AnyPS5-Ghost-of-Yotei that referenced this pull request Nov 1, 2026
This brings boykopovar#9508's commits since 31f5d0e and its merges of main, which carry boykopovar#12862's test split.

The conflict in core/libs/prx/libSceAgcDriver/CMakeLists.txt is resolved with tools/agc_test_split.py resolve, which moves this PR's test registrations into tests/cmake/. boykopovar#9508's split merge already registers the _gpu_heap variants through agc_add_gpu_heap_test(), so this PR's GPU heap test list needs no edit.

The other conflicts keep both sides:
- ShaderDiskCache.cpp: boykopovar#9508's 866bd70 drops the second encode and decode of userDataRegisterReads, and this PR's device image interface and sampler class lists follow imageTableFaults in both.
- Dispatch.cpp and DrawCapture.cpp: this PR's DeviceImagesServe line, then boykopovar#9508's 675e238 heap key and profile lines.
- ShaderResources.cpp: this PR's DeviceImageTable.hpp include and boykopovar#10194's MemoryAccounting.hpp include.
- tests/BindlessHeapSlots.cpp: boykopovar#9508's SetTestEnvironment and OpenVulkanTestDevice helpers, with both settings made before the device opens, as this PR's 0f3e74a does, since BindlessHeap reads APS5_HEAP_SLOT_CAP once, in its constructor.
- tests/cmake/agc_shader_memory_tests.cmake: boykopovar#9508's 09cc865 moves four tests to agc_add_env_test() and drops them from the Windows ENVIRONMENT_MODIFICATION line, and this PR's agc_shader_table_trailer and agc_shader_device_image_tables stay on it.

boykopovar#9508's 0f4b636 and 675e238 rename what this PR's lines call, so they follow: TableTrailerWord calls the shared LoadTableMap in place of tableMapWord, SpirvImageEmitter.cpp's device table checks call TableHeap() and TableMapAddressed(), the DrawCapture.cpp line reads context.localDevice, and the device image tests call graphicsContext().
slopradish pushed a commit to slopradish/AnyPS5 that referenced this pull request Nov 2, 2026
The conflict in core/libs/prx/libSceAgcDriver/CMakeLists.txt from boykopovar#12862's split is resolved with tools/agc_test_split.py resolve, which moves this PR's test registrations into tests/cmake/.
slopradish pushed a commit to slopradish/AnyPS5 that referenced this pull request Nov 2, 2026
…e-masks

The conflict in core/libs/prx/libSceAgcDriver/CMakeLists.txt from boykopovar#12862's split is resolved with tools/agc_test_split.py resolve, which moves this PR's test registrations into tests/cmake/.

ShaderDiskCache's FormatVersion conflicts too, since boykopovar#7395's merge brings 63. This PR's own format moves from 53 to 66, the lowest number above boykopovar#7395's 63 that no open PR uses, in the stack's order, so its recompiler change keeps a disk cache format of its own.
slopradish pushed a commit to slopradish/AnyPS5 that referenced this pull request Nov 2, 2026
The conflict in core/libs/prx/libSceAgcDriver/CMakeLists.txt from boykopovar#12862's split is resolved with tools/agc_test_split.py resolve, which moves this PR's test registrations into tests/cmake/.
oneandonlydean pushed a commit that referenced this pull request Nov 2, 2026
The conflict in core/libs/prx/libSceAgcDriver/CMakeLists.txt from #12862's split is resolved with tools/agc_test_split.py resolve, which moves this PR's test registrations into tests/cmake/.
oneandonlydean pushed a commit that referenced this pull request Nov 2, 2026
The conflict in core/libs/prx/libSceAgcDriver/CMakeLists.txt from #12862's split is resolved with tools/agc_test_split.py resolve, which moves this PR's test registrations into tests/cmake/.
oneandonlydean pushed a commit that referenced this pull request Nov 2, 2026
The conflict in core/libs/prx/libSceAgcDriver/CMakeLists.txt from #12862's split is resolved with tools/agc_test_split.py resolve, which moves this PR's test registrations into tests/cmake/.
oneandonlydean pushed a commit that referenced this pull request Nov 3, 2026
The conflict in core/libs/prx/libSceAgcDriver/CMakeLists.txt from #12862's split is resolved with tools/agc_test_split.py resolve, which moves this PR's test registrations into tests/cmake/.
oneandonlydean pushed a commit that referenced this pull request Nov 3, 2026
The conflict in core/libs/prx/libSceAgcDriver/CMakeLists.txt from #12862's split is resolved with tools/agc_test_split.py resolve, which moves this PR's test registrations into tests/cmake/.
oneandonlydean pushed a commit that referenced this pull request Nov 3, 2026
The conflict in core/libs/prx/libSceAgcDriver/CMakeLists.txt from #12862's split is resolved with tools/agc_test_split.py resolve, which moves this PR's test registrations into tests/cmake/.
SA-SUJON pushed a commit to SA-SUJON/AnyPS5 that referenced this pull request Nov 4, 2026
…lias-htile-proof

The conflict in core/libs/prx/libSceAgcDriver/CMakeLists.txt from boykopovar#12862's split is resolved with tools/agc_test_split.py resolve, which moves this PR's test registrations into tests/cmake/.
oneandonlydean pushed a commit that referenced this pull request Nov 4, 2026
The conflict in core/libs/prx/libSceAgcDriver/CMakeLists.txt from #12862's split is resolved with tools/agc_test_split.py resolve, which moves this PR's test registrations into tests/cmake/.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants