Skip to content

perf(agc): join a buffer bound from inside a range larger than the import window into the small ranges after it - #15658

Open
mrfelek wants to merge 1 commit into
boykopovar:mainfrom
mrfelek:perf/agc-join-from-large-range
Open

mrfelek wants to merge 1 commit into
boykopovar:mainfrom
mrfelek:perf/agc-join-from-large-range

Conversation

@mrfelek

@mrfelek mrfelek commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

What

A buffer bound from inside a registered range that is larger than the import window, running into the ranges after it, had no import:

  • importRunBounds returns the containing range alone, because it is larger than the window, so runCovers fails at its end and importAccess returns before importAllocation.
  • joinedRun (the importJoined pre-pass in UploadFinish) joins only when every range in the run is larger than the window, or when the binding starts at the run's base.

So such a buffer was copied on the CPU on every bind, and the copy waited for any GPU work pending over it.

joinedRun now also returns the run when its first range is larger than the window and the ranges after it are, together, no larger than the window. The part a join adds beyond the large range stays within one window. The host-imports entry in docs/dev/debt/libSceAgcDriver.md gains one clause for this case.

PPSA22408 (Hot Wheels Infinite Rush) hits this every frame in its garage menu. A dispatch's build reads a 648,000-byte buffer that starts inside a 12 MiB range and ends 123 to 189 KiB into the 2 MiB range after it (same flags, no gap), while GPU work is pending over it. The CPU copy in GuestBufferMemory::copyRegion, under UploadFinish, waited about 16 ms per frame in a pending-write sync.

Overlap: #5372 changes the same line of joinedRun (run.bytes <= window). The two conditions are disjoint: #5372's holds only when the whole run fits the window, this one only when the first range alone is larger than it. #5372 also adds a cap in importJoined that refuses a widened run larger than the window unless the old rule gave the same run from its first range's start, and that cap would refuse this case. If #5372 lands first, I'll rebase this and exempt the case from the cap. No other open PR changes joinedRun (#6197, #6918, #7457 and #10442 touch the import code around it).

Tested

Unit test (agc_driver_graphics, BdaResources.cpp, next to importJoinTests): 128 KiB window, a 192 KiB range followed by 64 KiB ranges.

  • A 32-byte bind from 16 bytes before the end of the large range into the next range must be one import over both ranges (base at the large range, 256 KiB), with nothing copied, and a second bind must reuse it.
  • The same bind across more than a window of small ranges must stay copied, with no import over it.
  • Negative control: with only the new joinedRun line removed, the suite fails at a buffer bound from inside a range larger than the import window into the small range after it was not imported over both.

Focused suites: agc_driver_graphics, agc_driver_recorder and agc_driver_host_import_{at_map,proofs,teardown,windows}, on main 1c8c0efc8c and on this head, both GPUs below.

  • With VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation, ANYPS5_REQUIRE_VULKAN=1 and ANYPS5_NO_SHADER_CACHE=1: 6 of 6 pass on each side, no VUID- messages on either side, no missing-layer line.
  • Plain runs: 3 of 3 for each suite on each side.
  • tools/check_conventions.py --base origin/main passes.

PPSA22408 garage menu: Linux 7.3, Ryzen 9 5950X, RTX 3080 Ti (NVIDIA 615.71.09), 3840x2160, the game's default settings, the same input route into the garage each run.

A B
presents per second 6.70 / 6.63 7.55 / 7.52 +13 %
frame p50 149.6 / 150.9 ms 132.5 / 133.0 ms
GPU busy per present 86.5 / 87.4 ms 85.6 / 86.3 ms
  • Trace runs: one per tree, APS5_TRACE_SECONDS=150:10 APS5_TRACE_EVENTS=2097152, no other APS5_TRACE_* / APS5_PROFILE_*. The game's output went to a file (headless run).

Traces: A · B

Summary lines (aps5-summary.jsonl)
{"commit":"a14e47188381","dirty":false,"env":{"APS5_HOST_IMPORT_MIB":"16384","APS5_PAD_INPUT_FILE":"<path>","APS5_STAGING_POOL_MIB":"768","APS5_TRACE_EVENTS":"2097152","APS5_TRACE_SECONDS":"150:10","APS5_UNIT_SHADOW_MIB":"512"},"gpu":"NVIDIA GeForce RTX 3080 Ti","driver":"NVIDIA 615.71.09","os":"Linux 7.3.0-10-generic","cpu":"AMD Ryzen 9 5950X 16-Core Processor","cpu_threads":32,"memory_mib":32003,"title_id":"PPSA22408","title":"HOT WHEELS™️ Infinite Rush","content_version":"01.000.000","resolution":"3840x2160","window":{"spec":"seconds 150:10","first_present":3277,"ms":10052.912},"presents":68,"frame_ms":{"p50":148.113,"p90":153.721,"p99":158.861,"max":158.861},"gpu_busy_ms_per_present":86.475,"worker_busy_pct":{"queue worker 0x0":85.813,"queue worker 0x20":99.333},"top_phases_ms_per_frame":{"Driver.Packet":273.652,"Driver.Packet.memory_wait":139.167,"Driver.Packet.dispatch":78.634,"Driver.Dispatch":77.597,"Vulkan.Dispatch":56.027,"Vulkan.Dispatch.shader_resources":51.354,"Resources.Complete":43.033,"Graphics.Draw":28.389},"trace_dropped":false,"trace":"aps5-trace-a14e47188381-886846.json.gz"}
{"commit":"d8ccb992ace6","dirty":false,"env":{"APS5_HOST_IMPORT_MIB":"16384","APS5_PAD_INPUT_FILE":"<path>","APS5_STAGING_POOL_MIB":"768","APS5_TRACE_EVENTS":"2097152","APS5_TRACE_SECONDS":"150:10","APS5_UNIT_SHADOW_MIB":"512"},"gpu":"NVIDIA GeForce RTX 3080 Ti","driver":"NVIDIA 615.71.09","os":"Linux 7.3.0-10-generic","cpu":"AMD Ryzen 9 5950X 16-Core Processor","cpu_threads":32,"memory_mib":32003,"title_id":"PPSA22408","title":"HOT WHEELS™️ Infinite Rush","content_version":"01.000.000","resolution":"3840x2160","window":{"spec":"seconds 150:10","first_present":3335,"ms":10030.690},"presents":77,"frame_ms":{"p50":130.724,"p90":134.807,"p99":141.593,"max":141.593},"gpu_busy_ms_per_present":85.052,"worker_busy_pct":{"queue worker 0x0":83.832,"queue worker 0x20":99.429},"top_phases_ms_per_frame":{"Driver.Packet":238.669,"Driver.Packet.memory_wait":122.670,"Driver.Packet.dispatch":44.233,"Driver.Dispatch":43.236,"Driver.Packet.pipeline_drain":41.314,"Graphics.Draw":27.302,"Vulkan.Dispatch":23.331,"Graphics.Draw.draw_and_resource_release":23.253},"trace_dropped":false,"trace":"aps5-trace-d8ccb992ace6-893942.json.gz"}
trace_digest.py
**seconds 150:10** from present 3277: 68 presents, frame p50 148.1 / p90 153.7 / p99 158.9 / max 158.9 ms, GPU busy 86.5 ms per present
NVIDIA GeForce RTX 3080 Ti, NVIDIA 615.71.09, Linux 7.3.0-10-generic, 3840x2160, commit a14e47188381, dropped: no

```json
{"commit":"a14e47188381","dirty":false,"env":{"APS5_HOST_IMPORT_MIB":"16384","APS5_PAD_INPUT_FILE":"<path>","APS5_STAGING_POOL_MIB":"768","APS5_TRACE_EVENTS":"2097152","APS5_TRACE_SECONDS":"150:10","APS5_UNIT_SHADOW_MIB":"512"},"gpu":"NVIDIA GeForce RTX 3080 Ti","driver":"NVIDIA 615.71.09","os":"Linux 7.3.0-10-generic","cpu":"AMD Ryzen 9 5950X 16-Core Processor","cpu_threads":32,"memory_mib":32003,"title_id":"PPSA22408","title":"HOT WHEELS\u2122\ufe0f Infinite Rush","content_version":"01.000.000","resolution":"3840x2160","window":{"spec":"seconds 150:10","first_present":3277,"ms":10052.912},"presents":68,"frame_ms":{"p50":148.113,"p90":153.721,"p99":158.861,"max":158.861},"gpu_busy_ms_per_present":86.475,"worker_busy_pct":{"queue worker 0x0":85.813,"queue worker 0x20":99.333},"top_phases_ms_per_frame":{"Driver.Packet":273.652,"Driver.Packet.memory_wait":139.167,"Driver.Packet.dispatch":78.634,"Driver.Dispatch":77.597,"Vulkan.Dispatch":56.027,"Vulkan.Dispatch.shader_resources":51.354,"Resources.Complete":43.033,"Graphics.Draw":28.389},"trace_dropped":false,"trace":"aps5-trace-a14e47188381-886846.json.gz"}
```

**Slowest frames** (largest slices inside each, inclusive)

- present 3308: 158.9 ms at 4569 ms: Driver.Packet (queue worker 0x20) 158.3, Driver.Packet.memory_wait (queue worker 0x20) 144.2, Driver.Packet (queue worker 0x0) 132.1, batch (gpu) 88.3
- present 3323: 156.2 ms at 6795 ms: Driver.Packet (queue worker 0x20) 155.8, Driver.Packet.memory_wait (queue worker 0x20) 141.1, Driver.Packet (queue worker 0x0) 128.9, batch (gpu) 85.9
- present 3332: 154.6 ms at 8131 ms: Driver.Packet (queue worker 0x20) 154.1, Driver.Packet.memory_wait (queue worker 0x20) 140.0, Driver.Packet (queue worker 0x0) 125.7, batch (gpu) 87.3
- present 3338: 154.5 ms at 9017 ms: Driver.Packet (queue worker 0x20) 154.0, Driver.Packet.memory_wait (queue worker 0x20) 139.9, Driver.Packet (queue worker 0x0) 126.2, batch (gpu) 88.5
- present 3286: 154.1 ms at 1327 ms: Driver.Packet (queue worker 0x20) 153.7, Driver.Packet.memory_wait (queue worker 0x20) 142.9, Driver.Packet (queue worker 0x0) 126.5, batch (gpu) 89.1

**Persistent spikes** (frame time above the fastest frame that separates it from a longer frame; one entry per stall, not per frame)

- present 3308: 158.9 ms at 4569 ms, persistence 21.4 ms
- present 3279: 153.9 ms at 293 ms, persistence 16.4 ms
- present 3286: 154.1 ms at 1327 ms, persistence 15.0 ms
- present 3323: 156.2 ms at 6795 ms, persistence 14.4 ms
- present 3338: 154.5 ms at 9017 ms, persistence 14.1 ms
- present 3293: 153.6 ms at 2358 ms, persistence 12.9 ms
- present 3332: 154.6 ms at 8131 ms, persistence 12.7 ms
- present 3301: 153.6 ms at 3534 ms, persistence 11.6 ms
- present 3316: 153.6 ms at 5761 ms, persistence 11.6 ms
- present 3305: 153.1 ms at 4124 ms, persistence 10.4 ms

**Threads** (ms per frame)

| thread | busy | wait | untraced | in slices < 20 us | largest |
|---|---|---|---|---|---|
| queue worker 0x0 | 112.9 (76 %) | 7.6 (5 %) | 27.3 | 38.2 | Driver.Packet 120.6, Recorder.Submit 0.0 |
| draw committer | 25.9 (18 %) | 0.6 (0 %) | 121.3 | 3.4 | Graphics.Draw 24.9, Recorder.Sync 0.8 |
| queue worker 0x20 | 4.8 (3 %) | 142.0 (96 %) | 1.1 | 2.9 | Driver.Packet 146.4, Driver.EndSubmission 0.0 |
| presenter | 0.5 (0 %) | 0.0 (0 %) | 147.3 | 0.1 | VideoOut.Flip 0.5, Driver.Present 0.0 |
| gpu | 86.4 (58 %) | 0.0 (0 %) | 61.4 | 0.0 | batch 86.4 |

**Largest slices** (ms per frame, inclusive, all threads): Driver.Packet 267.0, Driver.Packet.memory_wait 139.2, batch 86.4, Driver.Packet.dispatch 78.4, Driver.Dispatch 77.4, Vulkan.Dispatch 54.8, Vulkan.Dispatch.shader_resources 49.2, Resources.Complete 42.2, Graphics.Draw 27.7, Recorder.Sync 25.1

**Longest waits**

- Driver.Packet.memory_wait (queue worker 0x20) 74.5 ms at 7924 ms, present 3330
- Driver.Packet.memory_wait (queue worker 0x20) 72.8 ms at 1426 ms, present 3286
- Driver.Packet.memory_wait (queue worker 0x20) 72.6 ms at 9417 ms, present 3340
- Driver.Packet.memory_wait (queue worker 0x20) 72.5 ms at 7780 ms, present 3329
- Driver.Packet.memory_wait (queue worker 0x20) 72.5 ms at 2742 ms, present 3295
- Driver.Packet.memory_wait (queue worker 0x20) 71.7 ms at 3038 ms, present 3297
- Driver.Packet.memory_wait (queue worker 0x20) 71.7 ms at 4668 ms, present 3308
- Driver.Packet.memory_wait (queue worker 0x20) 71.3 ms at 2599 ms, present 3294
- Driver.Packet.memory_wait (queue worker 0x20) 71.2 ms at 90 ms, present 3277
- Driver.Packet.memory_wait (queue worker 0x20) 71.2 ms at 234 ms, present 3278

**Largest GPU batches** (GPU ranges inside, and the CPU slices that recorded each, inclusive)

- batch 105: 20.0 ms at 174 ms, present 3278: GPU no ranges; recorded by Graphics.Draw (draw committer) 1.9, Graphics.Draw.draw_and_resource_release (draw committer) 1.7
- batch 2406: 19.9 ms at 4162 ms, present 3305: GPU no ranges; recorded by Graphics.Draw (draw committer) 1.8, Graphics.Draw.draw_and_resource_release (draw committer) 1.6, Recorder.Reap (draw committer) 0.0
- batch 2754: 19.8 ms at 4766 ms, present 3309: GPU no ranges; recorded by Graphics.Draw (draw committer) 2.1, Graphics.Draw.draw_and_resource_release (draw committer) 1.8, GpuMutex.wait.label (draw committer) 0.0, Recorder.Reap (draw committer) 0.0
- batch 1139: 19.8 ms at 1950 ms, present 3290: GPU no ranges; recorded by Graphics.Draw (draw committer) 2.2, Graphics.Draw.draw_and_resource_release (draw committer) 2.0, Recorder.Submit (draw committer) 0.0, Recorder.Reap (draw committer) 0.0
- batch 2156: 19.3 ms at 3717 ms, present 3302: GPU no ranges; recorded by Driver.Packet (queue worker 0x0) 0.3, Driver.Packet.dispatch (queue worker 0x0) 0.3, Driver.Dispatch (queue worker 0x0) 0.2, Vulkan.Dispatch (queue worker 0x0) 0.1
**seconds 150:10** from present 3335: 77 presents, frame p50 130.7 / p90 134.8 / p99 141.6 / max 141.6 ms, GPU busy 85.1 ms per present
NVIDIA GeForce RTX 3080 Ti, NVIDIA 615.71.09, Linux 7.3.0-10-generic, 3840x2160, commit d8ccb992ace6, dropped: no

```json
{"commit":"d8ccb992ace6","dirty":false,"env":{"APS5_HOST_IMPORT_MIB":"16384","APS5_PAD_INPUT_FILE":"<path>","APS5_STAGING_POOL_MIB":"768","APS5_TRACE_EVENTS":"2097152","APS5_TRACE_SECONDS":"150:10","APS5_UNIT_SHADOW_MIB":"512"},"gpu":"NVIDIA GeForce RTX 3080 Ti","driver":"NVIDIA 615.71.09","os":"Linux 7.3.0-10-generic","cpu":"AMD Ryzen 9 5950X 16-Core Processor","cpu_threads":32,"memory_mib":32003,"title_id":"PPSA22408","title":"HOT WHEELS\u2122\ufe0f Infinite Rush","content_version":"01.000.000","resolution":"3840x2160","window":{"spec":"seconds 150:10","first_present":3335,"ms":10030.69},"presents":77,"frame_ms":{"p50":130.724,"p90":134.807,"p99":141.593,"max":141.593},"gpu_busy_ms_per_present":85.052,"worker_busy_pct":{"queue worker 0x0":83.832,"queue worker 0x20":99.429},"top_phases_ms_per_frame":{"Driver.Packet":238.669,"Driver.Packet.memory_wait":122.67,"Driver.Packet.dispatch":44.233,"Driver.Dispatch":43.236,"Driver.Packet.pipeline_drain":41.314,"Graphics.Draw":27.302,"Vulkan.Dispatch":23.331,"Graphics.Draw.draw_and_resource_release":23.253},"trace_dropped":false,"trace":"aps5-trace-d8ccb992ace6-893942.json.gz"}
```

**Slowest frames** (largest slices inside each, inclusive)

- present 3347: 141.6 ms at 1561 ms: Driver.Packet (queue worker 0x20) 141.1, Driver.Packet.memory_wait (queue worker 0x20) 130.1, Driver.Packet (queue worker 0x0) 110.3, batch (gpu) 87.8
- present 3390: 141.3 ms at 7159 ms: Driver.Packet (queue worker 0x20) 140.9, Driver.Packet.memory_wait (queue worker 0x20) 125.9, Driver.Packet (queue worker 0x0) 114.0, batch (gpu) 85.3
- present 3378: 136.2 ms at 5598 ms: Driver.Packet (queue worker 0x20) 135.6, Driver.Packet.memory_wait (queue worker 0x20) 124.0, Driver.Packet (queue worker 0x0) 108.3, batch (gpu) 87.5
- present 3372: 135.8 ms at 4830 ms: Driver.Packet (queue worker 0x20) 135.3, Driver.Packet.memory_wait (queue worker 0x20) 119.3, Driver.Packet (queue worker 0x0) 108.3, batch (gpu) 84.9
- present 3355: 135.7 ms at 2606 ms: Driver.Packet (queue worker 0x20) 135.2, Driver.Packet.memory_wait (queue worker 0x20) 124.1, Driver.Packet (queue worker 0x0) 108.3, batch (gpu) 86.1

**Persistent spikes** (frame time above the fastest frame that separates it from a longer frame; one entry per stall, not per frame)

- present 3347: 141.6 ms at 1561 ms, persistence 19.2 ms
- present 3390: 141.3 ms at 7159 ms, persistence 18.9 ms
- present 3378: 136.2 ms at 5598 ms, persistence 13.6 ms
- present 3372: 135.8 ms at 4830 ms, persistence 13.3 ms
- present 3355: 135.7 ms at 2606 ms, persistence 13.2 ms
- present 3337: 134.8 ms at 268 ms, persistence 11.8 ms
- present 3405: 134.2 ms at 9116 ms, persistence 10.6 ms
- present 3341: 132.5 ms at 789 ms, persistence 9.2 ms
- present 3384: 134.4 ms at 6376 ms, persistence 9.1 ms
- present 3374: 132.1 ms at 5089 ms, persistence 9.1 ms

**Threads** (ms per frame)

| thread | busy | wait | untraced | in slices < 20 us | largest |
|---|---|---|---|---|---|
| queue worker 0x0 | 98.7 (76 %) | 4.2 (3 %) | 27.4 | 38.5 | Driver.Packet 102.8, Recorder.Submit 0.0 |
| draw committer | 31.6 (24 %) | 0.5 (0 %) | 98.2 | 3.3 | Graphics.Draw 23.8, Recorder.Sync 7.5 |
| queue worker 0x20 | 4.5 (3 %) | 124.6 (96 %) | 1.1 | 2.9 | Driver.Packet 129.1, Driver.EndSubmission 0.0 |
| presenter | 0.5 (0 %) | 0.0 (0 %) | 129.7 | 0.1 | VideoOut.Flip 0.5, Driver.Present 0.0 |
| gpu | 85.1 (65 %) | 0.0 (0 %) | 45.2 | 0.0 | batch 85.1 |

**Largest slices** (ms per frame, inclusive, all threads): Driver.Packet 231.9, Driver.Packet.memory_wait 122.7, batch 85.1, Driver.Packet.dispatch 44.0, Driver.Dispatch 43.0, Driver.Packet.pipeline_drain 40.0, Graphics.Draw 26.6, Graphics.Draw.draw_and_resource_release 22.4, Vulkan.Dispatch 22.2, Driver.Packet.draw 20.6

**Longest waits**

- Driver.Packet.memory_wait (queue worker 0x20) 55.3 ms at 628 ms, present 3339
- Driver.Packet.memory_wait (queue worker 0x20) 54.5 ms at 7194 ms, present 3390
- Driver.Packet.memory_wait (queue worker 0x20) 54.1 ms at 7123 ms, present 3389
- Driver.Packet.memory_wait (queue worker 0x20) 53.7 ms at 3480 ms, present 3361
- Driver.Packet.memory_wait (queue worker 0x20) 53.7 ms at 5958 ms, present 3380
- Driver.Packet.memory_wait (queue worker 0x20) 53.6 ms at 1797 ms, present 3348
- Driver.Packet.memory_wait (queue worker 0x20) 53.2 ms at 1148 ms, present 3343
- Driver.Packet.memory_wait (queue worker 0x20) 53.2 ms at 1596 ms, present 3347
- Driver.Packet.memory_wait (queue worker 0x20) 52.6 ms at 1401 ms, present 3345
- Driver.Packet.memory_wait (queue worker 0x20) 52.6 ms at 754 ms, present 3340

**Largest GPU batches** (GPU ranges inside, and the CPU slices that recorded each, inclusive)

- batch 5836: 20.3 ms at 9284 ms, present 3406: GPU no ranges; recorded by Driver.Packet (queue worker 0x0) 0.7, Driver.Packet.dispatch (queue worker 0x0) 0.7, Driver.Dispatch (queue worker 0x0) 0.6, Vulkan.Dispatch (queue worker 0x0) 0.2
- batch 989: 20.3 ms at 1601 ms, present 3347: GPU no ranges; recorded by Driver.Packet (queue worker 0x0) 0.5, Driver.Packet.dispatch (queue worker 0x0) 0.4, Driver.Dispatch (queue worker 0x0) 0.4, Vulkan.Dispatch (queue worker 0x0) 0.2
- batch 2694: 19.9 ms at 4342 ms, present 3368: GPU no ranges; recorded by Graphics.Draw (draw committer) 1.9, Graphics.Draw.draw_and_resource_release (draw committer) 1.6, Graphics.Draw.index_upload (draw committer) 0.0, Recorder.Submit (draw committer) 0.0
- batch 2135: 19.8 ms at 3420 ms, present 3361: GPU no ranges; recorded by Graphics.Draw (draw committer) 1.6, Graphics.Draw.draw_and_resource_release (draw committer) 1.4
- batch 1315: 19.7 ms at 2124 ms, present 3351: GPU no ranges; recorded by Graphics.Draw (draw committer) 1.3, Graphics.Draw.draw_and_resource_release (draw committer) 1.1, GpuMutex.wait.label (draw committer) 0.0

Checklist

  • Based on current main; no other open PR implements the same functions
  • One topic per PR; follow-ups go in a new PR
  • No comments in code except technical debt
  • Unimplemented paths throw (NotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file
  • No notes, investigation .md files or images added to the repository (attach them to this PR)
  • New third-party code is a submodule built from source
  • Generic behaviour, not specific to one title
  • Depends on: none
  • Fixes: none
  • Unblocks: none
  • GPUs tested: NVIDIA RTX 3080 Ti, driver 615.71.09, Ubuntu 26.10 (Linux 7.3); AMD Radeon 780M, RADV Mesa 26.0.8, Ubuntu 26.04.1 (Linux 7.0)
  • AI-assisted: yes

AI-assisted.

…port window into the small ranges after it

A buffer bound from inside a range larger than the import window, over
the ranges that follow it, is joined into one import when those ranges
together are no larger than the window. Before, such a buffer was copied
on the CPU on every bind, and the copy waited for any GPU work pending
over the region.
@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head 4f2160e merged onto main 1c8c0ef · tested 2026-11-04 01:19 UTC · 25 min

GPU NVIDIA RTX 2000 Ada Generation, driver 595.99.02, Vulkan 1.4.329
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-38-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ✅ 2,710 passed · 5 failed (0 new, 3 also fail on main, 2 unstable on main) · 50 skipped (ANYPS5_REQUIRE_VULKAN=1)
Test setup CPU-only tests without a GPU; GPU tests (and any CPU-only test that failed or skipped without one) once on the GPU with VK_LAYER_KHRONOS_validation and ANYPS5_NO_SHADER_CACHE=1; main ran the same way
Test selection 2,765 of 3,842 tests run: the ones this change can reach, chosen by tools/select_tests.py from main's build graph
Vulkan validation ✅ no new validation IDs vs main (944 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.1 s
Unstable on main (2, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_pipeline_journal: failed in 4 of the last 10 main runs
agc_submit_progress_no_timeline: failed in 4 of the last 10 main runs
Failing on main too (3, not counted against this PR)
agc_driver_image_table
guest_mmap_executable
guest_socket_options_multicast
Validation IDs already present on main (8 IDs in 531 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (531 tests): agc_driver, agc_driver_address_passes, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, agc_driver_bc_block_copy, agc_driver_bda_anchor_reads, agc_driver_bda_span_reads, and 523 more
VUID-vkCmdCopyImage-srcImage-01548 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-vkCmdCopyImage-srcImage-01551 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (1 test): agc_driver_srgb8_color_target
VUID-VkSamplerCreateInfo-addressModeU-01079 (1 test): agc_driver_image_gather_volume
VUID-VkSamplerCreateInfo-addressModeU-parameter (1 test): agc_driver_image_gather_volume
VUID-VkSamplerCreateInfo-addressModeV-parameter (1 test): agc_driver_image_gather_volume
VUID-VkSamplerCreateInfo-addressModeW-parameter (1 test): agc_driver_image_gather_volume
Skipped (50)
agc_driver_bda_reads_shadowed_results: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_bda_reads_shadowed_results_per_build: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_gcn_display_present: skipped, no display: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
agc_driver_sample_order_grid_reference: skipped, the device does not keep depth drawn at custom sample locations at those locations, even after a transition that names them: the composite of uniform renders holds the guest's depth in 0 of 3005 sloped samples, so no path can be compared with it bit for bit
agc_driver_scattered_runs: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_sparse_dma_buf_import: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_stencil_ref_export: skipped, the device lacks VK_EXT_shader_stencil_export
agc_driver_vertex_elected_atomic_max: skipped, the device runs vertex programs in subgroups, so they keep their cross-lane reductions
agc_host_import_sparse: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_import_settle_initial_dcc: skipped, the device has no deferred settle of host imports: imports under 1 MiB wait for one only on Windows
agc_unit_shadow_completion_store: skipped, the device reports watched host memory written when it imports or reads it
guest_http_uri_locale: 
guest_net_ctl: skipped, the host has no IPv4 address
guest_video_out_color_space: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_hdr: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_high_frame_rate: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_output_mode: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_resolution_status: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_wqhd_detection: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
video_out_flip_aftergpu: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_backtoback: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_controls: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip_in_order: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_dcc: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_deferred: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_eop: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
vide
Reproduce
git fetch origin 4f2160e7655c05ad00c6e6c9e5b59738cac0c3a0 1c8c0efc8c41314402e6966da5bef6ea3d639d10
git checkout 1c8c0efc8c41314402e6966da5bef6ea3d639d10 && git merge --no-ff 4f2160e7655c05ad00c6e6c9e5b59738cac0c3a0
git submodule update --init --recursive
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON -DANYPS5_ENABLE_SPIRV_TOOLS=ON
cmake --build build && cmake --build build --target libs
VK_DRIVER_FILES=/nonexistent/icd.json ctest --test-dir build -E '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 32 --output-on-failure
ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation \
  ctest --test-dir build -R '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 4 --output-on-failure
# failures are then re-run alone: --timeout 360 --parallel 2; new validation IDs: the test alone, twice, --parallel 1

Automated 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.

@oneandonlydean

Copy link
Copy Markdown
Collaborator

Hi mrfelek,

The large-first join regression passes with this head and fails at its new join assertion with main's production source. The supplied traces also corroborate the reduction in memory-wait time. To qualify the performance result for PPSA22408, could you provide:

  • Fetchable immutable refs for tested trees a14e47188381 and d8ccb992ace6, or the exact patches/parent trees that reconstruct them and show the second is the first plus 4f2160e7655c05ad00c6e6c9e5b59738cac0c3a0? The declared commit lookups currently return not found.
  • The matched warm-cache plain A/B summary records for the reported garage timings, with the same machine/session/scene/settings and the relevant environment recorded? The timing section currently lists APS5_PROFILE_GPU=1; please keep the instrumented traces separate from the throughput comparison.
  • Both trees sit on main plus fix(agc): run an indirect buffer as it is when execution reaches it #11346, which is not merged. Could you add one plain-main pair (current main, then main plus this PR), or say that the gain depends on fix(agc): run an indirect buffer as it is when execution reaches it #11346 and should land after it?

On #5372: thanks for planning the exemption if it lands first; nothing else is needed there now.

This is an evidence qualification request; no additional implementation change is identified by the source review.

@mrfelek

mrfelek commented Nov 4, 2026

Copy link
Copy Markdown
Contributor Author

@oneandonlydean thanks. Here are the three items.

1. Fetchable refs. These are tags on the fork:

2 and 3. A plain warm-cache A/B on current main, without #11346.

  • Trees: A is main acf7ac208a. B is A merged with 4f2160e765: perf-15658-plain-b → 495a55c32c, where git diff acf7ac208a 495a55c32c is this PR's three files.
  • Run setup: the garage scene with the same input route on every run, the game's default settings and 3840x2160. Each runtime had one warm-up run first that isn't counted, and then the runs alternated A B A B in one session.
  • Env: no APS5_PROFILE_* or APS5_TRACE_SECONDS; only APS5_TRACE_SUMMARY_EVERY=10 for the records. The env each run used is in its records below.
  • FPS: presents per second over the last 12 summary windows in the garage.
  • Errors: no exceptions in any run.
A run 1 B run 1 A run 2 B run 2
RTX 3080 Ti (NVIDIA 615.71.09), Ryzen 9 5950X, Linux 7.3 7.04 8.21 6.86 8.19 +18 %
Radeon 780M (RADV Mesa 26.0.8), Ryzen 9 PRO 8945HS, Linux 7.0 3.22 3.50 3.17 3.53 +10 %

The frame p50 goes from about 142 to 122 ms on the 3080 Ti and from about 313 to 284 ms on the 780M. GPU busy per present stays about the same (80.7 → 79.1 ms, and 220 → 215 ms).

So the gain doesn't depend on #11346. It holds on plain main on both GPUs.

Differences from a fully clean run:

  • libSceHttp2.prx: both runtimes use the same libSceHttp2.prx from an earlier build. That's the one the earlier runs used. It's the same file in A and B.
  • Other libraries on the 3080 Ti: the two trees there were built in separate directories, so the other libraries differ only in their embedded source paths. On the 780M, B is A's build with only libSceAgcDriver.prx rebuilt.
  • Frame dumps on the 780M: the input route on that machine finds the screens from frame dumps (APS5_DUMP_FRAMES=2000 APS5_DUMP_FRAMES_EVERY=20). They are on for both A and B.
  • The earlier figures: the instrumented runs and the traces in the PR body stay separate from these numbers.
Summary records, last window of each run: RTX 3080 Ti (A1, B1, A2, B2)
{"commit":"acf7ac208a0a","dirty":false,"env":{"APS5_HOST_IMPORT_MIB":"16384","APS5_PAD_INPUT_FILE":"<path>","APS5_STAGING_POOL_MIB":"768","APS5_TRACE_SUMMARY_EVERY":"10","APS5_UNIT_SHADOW_MIB":"512"},"gpu":"NVIDIA GeForce RTX 3080 Ti","driver":"NVIDIA 615.71.09","os":"Linux 7.3.0-10-generic","cpu":"AMD Ryzen 9 5950X 16-Core Processor","cpu_threads":32,"memory_mib":32003,"title_id":"PPSA22408","title":"HOT WHEELS™️ Infinite Rush","content_version":"01.000.000","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":3933,"ms":10011.362},"interval_start_s":242.252,"interval_end_s":252.263,"presents":71,"frame_ms":{"p50":141.163,"p90":144.089,"p99":160.925,"max":160.925},"gpu_busy_ms_per_present":80.535,"worker_busy_pct":{"queue worker 0x0":99.359,"queue worker 0x20":99.980},"top_phases_ms_per_frame":{"Driver.Packet":281.009,"Driver.Packet.memory_wait":134.136,"Driver.Packet.dispatch":74.628,"Driver.Dispatch":73.617,"Vulkan.Dispatch":52.781,"Vulkan.Dispatch.shader_resources":48.199,"Resources.Complete":40.150,"Driver.Packet.draw":38.257},"trace_dropped":false,"trace":""}
{"commit":"495a55c32cad","dirty":false,"env":{"APS5_HOST_IMPORT_MIB":"16384","APS5_PAD_INPUT_FILE":"<path>","APS5_STAGING_POOL_MIB":"768","APS5_TRACE_SUMMARY_EVERY":"10","APS5_UNIT_SHADOW_MIB":"512"},"gpu":"NVIDIA GeForce RTX 3080 Ti","driver":"NVIDIA 615.71.09","os":"Linux 7.3.0-10-generic","cpu":"AMD Ryzen 9 5950X 16-Core Processor","cpu_threads":32,"memory_mib":32003,"title_id":"PPSA22408","title":"HOT WHEELS™️ Infinite Rush","content_version":"01.000.000","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":4117,"ms":10104.406},"interval_start_s":242.170,"interval_end_s":252.275,"presents":83,"frame_ms":{"p50":122.216,"p90":125.305,"p99":129.864,"max":129.864},"gpu_busy_ms_per_present":79.167,"worker_busy_pct":{"queue worker 0x0":99.251,"queue worker 0x20":99.972},"top_phases_ms_per_frame":{"Driver.Packet":242.468,"Driver.Packet.memory_wait":114.916,"Driver.Packet.dispatch":41.978,"Driver.Dispatch":40.972,"Driver.Packet.draw":38.743,"Driver.Packet.pipeline_drain":38.675,"Driver.Draw":38.650,"Graphics.Draw":26.761},"trace_dropped":false,"trace":""}
{"commit":"acf7ac208a0a","dirty":false,"env":{"APS5_HOST_IMPORT_MIB":"16384","APS5_PAD_INPUT_FILE":"<path>","APS5_STAGING_POOL_MIB":"768","APS5_TRACE_SUMMARY_EVERY":"10","APS5_UNIT_SHADOW_MIB":"512"},"gpu":"NVIDIA GeForce RTX 3080 Ti","driver":"NVIDIA 615.71.09","os":"Linux 7.3.0-10-generic","cpu":"AMD Ryzen 9 5950X 16-Core Processor","cpu_threads":32,"memory_mib":32003,"title_id":"PPSA22408","title":"HOT WHEELS™️ Infinite Rush","content_version":"01.000.000","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":3935,"ms":10122.378},"interval_start_s":242.073,"interval_end_s":252.196,"presents":71,"frame_ms":{"p50":141.739,"p90":149.410,"p99":182.646,"max":182.646},"gpu_busy_ms_per_present":80.888,"worker_busy_pct":{"queue worker 0x0":99.345,"queue worker 0x20":99.969},"top_phases_ms_per_frame":{"Driver.Packet":284.062,"Driver.Packet.memory_wait":136.441,"Driver.Packet.dispatch":73.701,"Driver.Dispatch":72.655,"Vulkan.Dispatch":51.736,"Vulkan.Dispatch.shader_resources":47.098,"Driver.Packet.draw":39.300,"Driver.Draw":39.207},"trace_dropped":false,"trace":""}
{"commit":"495a55c32cad","dirty":false,"env":{"APS5_HOST_IMPORT_MIB":"16384","APS5_PAD_INPUT_FILE":"<path>","APS5_STAGING_POOL_MIB":"768","APS5_TRACE_SUMMARY_EVERY":"10","APS5_UNIT_SHADOW_MIB":"512"},"gpu":"NVIDIA GeForce RTX 3080 Ti","driver":"NVIDIA 615.71.09","os":"Linux 7.3.0-10-generic","cpu":"AMD Ryzen 9 5950X 16-Core Processor","cpu_threads":32,"memory_mib":32003,"title_id":"PPSA22408","title":"HOT WHEELS™️ Infinite Rush","content_version":"01.000.000","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":4115,"ms":10101.107},"interval_start_s":242.256,"interval_end_s":252.358,"presents":83,"frame_ms":{"p50":122.543,"p90":125.504,"p99":129.297,"max":129.297},"gpu_busy_ms_per_present":79.005,"worker_busy_pct":{"queue worker 0x0":99.266,"queue worker 0x20":99.970},"top_phases_ms_per_frame":{"Driver.Packet":242.408,"Driver.Packet.memory_wait":114.747,"Driver.Packet.dispatch":42.352,"Driver.Dispatch":41.339,"Driver.Packet.draw":38.809,"Driver.Draw":38.714,"Driver.Packet.pipeline_drain":38.347,"Graphics.Draw":26.424},"trace_dropped":false,"trace":""}
Summary records, last window of each run: Radeon 780M (A1, B1, A2, B2)
{"commit":"acf7ac208a0a","dirty":false,"env":{"APS5_DUMP_FRAMES":"2000","APS5_DUMP_FRAMES_EVERY":"20","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"AMD Radeon 780M Graphics (RADV PHOENIX)","driver":"radv Mesa 26.0.8-1ubuntu0.3","os":"Linux 7.0.0-38-generic","cpu":"AMD Ryzen 9 PRO 8945HS w/ Radeon 780M Graphics","cpu_threads":16,"memory_mib":29852,"title_id":"PPSA22408","title":"HOT WHEELS™️ Infinite Rush","content_version":"01.000.000","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":3655,"ms":10104.416},"interval_start_s":419.257,"interval_end_s":429.362,"presents":33,"frame_ms":{"p50":308.868,"p90":315.043,"p99":322.673,"max":322.673},"gpu_busy_ms_per_present":219.176,"worker_busy_pct":{"queue worker 0x0":99.645,"queue worker 0x20":99.981},"top_phases_ms_per_frame":{"Driver.Packet":610.903,"Driver.Packet.memory_wait":302.506,"Driver.Packet.dispatch":192.503,"Driver.Dispatch":190.762,"Vulkan.Dispatch":151.345,"Vulkan.Dispatch.shader_resources":147.004,"Resources.Complete":134.430,"Recorder.Sync":118.964},"trace_dropped":false,"trace":""}
{"commit":"495a55c32cad","dirty":false,"env":{"APS5_DUMP_FRAMES":"2000","APS5_DUMP_FRAMES_EVERY":"20","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"AMD Radeon 780M Graphics (RADV PHOENIX)","driver":"radv Mesa 26.0.8-1ubuntu0.3","os":"Linux 7.0.0-38-generic","cpu":"AMD Ryzen 9 PRO 8945HS w/ Radeon 780M Graphics","cpu_threads":16,"memory_mib":29852,"title_id":"PPSA22408","title":"HOT WHEELS™️ Infinite Rush","content_version":"01.000.000","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":3728,"ms":10112.383},"interval_start_s":418.233,"interval_end_s":428.345,"presents":36,"frame_ms":{"p50":283.561,"p90":289.049,"p99":302.316,"max":302.316},"gpu_busy_ms_per_present":215.326,"worker_busy_pct":{"queue worker 0x0":99.590,"queue worker 0x20":100.062},"top_phases_ms_per_frame":{"Driver.Packet":560.501,"Driver.Packet.memory_wait":276.414,"Driver.Packet.pipeline_drain":139.370,"Driver.Packet.dispatch":85.496,"Driver.Dispatch":83.860,"GpuMutex.wait.hook":77.025,"Graphics.Draw":50.453,"Vulkan.Dispatch":47.938},"trace_dropped":false,"trace":""}
{"commit":"acf7ac208a0a","dirty":false,"env":{"APS5_DUMP_FRAMES":"2000","APS5_DUMP_FRAMES_EVERY":"20","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"AMD Radeon 780M Graphics (RADV PHOENIX)","driver":"radv Mesa 26.0.8-1ubuntu0.3","os":"Linux 7.0.0-38-generic","cpu":"AMD Ryzen 9 PRO 8945HS w/ Radeon 780M Graphics","cpu_threads":16,"memory_mib":29852,"title_id":"PPSA22408","title":"HOT WHEELS™️ Infinite Rush","content_version":"01.000.000","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":3639,"ms":10253.468},"interval_start_s":425.389,"interval_end_s":435.643,"presents":33,"frame_ms":{"p50":313.404,"p90":319.027,"p99":327.525,"max":327.525},"gpu_busy_ms_per_present":221.184,"worker_busy_pct":{"queue worker 0x0":99.639,"queue worker 0x20":100.035},"top_phases_ms_per_frame":{"Driver.Packet":620.059,"Driver.Packet.memory_wait":307.544,"Driver.Packet.dispatch":196.802,"Driver.Dispatch":195.126,"Vulkan.Dispatch":155.911,"Vulkan.Dispatch.shader_resources":151.601,"Resources.Complete":138.398,"Recorder.Sync":119.500},"trace_dropped":false,"trace":""}
{"commit":"495a55c32cad","dirty":false,"env":{"APS5_DUMP_FRAMES":"2000","APS5_DUMP_FRAMES_EVERY":"20","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"AMD Radeon 780M Graphics (RADV PHOENIX)","driver":"radv Mesa 26.0.8-1ubuntu0.3","os":"Linux 7.0.0-38-generic","cpu":"AMD Ryzen 9 PRO 8945HS w/ Radeon 780M Graphics","cpu_threads":16,"memory_mib":29852,"title_id":"PPSA22408","title":"HOT WHEELS™️ Infinite Rush","content_version":"01.000.000","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":3742,"ms":10240.947},"interval_start_s":419.544,"interval_end_s":429.785,"presents":35,"frame_ms":{"p50":284.590,"p90":355.350,"p99":374.944,"max":374.944},"gpu_busy_ms_per_present":213.735,"worker_busy_pct":{"queue worker 0x0":99.557,"queue worker 0x20":100.013},"top_phases_ms_per_frame":{"Driver.Packet":583.593,"Driver.Packet.memory_wait":285.463,"Driver.Packet.pipeline_drain":145.598,"Driver.Packet.dispatch":89.922,"Driver.Dispatch":88.205,"GpuMutex.wait.hook":86.044,"Graphics.Draw":55.400,"Vulkan.Dispatch":47.869},"trace_dropped":false,"trace":""}

AI-assisted.

@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ AMD GPU test: passed

PR head 4f2160e merged onto main 5b1d381 · tested 2026-11-04 12:49 UTC · 15 min

GPU AMD Radeon RX 6300 (RADV NAVI24), driver Mesa 25.2.8-0ubuntu0.24.04.4, Vulkan 1.4.318
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-42-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ✅ 2,741 passed · 8 failed (0 new, 7 also fail on main, 1 unstable on main) · 58 skipped (ANYPS5_REQUIRE_VULKAN=1)
Test setup CPU-only tests without a GPU; GPU tests (and any CPU-only test that failed or skipped without one) once on the GPU with VK_LAYER_KHRONOS_validation and ANYPS5_NO_SHADER_CACHE=1; main ran the same way
Test selection 2,807 of 3,883 tests run: the ones this change can reach, chosen by tools/select_tests.py from main's build graph
Vulkan validation ✅ no new validation IDs vs main (966 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.2 s, ⚠️ public_headers 53.1 s, ⚠️ agc_driver_image_sample_unnormalized 35.6 s
Unstable on main (1, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_pipeline_journal: failed in 8 of the last 10 main runs
Failing on main too (7, not counted against this PR)
agc_driver_image_table
agc_driver_native_depth_bda_clear
agc_driver_native_multisample_depth
agc_submit_progress
agc_submit_progress_no_timeline
guest_mmap_executable
guest_socket_options_multicast
Validation IDs already present on main (8 IDs in 544 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (544 tests): agc_driver, agc_driver_address_passes, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, agc_driver_bc_block_copy, agc_driver_bda_anchor_reads, agc_driver_bda_span_reads, and 536 more
VUID-vkCmdCopyImage-srcImage-01548 (4 tests): agc_driver_depth_clear_hle, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-vkCmdCopyImage-srcImage-01551 (4 tests): agc_driver_depth_clear_hle, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (2 tests): agc_driver_prepared_exports, agc_driver_srgb8_color_target
VUID-VkSamplerCreateInfo-addressModeU-01079 (1 test): agc_driver_image_gather_volume
VUID-VkSamplerCreateInfo-addressModeU-parameter (1 test): agc_driver_image_gather_volume
VUID-VkSamplerCreateInfo-addressModeV-parameter (1 test): agc_driver_image_gather_volume
VUID-VkSamplerCreateInfo-addressModeW-parameter (1 test): agc_driver_image_gather_volume
Skipped (58)
agc_driver_bda_reads_shadowed_results: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_bda_reads_shadowed_results_per_build: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_copied_writer_label_order: skipped, the device reports a minStorageBufferOffsetAlignment of 4, so the dispatch binds its record at +0x1004 in place and nothing is written back; the test needs an alignment above 4
agc_driver_float16_unused_nan_payloads: skipped, the device has no native f16 conversions with RTE rounding and kept f16 denormals
agc_driver_gcn_display_present: skipped, no display: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
agc_driver_image_table_vouched_lookups: skipped, the device reports 4 of 4 host-imported pages written after a GPU read, so a watched imported table cannot be vouched for
agc_driver_linear_target_direct_write_completion: skipped, the device does not keep host imports write-watched, so no completion stamp over the target is tracked
agc_driver_ngg_vertex_wave_reduction: skipped, s3 describes a 32-lane wave only on 32-lane subgroups, and the device has 64 lanes
agc_driver_scattered_runs: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_sparse_dma_buf_import: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_unit_shadow: skipped, the device does not import watched host memory for unit shadows
agc_driver_unit_shadow_budget: skipped, the device does not import watched host memory for unit shadows
agc_host_import_sparse: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_idle_publish_wait: skipped, the device reports 4 of 4 host-imported pages written after a GPU read, so a forced watch of the import reads its submissions as CPU stores
agc_shadowed_key_stores: skipped, the device imports no watched host memory under a unit shadow
agc_small_tiled_shadow_label: skipped, host imports are unavailable: the test block is not imported and watched
agc_storage_clear_hand_over: skipped, the device imports no watched host memory for the clear-key hand-over
agc_storage_pending_key_refresh: skipped, refreshes over a pending key store are not testable here
agc_unit_shadow: skipped, the device does not import watched host memory for unit shadows
agc_unit_shadow_completion_store: skipped, the device reports watched host memory written when it imports or reads it
guest_http_uri_locale: 
guest_video_out_color_space: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_hdr: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_high_frame_rate: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_output_mode: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_resolution_status: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_wqhd_detection: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
video_out_flip_aftergpu: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_backtoback: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_controls: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or plat
Reproduce
git fetch origin 4f2160e7655c05ad00c6e6c9e5b59738cac0c3a0 5b1d381d5ad5d9f923326b18479c3bd889cdd588
git checkout 5b1d381d5ad5d9f923326b18479c3bd889cdd588 && git merge --no-ff 4f2160e7655c05ad00c6e6c9e5b59738cac0c3a0
git submodule update --init --recursive
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON -DANYPS5_ENABLE_SPIRV_TOOLS=ON
cmake --build build && cmake --build build --target libs
VK_DRIVER_FILES=/nonexistent/icd.json ctest --test-dir build -E '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 12 --output-on-failure
ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation \
  ctest --test-dir build -R '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 16 --output-on-failure
# failures are then re-run alone: --timeout 360 --parallel 2; new validation IDs: the test alone, twice, --parallel 1

Automated 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.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agc libSceAgc* docs perf Performance change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants