Repository navigation
Conversation
|
I see this branch and its reported Vulkan before/after runs are based 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.
|
|
@Sam-mon7 #11157 registers auto command = "\"" + tool.string() + "\" \"" + capture.string() + "\" ...";
#ifdef _WIN32
command = "\"" + command + "\"";
#endifYour Proposed order: either one, no |
|
I checked the exact live heads Please agree with @janzezno which PR goes first and record that order in |
MarcZX10
left a comment
There was a problem hiding this comment.
I reviewed the repeat/cold-pipeline changes and regression test on head a6066b04fca846f19e5a28653f281e9597d43257. I found a concrete option-behavior gap: --cold-pipelines only skips setting APS5_HEADLESS_PIPELINE_CACHE, but does not clear an inherited value. VulkanDevice treats any non-null value of that variable as loadFromFile=true, so running with APS5_HEADLESS_PIPELINE_CACHE=1 agc_frame_replay ... --cold-pipelines still loads a pipeline-cache file instead of starting cold. Please clear the variable in the cold branch on both Windows and POSIX, and add a regression that launches the tool with the variable already set.
There is also an unresolved merge-order issue with #11157. I independently checked the live heads and git merge-tree reports a content conflict in core/libs/prx/libSceAgcDriver/tests/FrameReplay.cpp; I left the exact-hunk detail in my earlier comment. Please agree which PR lands first with @janzezno and record that order in Depends on as required by the overlap rule.
Finally, this branch is based on 7b415520b607, while current main is b0f1183ca12b. The merge-tree preview onto current main is clean; among this PR's touched paths, the only intervening main change is docs/dev/ENVIRONMENT.md. Please sync to current main and rerun required checks. The PR reports the focused validation-layer tests passing, but hosted product jobs are path-skipped and I did not independently run the AGC GPU suite.
|
@MarcZX10 right, the overlap rule asks for the order in @Sam-mon7 here's a concrete proposal: #11157 first.
#ifdef _WIN32
command = "\"" + command + "\"";
#endifThe If you'd rather have #11435 land first, that's fine with me too. Then #11157 records |
|
Thanks for the --repeat option. Two things:
|
The first replay pass compiles every shader and pipeline the frames use, so its frame times mostly measure compilation. agc_frame_replay --repeat <n> replays the frames n times: before each later pass it waits for the driver to go idle, clears the captured ranges, restores the snapshot, registers the video outputs the snapshot had again and makes the EOP flip reservations that were pending at the snapshot again (a token still reserved from the previous pass is kept). Frame times come from passes 2 to n, each pass is listed under passes, and agc_driver_frame_replay also replays its capture with --repeat 3. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n minutes The drain gave up after 10 s without a completion even while the driver was still compiling or preparing the work, which reported unfinished submissions on full titles and left a process that could not exit. A blocked wait on one queue does not mean the replay is stuck either: another queue can still be preparing the work that releases it. The drain now gives up only after ten minutes without a completion and reports the waits the queues are blocked on every ten seconds and when it gives up. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lready applied A replay's device has no window, so it never loaded the title's Vulkan pipeline cache file and compiled every pipeline the captured frames used again, minutes for the first Demon's Souls frames. It also replayed the pipeline journal in the background during the measured frames, which the title did at boot. APS5_HEADLESS_PIPELINE_CACHE makes a device without a window load the file, and agc_frame_replay sets it unless --cold-pipelines is given. The driver exports AgcDriverWaitForPipelineJournal, and the replay calls it after the registrations and reports the wait as journal_s. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…g, reservation errors --cold-pipelines now clears an inherited APS5_HEADLESS_PIPELINE_CACHE on both platforms, the replay test builds its command with boykopovar#11157's quoting so the redirect and --repeat work under sh and cmd, and a reservation that fails in a repeated pass is reported and fails the replay instead of being dropped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
a6066b0 to
5584210
Compare
|
Rebased onto
Tested on Windows 11 Pro 10.0.26200, WinLibs GCC 15.2.0, Release, NVIDIA GeForce RTX 4070 (driver 610.88), with @MarcZX10 @oneandonlydean, could you take another look? AI-assisted: yes (Claude Code) |
|
@Sam-mon7 #12318 (mine, a fix to how Proposed order: #11435, then #11436, then #12318. I'll declare AI-assisted: yes (Claude Code) |
|
@Tehshortbus yes, that order works: #11435, then #11436, then #12318 with AI-assisted: yes (Claude Code) |
|
@oneandonlydean the Linux run you asked for:
So the new replay lambda and the AI-assisted: yes (Claude Code) |
|
RADV run of the stack on Linux hardware (native, not WSL), adding to the Linux run above:
|
jotitadev
left a comment
There was a problem hiding this comment.
A GPU run for the NVIDIA report's one new ID (VUID-VkDeviceCreateInfo-pNext-pNext in agc_driver_frame_replay_concurrent), which the last review left unverified. It comes from the bot's old validation layer, not from this PR.
- The message names
VkStructureType 1000574000(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_8_FEATURES_KHR) and says "version 275 of the Vulkan header". So the bot runs Vulkan-ValidationLayers 1.3.275, Ubuntu 24.04's package. - The same report lists this ID under "already present on main" for 428 tests. It only counts as new here because, on
main,agc_driver_frame_replay_concurrentlogs no message at all.
Runs: 9392228b5c merged onto main 16345cad6a, RTX 3070 on 595.99.02 (the bot's driver). Ubuntu 26.04, GCC 15.2, Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON, ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1, -j1.
agc_driver_frame_replay_concurrent |
Result | Validation messages |
|---|---|---|
main, VVL 1.3.275 (the Ubuntu 24.04 .deb) |
pass 2/2, 0.04 s | none |
| PR, VVL 1.3.275 | pass 2/2, 1.0–1.3 s | 1 pNext-pNext per run (unknown VkStructureType (1000574000)), same as the bot |
| PR, VVL 1.4.341 | pass 3/3 | none |
| PR, lavapipe (Mesa 26.0.3), VVL 1.4.341 | pass | none |
#11436, #12567, #12568 and #12696 carry this PR's commits and got the same single ID in their NVIDIA reports, so the same applies to them.
GPUs tested: NVIDIA RTX 3070 (595.99.02), lavapipe (Mesa 26.0.3).
Written with AI assistance (Claude Code). I ran the builds and tests above on my machine.
|
A Linux data point for the
So the shutdown-before- |
|
@Sam-mon7, @oneandonlydean said on #12567 (29 Oct, 30 Oct) that the default-output point would be taken up here, so I'm raising it in case it hasn't reached you. As I read the 30 Oct note, My AI-assisted: yes (Claude Code) |
# Conflicts: # core/libs/prx/libSceAgcDriver/CMakeLists.txt
|
The typed reservation handling and preserved platform quoting address the earlier source asks, thanks. One outstanding output-contract point was explicitly deferred here in the replies on The Windows error-exit issue is already isolated in |
|
Independent Linux title-capture validation on AMD Radeon RX 6650 XT (RADV/Mesa 26.2.6). This directly reproduces the ten-second drain limit described here. Exact comparison: clean main The private capture comes from Bugsnax PPSA01503 v02.000.000, the rainy cave entrance at 3840×2160: one complete frame, 1,226 in-frame calls and 1,872,682 prologue calls. Both tools replay the exact same immutable capture with
All three reference/replay BMP pairs are byte-identical, independently checked with SHA-256, and the reference/replay cave images were visually reviewed. Main exits with serials A separate Focused gate on the same main/change sources: Limitations: only this frame/scene is qualified. The capture header warns about approximately 64 MiB of host-only multisample contents omitted from the snapshot; this particular frame still matches exactly, which does not waive that warning for other captures. No tutorial/bridge, full-game, PS5-equivalence, or audio claim. Commands, full logs, JUnit, source/binary provenance, image hashes and reviewed previews, SHA-256 |
❌ NVIDIA GPU test: failedPR head
New validation errorsThis PR changes test files, so each test below was also run on main with only the PR's test changes applied; 0 there means the PR's other changes cause the error.
agc_driver_frame_replay_concurrent: new validation messagesUnstable on main (1, these also failed in recent main runs on this machine; not counted against this PR)Failing on main too (3, not counted against this PR)Validated but not compared (4, not in the main baseline's validation pass)Validation IDs already present on main (5 IDs in 484 tests)Skipped (45)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. |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…iagnostics behind --diagnostics The JSON line and the progress and drain messages print what they printed before this PR unless --diagnostics is given. With it the JSON line adds passes, kept_reservations and journal_s, the progress messages and the drain give-up message add the waits the queues are blocked on, and the drain reports the pending submissions every 10 s without a completion. agc_driver_frame_replay checks that a plain replay prints none of the three fields and that --repeat 3 --diagnostics lists three passes and takes its frame count from passes 2 and 3. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Synced with
Tested is updated. AI-assisted: yes (Claude Code) |
|
@Sam-mon7 The This commit makes them skip there, and is the change from Tested on Windows with an RTX 3080 at AI-assisted: yes (Claude Code) |
❌ NVIDIA GPU test: failedPR head
New validation errorsThis PR changes test files, so each test below was also run on main with only the PR's test changes applied; 0 there means the PR's other changes cause the error.
agc_driver_frame_replay_concurrent: new validation messagesUnstable on main (3, these also failed in recent main runs on this machine; not counted against this PR)Failing on main too (3, not counted against this PR)Validated but not compared (2, not in the main baseline's validation pass)Validation IDs already present on main (5 IDs in 484 tests)Skipped (45)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. |
|
@Sam-mon7 @oneandonlydean This PR now conflicts with It fast-forwards this PR's branch, with no rebase or force-push. Anyone with push access to the branch can take it:
AI-assisted: yes (Claude Code) |
✅ AMD 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 (6, not counted against this PR)Validation IDs already present on main (8 IDs in 551 tests)Skipped (60)ReproduceAutomated build and test on a contributor's AMD machine; it does not replace upstream CI. A new comment is posted for each new push. Full logs. |
✅ NVIDIA GPU test: passedPR head
Unstable on main (3, these also failed in recent main runs on this machine; not counted against this PR)Failing on main too (3, not counted against this PR)Validation IDs already present on main (13 IDs in 551 tests)Skipped (49)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. |
What
Follow-up to #8740. Replaying captures of a full title (Demon's Souls) hit three problems the small test captures do not:
--repeat <n>). The first pass compiles every shader and pipeline the frames use, so its frame times mostly measure compilation. With--repeat, before each later pass the replay waits for the driver to go idle, clears the captured ranges, restores the snapshot, registers the snapshot's video outputs again and re-makes the EOP flip reservations that were pending at the snapshot (a token still reserved from the previous pass is kept; any other reservation failure fails the replay). Frame times come from passes 2 to n.agc_driver_frame_replaynow also replays its capture with--repeat 3 --diagnostics.APS5_HEADLESS_PIPELINE_CACHEmakes a windowless device load the cache file;agc_frame_replaysets it unless--cold-pipelinesis given, which also clears an inherited value. The driver exportsAgcDriverWaitForPipelineJournal; the replay calls it after the registrations.The JSON line and the progress and drain messages keep the fields they have on
main.--diagnosticsadds each pass (passes), the tokens kept from the previous pass (kept_reservations) and the journal wait (journal_s) to the JSON line, the waits the queues are blocked on to the progress messages and to the drain's give-up message, and a drain message every 10 s without a completion.No rendering change outside the replay tool; the driver additions are the export and the headless cache switch.
Order with other pull requests
agc_frame_replayexits with an error) goes first. Without it,agc_driver_frame_replay_reservation_error, added here, can hang at exit on Windows (reported on an RX 6700 XT). It merges cleanly with this head and is listed under Depends on. This PR does not duplicate its change.BUILD.mdsentence (the one listing the frame replay tests). I proposed docs: bring BUILD, CONTRIBUTING and AGENTS in line with the build and workflows #11455 first on 29 Oct; waiting for its author.Tested
Windows 11 Pro 10.0.26200, WinLibs GCC 15.2.0, Release, NVIDIA GeForce RTX 4070 (driver 610.88), Vulkan SDK 1.4.363 validation layer. Synced with
main0d5e03be8c(mergec10ff3e4cb).ctest -R '^agc_(frame_capture|driver_frame_capture_eop|driver_frame_replay)' -V -j2withANYPS5_REQUIRE_VULKAN=1,ANYPS5_NO_SHADER_CACHE=1andVK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation:main0d5e03be8c: 11/11 pass, 0VUID-lines.20ccbe17c8: 15/15 pass, including the new tests, 0VUID-lines in the ctest output and in the six replay subprocess logs. No missing-layer message.vkCreateInstancewrote the layer's "Current Validation Enabled" message, and seven test logs showSelected GPU name=NVIDIA GeForce RTX 4070. Onmainthese tests create no Vulkan instance, so a validation ID can only show up on the PR side. The NVIDIA report'sVUID-VkDeviceCreateInfo-pNext-pNextinagc_driver_frame_replay_concurrentcomes from validation layer 1.3.275 not knowing the Maintenance8 structure thatmainalready chains (attributed in jotitadev's review); it does not appear with 1.4.341 or 1.4.363.a110d7694a(which contains this head) with fix(agc): shut the driver down before frame replay exits with an error #14100659a6eecb4merged in locally: 18/18 pass, 0VUID-lines;reservation_errorreports the incompatible reservation and exits.main2227f13661: 17/17. Native Linux by reviewers: RX 7900 GRE, RADV, 20/20 on feat(agc): list a capture's shaders and submissions and trace replay serials #11436210bd86b58(janzezno); RX 6650 XT, RADV, 17/17 on68c782957f, plus a Bugsnax capture that replays to completion with byte-identical display buffers wheremainexits with an unfinished submission (JJenkx).main, these changes let a 6-frame Nexus capture replay completely (6/6 frames, 0 unfinished submissions; about 6.5 s per warm frame), where the replay previously looked stuck at an early serial while it recompiled every pipeline.tools/check_conventions.py,tools/check_main_sync.pyandgit diff --checkpass againstmain0d5e03be8c.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)🤖 Generated with Claude Code