Repository navigation
build(agc): register each AGC test executable in its own CMake fragment - #12862
Conversation
|
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.
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.
|
|
At #11566 head At #12862 head Registration preservation check on frozen mainAgainst #12862 Our private composition with #11566 If #11566 lands first, its existing AI-assisted: yes (Codex). |
|
@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 The five newer- I checked both orders on
I'll record the order in the body. |
b137f38 to
05598e0
Compare
✅ NVIDIA GPU test: passedPR head
Unstable on main (1, these also failed in recent main runs on this machine; not counted against this PR)Failing on main too (4, not counted against this PR)Validated but not compared (1, not in the main baseline's validation pass)Validation IDs already present on main (5 IDs in 708 tests)Skipped (50)ReproduceAutomated 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. |
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().
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/.
…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.
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/.
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/.
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/.
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/.
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/.
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/.
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/.
…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/.
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/.
What
Moves the AGC test registrations out of
core/libs/prx/libSceAgcDriver/CMakeLists.txtinto one fragment per test executable,tests/cmake/<executable>.cmake, as agreed in #12521.CMakeLists.txtincludes 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:
tools/agc_test_split.pyand its tests.refactorandsplitproduce the next two commits;resolvemoves the registrations of a change made before the split, likedebt_split.py resolve.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_testandagc_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 longforeach(agcTest IN ITEMS ...)andset(agcDrawPipelineTests ...)lines that pull requests append to.python3 tools/agc_test_split.py split: 279 fragments;CMakeLists.txtgoes 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 inCMakeLists.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,splitstops 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 oneset_target_propertiesover four overlay executables. Comment lines are not carried into fragments; one two-line comment, beforeagc_driver_vertex_clip_cull_draw_no_key, is dropped. The commit also adds theresolverule to CONTRIBUTING.md.The fragment commit is generated, so it can be regenerated from the
mainit lands on:git checkout main -- core/libs/prx/libSceAgcDriver/CMakeLists.txt, deletetests/cmake, runrefactorandsplitagain.After the split, a pull request whose
CMakeLists.txtchange conflicts runspython3 tools/agc_test_split.py resolveduring the stopped rebase; the rule is in CONTRIBUTING.md, after "Keep the branch up to date".Regenerated on
mainca073ec. Since 73f4f7e the file only gained #9696'sagc_driver_target_address_windowblock, which is now its own fragment. Theresolveresults 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_ownerregistration withresolve. Checked on ca073ec with #14084 at b582949:resolveputs it inagc_driver_native_multisample_depth_tests.cmakewith 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
main0f30281 and this branch regenerated on it with the same options (the branch's diff is byte-identical on ca073ec, which only adds #13671 inlibSceNpWebApi) and compared every test's command and properties (ctest --show-only=json-v1, source and build directory paths normalized) and the targets inbuild.ninja(ninja -t targets all). In each configuration below the only differences are the newagc_test_splittest and the 279 fragment filesbuild.ninjalists as configure inputs. In the first configuration the build commands (ninja -t commands all, 6634) are identical too.mainBUILD_TESTING=ONBUILD_TESTING=ON,ANYPS5_ENABLE_SPIRV_TOOLS=ONBUILD_TESTING=ON,AGC_BUILD_VISUAL_TEST=ONBUILD_TESTING=ON,ANYPS5_ENABLE_ASAN=ONBUILD_TESTING=ON,APS5_ENABLE_TRACY=ONBUILD_TESTING=ON,ANYPS5_AGC_EXECUTION_TESTS=PooledBufferRangeBUILD_TESTING=ON,ANYPS5_AGC_EXECUTION_TESTS=PooledBufferRange;CommittedReadMappingBUILD_TESTING=ON,ANYPS5_RELINKER_CLI=OFFBUILD_TESTING=ON,ANYPS5_RUN_QUARANTINED_FRAME_REPLAY=ONBUILD_TESTING=ON,CMAKE_CXX_COMPILER_LAUNCHER=ccacheBUILD_TESTING=OFFset(WIN32 ON)at the top of the AGCCMakeLists.txtset(WIN32 ON)andset(MINGW ON), with a stand-inanyps5_windows_test_exitThe
WIN32/MINGWrows 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 -Nandctest --show-only=json-v1onmainand this branch) would close it.Rebase script,
resolve:main73f4f7e 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.main73f4f7e, 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 inCMakeLists.txtand 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.pyon the configured branch: 1632 test executables, none built and not run, as onmain;--scripts: 231 test scripts, each run (230 onmain, plustest_agc_test_split.py).Not built or run beyond configuration: no source file changes, and the registrations are identical.
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)main)