Skip to content

test(agc): register the full recorder run with CTest - #5211

Merged
adriadam10 merged 6 commits into
boykopovar:mainfrom
veosett:codex/recorder-coverage
Oct 14, 2026
Merged

adriadam10 merged 6 commits into
boykopovar:mainfrom
veosett:codex/recorder-coverage

Conversation

@veosett

@veosett veosett commented Oct 13, 2026 •

Copy link
Copy Markdown

What

Register the no-argument agc_driver_recorder_tests run as agc_driver_recorder, with return code 77 as a skip and a 30-second timeout. The flag-scoped CTest entries leave the full main flow, including stale-generation and import-window coverage, unregistered. Preserve the current main's recorder entries and scope the Windows libc runtime path to the new entry.

Depends on #5883: the rebased registration without that dependency fails at (9) a scan under a pending write was kept on both Windows/RX 6900 XT and Linux/lavapipe. The pending-store implementation synchronizes an unknown DCC key write before proving the keys, so that proof is stable. Carry its assertion/counter correction from AnzouBeli's 1b3f2e098, preserving authorship; the existing data and known-key-fill checks remain active. The imported code comment is removed to meet the repository conventions.

The registration carries the offered handoff from closed, unmerged #3354, retaining blawesom's authorship. The fixture also requires /dev/udmabuf before using DMA-BUF imports on Linux, with a diagnostic when it is unavailable; extension presence alone does not provide the kernel device.

Added --read-tracking-only to isolate the Radeon 860M report in this comment. The original queue wait and all signaled-read/no-reaping assertions are retained. vkQueueWaitIdle already waits for completion of prior queue submissions. The reported failure did not reproduce on the devices below; no fix or validation on Radeon 860M is claimed. The isolated command is agc_driver_recorder_tests --read-tracking-only, with ANYPS5_REQUIRE_VULKAN=1 and ANYPS5_NO_SHADER_CACHE=1.

Production library code is unchanged.

Tested

Head a95e122dca1f59e6f60f8a37774d47cfabd34de5, based on main e154f5658524bf3b6fd2aed987d31f61bfdb64d3; Release, BUILD_TESTING=ON, ANYPS5_ENABLE_SPIRV_TOOLS=ON:

  • Windows 11 build 26100, WinLibs MinGW GCC 15.2.0, AMD Radeon RX 6900 XT: Vulkan 1.4.315, driver 2.0.353 / AMD 25.10.30.02. Built libs, relinker and agc_driver_recorder_tests; 34 passed, 0 skipped, zero failures across 34 recorder CTest entries (7.87 s total; first full run 1.32 s). The no-argument run also passed with the shader cache disabled.
  • Ubuntu 24.04.5 / WSL2, GCC 13.3, llvmpipe (LLVM 20.1.2), Mesa 25.2.8, Vulkan 1.4.318: the same targets built; 31 passed, 1 skipped, zero failures across 32 recorder CTest entries (10.87 s total; first full run 6.05 s). The first full run used a fresh empty Mesa shader-cache directory and ANYPS5_NO_SHADER_CACHE=1.
  • The isolated read-tracking command passed 10 consecutive times on each host. ANYPS5_REQUIRE_VULKAN=1 prevents a missing Vulkan device from being treated as a successful skip.
  • Confirmed that the new CTest entry invokes the executable without arguments; test-registration audit, conventions and whitespace checks passed. These are the recorder entries, not the complete repository test suite.

Limits: the full run reports compared host imports and retains the existing feature guards. On Linux, agc_shadowed_key_stores returns skip code 77 because no watched host memory is imported under a unit shadow. WSL has no /dev/udmabuf; the fixture reports that unavailable path. No Radeon 860M, NVIDIA, or console/title execution is claimed.

Checklist

  • Based on current main; the pending-key prerequisite is declared below
  • One topic per PR; follow-ups go in a new PR
  • No comments in code except technical debt
  • Unimplemented paths throw; silent stubs are listed under technical debt
  • No notes, investigation .md files or images added to the repository
  • New third-party code is a submodule built from source (no new dependency in this PR)
  • Generic behaviour, not specific to one title
  • Depends on: test(agc): account for unknown pending DCC key writes #5883
  • Unblocks: none
  • GPUs tested: AMD Radeon RX 6900 XT / AMD 25.10.30.02 / Windows 11 26100; llvmpipe LLVM 20.1.2 / Mesa 25.2.8 / Ubuntu 24.04.5 WSL2
  • AI-assisted: yes (Codex)

@LeandroLP23

Copy link
Copy Markdown
Contributor

A data point for registering the full run: on another AMD Windows driver, the no-argument run fails on plain main.

Setup: Windows 11 (26300), Radeon 860M (RDNA 3.5 iGPU, driver 32.0.13058.8001, Vulkan driver string AMD proprietary driver 24.30.58.08 (LLPC)), WinLibs GCC 15.2.0, Release, main 665ad7da7 without this PR. agc_driver_recorder_tests with no argument, run from the repository root with ANYPS5_NO_SHADER_CACHE=1 and the unpatched libraries on PATH: 5 of 5 runs exit 1 at

AGC graphics: a signaled batch's read still refuses

That is the check in readTrackingTests right after device.WaitQueue() for the empty batch (tests/Recorder.cpp, near line 562). On this driver PendingReadOverlaps still sees the empty batch's read once the queue is idle. Your RX 6900 XT run passed, so this looks driver- or device-specific. As this PR stands, agc_driver_recorder would fail on this machine.

The flag-scoped entries are not affected. agc_multisample_guest_access (--multisample-only) and the other registered recorder entries pass here.

AI-assisted: yes (Claude Code)

blawesom and others added 6 commits October 14, 2026 23:28
The full run of agc_driver_recorder_tests (no arguments) was the only
section of the binary no ctest test covered: the registered entries
run the -only flags, which skip the main flow from readTrackingTests
through drawSnapshotPatchTests. Both failures that kept it off the
run are resolved on main: the (w) import window and (s) stale
generation sections now check generations around the storage image's
own import (433302b), and the lavapipe partial publish copy is
preserved when device writes reach the write watch (60f12c8).

Run on a Radeon RX 9070 (RADV, Mesa 26.2.4), Linux 7.2: 3/3 pass,
0.5-0.9 s per run; the full run joins the existing
agc_driver_recorder_tests entries in the same CMake block.
@adriadam10 adriadam10 self-assigned this Oct 14, 2026
@veosett
veosett force-pushed the codex/recorder-coverage branch from ec7c584 to a95e122 Compare October 14, 2026 18:02
@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 14, 2026
@github-actions

github-actions Bot commented Oct 14, 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
#4915 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp L54

@adriadam10

Copy link
Copy Markdown
Collaborator

Checked on current main: agc_driver_recorder registers and passes (6/6 no-argument runs and --read-tracking-only on RADV), the diff only touches the test CMake and tests/Recorder.cpp, and the carried #5883 assertion change matches the current pending-key behaviour. The Radeon 860M failure reported above predates this PR and stays open as its own issue. Merging once the full Build is green.

@adriadam10
adriadam10 merged commit 1a2d01a into boykopovar:main Oct 14, 2026
8 of 9 checks passed
adriadam10 added a commit that referenced this pull request Oct 14, 2026
This reverts commit 1a2d01a. It registered agc_driver_recorder in ctest,
which requires /dev/udmabuf access; the self-hosted Linux runners lack it,
so main has been red on Linux since a1b6be7.

Co-Authored-By: Claude <noreply@anthropic.com>
adriadam10 added a commit that referenced this pull request Oct 14, 2026
Revert #5211: agc_driver_recorder fails on the Linux runners
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agc libSceAgc* build

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants