Skip to content

test(agc): connect MSAA sample readback to tiled layouts - #6887

Merged
oneandonlydean merged 4 commits into
boykopovar:mainfrom
Amoenus:codex/test-msaa-reader-retile-main143
Oct 21, 2026
Merged

oneandonlydean merged 4 commits into
boykopovar:mainfrom
Amoenus:codex/test-msaa-reader-retile-main143

Conversation

@Amoenus

@Amoenus Amoenus commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

What

Connect the shared #6588/#6601 foundations in registered Vulkan tests. #6601 is merged; this remains stacked on #9182. The own two-commit range changes only tests, their shader pattern and registration; the main diff includes the declared parent.

The agc_driver_multisample_readback_retile and agc_driver_multisample_readback_depth_retile modes render 129x67, 17-layer, four-sample R32_UINT and D32_SFLOAT images. Actual GPU readback feeds the CPU R_X and Z_X tile helpers, then detile. Each case checks all 587,724 rendered elements, tile padding, outer sentinels, unchanged source bytes, and seven pinned fragment addresses per layout with XOR 0 and 0x8100 (28 reference-point checks). D32 uses 587,724 distinct finite values below 1.0; the fixture and its expected bits use 0.125 + (element + 1) / 2^20 to avoid clamping the larger surface.

The address values reuse #6588's four-byte/four-fragment Addrlib references from pinned AMD Addrlib; they are not new oracle measurements. The tests connect layer/y/x/fragment ordering for both integer and native D32 samples. Native depth/stencil ownership, stencil extraction and HTILE publication remain separate work in #6570. No new title unblock or console measurement is claimed.

Tested

Source refresh — 2026-10-21

Head b65a553db6, based on main 745b3946294a9d79e1177a289482768d6ab88c9a. This supersedes the previous current-head labels in the historical qualification below.

  • Selected affected-library and native-fixture targets build on Windows 11 Enterprise 26200, WinLibs GCC 15.2 r7/UCRT Release, SPIRV-Tools ON. This refresh does not claim a new full-default build or full-suite result.
  • 18 verified physical-GPU process passes, across RTX 5080 /610.62 and Radeon Graphics/gfx1036 /32.0.21036.18. Required Vulkan, application cache/journal disabled, Khronos 1.4.363 actually loaded, serial verbose CTest with 30 s bounds. Driver caches remain uncontrolled. No process skips/timeouts.
  • Focused modes per GPU: agc_driver_multisample_readback x3, agc_driver_multisample_readback_depth x3, agc_driver_multisample_readback_upload x3. These pass with no validation errors/warnings.
  • The unchanged-main readback control passes once per GPU. New capability/retile assertions and prior negative controls retain the distinctions and source pins in the historical report; an absent main capability is not counted as a main pass.
  • Current-main conventions and patch whitespace pass. Newer reviewed main 2c4b116da9 merges cleanly; this is source review, not a runtime result at that newer pin. Earlier Linux, full-build, hardware-reference and negative-control results retain their original pins. No new title or speed result.
Earlier qualification at its recorded pins **Conventions status — 2026-10-20:** The [older failed job](https://github.com/boykopovar/AnyPS5/actions/runs/39283077729/job/118161347025) reported an empty `Tested` section. The current description and unchanged head `90d07d596e` now pass the full conventions checker from main `83751168dd` (zero findings). Runtime results below retain their original pins; this description update changes no code.

Current rebase and validation — 2026-10-19

Head 90d07d596e is transplanted onto refreshed #6965 at 9861b0d775, which uses #6588 at 945b29a822 and main d047690c63. Range-diff marks both own test commits identical to the old 3c5ea81361 / 5beb0c4903 patches. Old heads are preserved locally. Only the fixture, its fragment shader and the registration list differ from the qualified parent; no production source changed.

The exact new fixture/shader were rebuilt on Windows11 Enterprise26200, WinLibsGCC15.2r7/UCRT Release. Nine modes (the seven readback/upload modes and the two connected retile modes) each pass three fresh processes per actual RTX5080/Radeon Graphics: 54 GPU passes, including12 new retile passes. All requested subcases ran; no whole-test skips, timeouts, VUIDs, validation errors/warnings or missing requested validation layer. Vulkan is required, application shader caching is off and verbose CTest logs verify actual devices and loaded Khronos layers; driver cache is uncontrolled.

The full-default and explicit library/relinker build evidence is reused from parent9861 at its actual pin because production blobs are identical; this head has a fresh selected-target build, not a new full-default-build claim. Conventions/whitespace checks pass. The live PR/fork heads were verified before the exact-lease push; a clean merge with fetched main32004 was checked. Historical Linux/source-oracle/title evidence retains its original pins; no new Linux, title, speed or console result is claimed. AI-assisted: yes (Codex).

Dependency-parent/change comparison: the qualified #6965 parent 9861b0d775 passes the common agc_driver_multisample_readback group3/3 per actual GPU; this head 90d07d596e passes the same common mode3/3 per GPU with the same Vulkan/cache/validation settings and zero VUID/errors/warnings. Parent9861 also has all seven readback/upload modes passing3/3 per GPU. These are dependency-parent controls (main d047 + declared CPU-layout/upload stack), not a fresh literal-unmodified-main run.

The earlier literal-main 8816fd7720 versus old head 5beb0c4903 comparison remains historical. The new retile registrations do not exist on main and are separately counted as12 capability executions. No performance or complete title-run claim.

Earlier validation at its original source pins

Current head 86feedd16201b206a9b77df36bd87b9b3252850d is rebased onto exact #6965 head 2f8a4508e27220d62d8955fb8b06a5c743b4e535, incorporating main bd5856170891c2a148a384eb79b90fe8e9385bb6. Own review scope: two test commits, three files, +68/-5. Both commits replay cleanly; their patches are unchanged. Production code is identical to the declared parent.

  • Full Release relinker, libs and reader/upload/retile fixture build on Windows11 Enterprise26200 / WinLibs GCC15.2r7 and Ubuntu24.04 WSL2 / GCC13.3. The old separate Windows build initially lacked the newly required ZArchive/zstd submodules; initializing the repository-pinned submodules restores configuration, then the builds pass. No dependency pin or source workaround was added.
  • All nine reader/upload/retile groups pass3/3 per verified device: 81 passing processes, maximum0.50s. RTX5080 (10de:2c02,32.0.16.1062/610.62):27; AMD Radeon Graphics (1002:13c0,32.0.21036.18):27; llvmpipe LLVM20.1.2/Mesa25.2.8:27. All54 Windows processes confirm Khronos1.4.363 loaded, with no observed VUID/validation errors. Linux has no validation layer.
  • Every connected4x mode checks all587724 integer or distinct finite D32 elements, both layouts/XORs, seven pinned addresses, padding, outer sentinels, source preservation and pipeline-cache guards. Both connected modes execute every case on each device. Linux's unavailable2x/8x cases inside the inherited reader/upload modes remain excluded from coverage; no whole-test skips or timeouts. Serial CTest,30s bound, Vulkan required, project shader cache/pipeline journal disabled; driver caches uncontrolled.
  • Cppcheck2.20 then clang-tidy23.1.3 on the changed fixture:6.841s, no selected diagnostics or parser/configuration errors, suppressions or automatic fixes. Conventions and diff checks pass at this submitted head. The earlier analysis attempt raced compilation-database generation and did not complete; it is excluded from these results.
cmake --build build --target relinker libs agc_driver_multisample_readback_tests
ctest --test-dir build -V -j1 --repeat until-fail:3 --timeout 30 -R '^agc_driver_multisample_readback(_(uint8|uint16|uint64|uint128|depth|upload|retile|depth_retile))?$'

No new title unblock, HTILE-completion, performance or console-equivalence claim. The earlier fault controls below retain their original pins.

Earlier validation and controls at original pins

Historical head c4d6d3cc85e1c6a9018ad5e02dfff10819f795a6, based on main 143f13055 plus #6588 head f1a733dd5 and #6601 head 4b24b3ca0:

  • The reader target and dependencies rebuild on Windows 11 Enterprise 26200 / WinLibs GCC 15.2 r7 and Ubuntu 24.04 WSL2 / GCC 13.3. Production source is unchanged from bfae8feb4; its application (relinker) and libs build results are retained at that pin, rather than claimed as fresh full builds.
  • All eight reader groups pass three fresh repetitions per verified device: 72 passing runs, covering NVIDIA RTX 5080 (32.0.16.1062), AMD Radeon(TM) Graphics (32.0.21036.18), and Mesa 25.2.8 lavapipe/llvmpipe LLVM 20.1.2. The groups are the base reader plus uint8, uint16, uint64, uint128, depth, retile and depth_retile. Both connected modes execute both layouts/XORs in every repetition. Maximum positive matrix test time: 0.51 s.
  • Windows runs all 2x/4x/8x reader subcases. llvmpipe runs 4x and reports 36 unavailable 2x/8x subcases across the repetitions; those are excluded from coverage. Neither connected 4x mode has unavailable subcases; no whole-test skips or timeouts. Vulkan required; project shader cache disabled, driver caches uncontrolled.
  • The D32 ordering control is this exact head plus one test-only line rotating the completed host readback by one element before tiling. On RTX 5080, depth_retile fails at readback and retile disagree on layer, pixel or fragment order (0.58 s); restoring c4d6d3cc8, rebuilding and rerunning passes. The control changes only bounded host-vector contents after GPU completion.
  • Conventions, registration (908 executables, none unregistered) and whitespace checks pass. Cppcheck 2.20 then clang-tidy 23.1.3 report no selected diagnostics or parser/configuration errors in the changed fixture (6.586 s combined).
Earlier integer-only validation at its original pins

At bfae8feb4, application (relinker), libs and reader targets build on both OSes. The connected integer case passes once per NVIDIA/AMD/llvmpipe device with no unavailable subcases, longest 0.414 s. A host layer-order control fails the ordering assertion and restoration passes on RTX 5080. That control uses earlier source-identical fixture 7490c0810, whose composition also includes the unrelated #6452 alignment correction; the submitted branch excludes it. The new c4d6d3cc8 D32 control above uses the actual submitted composition. Parent oracle comparisons and wider matrices retain their original pins in #6588/#6601.

No whole CTest suite, physical-console or title run was performed for this test-only follow-up. Maintainer-dispatched upstream CI remains useful.

Checklist

@github-actions

github-actions Bot commented Oct 16, 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 8246 core/libs/prx/libSceAgcDriver/Graphics/include/TextureDetiler.hpp L62-63
PR 8847 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp L243
PR 8999 core/libs/prx/libSceAgcDriver/Graphics/include/TextureDetiler.hpp L59

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 1368 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 1395 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 2434 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/debt/libSceAgcDriver.md
PR 4040 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 4072 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
PR 4448 docs/dev/debt/libSceAgcDriver.md
PR 4449 docs/dev/debt/libSceAgcDriver.md
PR 4472 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
PR 5021 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 5058 docs/dev/debt/libSceAgcDriver.md
PR 5371 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5372 docs/dev/debt/libSceAgcDriver.md
PR 5431 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 5441 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 5499 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/TextureDetiler.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/TextureDetiler.cpp
docs/dev/debt/libSceAgcDriver.md
PR 5925 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6044 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6186 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6187 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6188 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6192 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6194 docs/dev/debt/libSceAgcDriver.md
PR 6202 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6209 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6223 docs/dev/debt/libSceAgcDriver.md
PR 6280 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6290 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6300 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6412 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6481 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
docs/dev/debt/libSceAgcDriver.md
PR 6501 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6548 docs/dev/debt/libSceAgcDriver.md
PR 6549 docs/dev/debt/libSceAgcDriver.md
PR 6747 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6788 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6808 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6867 docs/dev/debt/libSceAgcDriver.md
PR 6868 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6879 core/libs/prx/libSceAgcDriver/Graphics/src/TextureDetiler.cpp
PR 6946 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6947 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6960 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6977 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/TextureDetiler.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7048 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7201 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 7256 docs/dev/debt/libSceAgcDriver.md
PR 7275 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
PR 7449 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7484 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
PR 7505 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 7514 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7604 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 7642 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7800 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
docs/dev/debt/libSceAgcDriver.md
PR 7910 docs/dev/debt/libSceAgcDriver.md
PR 8014 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/debt/libSceAgcDriver.md
PR 8070 docs/dev/debt/libSceAgcDriver.md
PR 8105 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 8278 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 8395 docs/dev/debt/libSceAgcDriver.md
PR 8424 docs/dev/debt/libSceAgcDriver.md
PR 8484 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/TextureDetiler.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/TextureDetiler.cpp
PR 8552 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 8564 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 8592 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 9020 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 9077 docs/dev/debt/libSceAgcDriver.md

@Amoenus
Amoenus force-pushed the codex/test-msaa-reader-retile-main143 branch from c4d6d3c to 4a97303 Compare October 16, 2026 22:37
@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Oct 17, 2026
@Amoenus
Amoenus force-pushed the codex/test-msaa-reader-retile-main143 branch from 4a97303 to 86feedd Compare October 17, 2026 23:55
@github-actions github-actions Bot added unblocks title Names a title ID on the Unblocks line needs rebase Conflicts with main, rebase needed and removed needs rebase Conflicts with main, rebase needed labels Oct 18, 2026
@Amoenus
Amoenus force-pushed the codex/test-msaa-reader-retile-main143 branch from 86feedd to 5beb0c4 Compare October 19, 2026 08:54
@github-actions github-actions Bot added needs rebase Conflicts with main, rebase needed and removed needs rebase Conflicts with main, rebase needed labels Oct 19, 2026
@Amoenus
Amoenus force-pushed the codex/test-msaa-reader-retile-main143 branch from 5beb0c4 to 90d07d5 Compare October 19, 2026 16:07
@github-actions github-actions Bot removed needs rebase Conflicts with main, rebase needed unblocks title Names a title ID on the Unblocks line labels Oct 19, 2026
@oneandonlydean oneandonlydean self-assigned this Oct 20, 2026
@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Oct 21, 2026
@Amoenus
Amoenus force-pushed the codex/test-msaa-reader-retile-main143 branch from 90d07d5 to b65a553 Compare October 21, 2026 14:12
@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 21, 2026
@oneandonlydean
oneandonlydean merged commit 4ec064d into boykopovar:main Oct 21, 2026
14 checks passed
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.

2 participants