Repository navigation
test(agc): split agc_driver_flat_apertures by shader instead of by row - #3830
Merged
adriadam10 merged 1 commit intoOct 11, 2026
Merged
Conversation
Rows that run the same kernel at the same wave size compile the same pipeline, so each part now takes whole groups of them, and the test is split into fourteen parts. Each shader is compiled once per CI run instead of in up to three parts at once. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
|
Checked: the 14 parts cover each of the 126 rows exactly once (per-part counts sum to 126, same as the no-argument run), all |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
agc_driver_flat_aperturesis split into parts by shader instead of by row, and into 14 parts instead of 6. On CI's lavapipe the slowest part goes from 83–117 s to 29 s.Since #3217 the six parts take 71–117 s each on every Linux CI run of
main(part 0 took 116.8 s in run 38140296210, 3 s under the 120 s timeout). The time is not in the recompiler but in pipeline creation: on lavapipe eachatomic64shader takes about 10 s to compile and eachatomic32shader about 4 s. A row's kernel depends only on the operation and width (the target only changes the addresses in the table), so the shared, private and guest rows of one operation compile the same shader, and once one process has compiled it, later ones get it in a fraction of a second (most likely from Mesa's disk cache). With every sixth row per part, the three rows of an operation land in three different parts (16 operations per target), and when those parts start together each compiles the shader cold.Now each distinct (kernel, wave size) pair is numbered in row order and goes to part
number % parts, so all its rows run in the same process and each shader is compiled once per run: 38 shaders for the 126 rows. With no argument the executable still runs every row.Note for #3291: the part numbers there (
_1,_2,_4) refer to the old split and now cover different rows.Tested
Linux CI on my fork (
build.ymlworkflow_dispatch, merged intomaina11c8f7, lavapipe):cteststepmain(38140296210)With 14 parts no part gets the slow-test warning. The Linux and Windows jobs fail only on tests that also fail on
mainat that commit (agc_driver_emulated_color_compare,agc_driver_image_plane_address_on_line_implicit_lodandguest_kernel_stack_protecton Linux;windows_exceptions,guest_kernel_sysandguest_filesystemon Windows).How the cause was found: per-row timing in a throwaway build showed the cost in
Dispatch/WaitIdle(213 s) rather than inRecompile(17 s), and the same operation took ~10 s in the first part to run it and 0.2–0.5 s in later ones. Running the parts one at a time (RESOURCE_LOCK) or two at a time (PROCESSORS 2) did not fix it: the first parts to run still took 60–117 s.Every row is in exactly one part, since its part is its shader's number modulo the part count. Windows 11, WinLibs GCC 15.2.0 r7, NVIDIA RTX 5070 Ti: the parts that finish report the expected row counts; on this GPU some parts stop with "still pinned by GPU work", as parts of the old split do on
main(#3291).tools/check_conventions.pyandtools/check_test_registration.pypass.Checklist
main; no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed in TechnicalDebt.mdfiles or images added to the repository (attach them to this PR)