Skip to content

perf(agc): prove cached image tables from a write index behind APS5_TABLE_INDEX - #12745

Open
EagleBearerYS wants to merge 14 commits into
boykopovar:mainfrom
EagleBearerYS:perf/agc-template-write-index-v2
Open

EagleBearerYS wants to merge 14 commits into
boykopovar:mainfrom
EagleBearerYS:perf/agc-template-write-index-v2

Conversation

@EagleBearerYS

@EagleBearerYS EagleBearerYS commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

What

A cached draw over an image table proves every sampled texture on every Revalidate: one write-watch collect, one depth-plane flush and one generation compare per element. So the proof grows with the table. On main, the Village harness spends 1,607 µs of lookup per draw at 4,096 entries, 1,288 µs of it in Revalidate.

With APS5_TABLE_INDEX=1, the build subscribes its watched textures and watched T# table spans to a write index over 64 KiB blocks.

  • Writers bump the subscriptions over the blocks they touch: tracker stamps (CPU and driver), recorded storage writes, unwatch, allocation changes, a texture leaving the cache, and a host import over a texture's range.
  • Revalidate sweeps the subscription's spans once and proves only:
    • the bumped elements;
    • the depth, DCC and storage-backed elements;
    • the elements outside the write watch.
  • A bumped draw-build texture is looked up again, from the same first-layer words the build uses, and re-bound without a rebuild.
  • Unchanged: the template audit's periodic full walk, the imported-buffer proof, the epoch proofs of APS5_DRAW_PIPELINE, and everything else.
  • With the switch on, the per-range pending-writer loops are skipped when main's AnyPendingCpuWrites (perf(agc): skip an address space's pending CPU write scan when none are pending #8895) finds no writer.
  • The index's lock is an AgcDriver::Mutex, as GuestMemory's are.
  • Off (the default), the only added work is one relaxed load per stored tracker stamp.

Village harness (lavapipe, 850 draws per frame, the whole bindless table bound per draw, 256×256). Each figure is the median of 3 runs on one machine, with main → index → off in each round. Lookup is find + Revalidate per draw, on the draw pipeline's worker; wall is the harness's frame time per draw.

entries / writes per frame lookup µs: main index wall µs: main index
1,024 / 0% 271.2 102.4 429.7 292.0
1,024 / 2% 288.6 101.3 449.0 282.4
4,096 / 0% 1,606.6 365.1 2,202.7 940.5
4,096 / 2% 1,622.4 393.8 2,241.6 988.2

With the index off on the same binary, lookup is −4.3% to +4.7% of main and wall −1.4% to +5.7%. That's inside main's own spread between runs (6–16%), except for one off run at 4,096 / 2%.

Two tests change with it:

  • agc_draw_descriptors' first-layer case now asserts the proof path the switch implies. It also syncs its recorder when it leaves early, since a failed assertion crashed it.
  • agc_driver_lookup_log_fits_build, which measures the lookup log after a full walk, pins the switch off.

Resident Evil Village (PPSA01556)

Resident Evil Village (PPSA01556), static menu. Two blocks of four unprofiled runs: B A A B, then A B B A.

  • The arms: A is main 319621b plus fix(shader): load and store 16-bit data of converted packed images #11580 and fix(agc): keep buffer owners when a staged address space dissolves #10304, with a local scePadOpen answer for port types 3 and 4 (commit 103015a). B is the same tree plus this PR's four commits (e079ecb, the same added and removed lines as this head; commit e23a2e325e), run with APS5_TABLE_INDEX=1.
  • The env, in both: APS5_LAZY_SHADER_PREPARE=1 APS5_NO_GPL=1 APS5_HOST_IMPORT_MIB=6400 APS5_TRACE_SUMMARY_EVERY=10, with scripted pad input. B adds APS5_TABLE_INDEX=1; nothing else differs.
  • The machine: an NVIDIA GeForce RTX 3070 Laptop GPU (617.42), Ryzen 9 5900HS, Windows 10.0.26300, 3840x2160. The shader cache was warm and the key the same in both arms. GPU clocks were not held: it sat at P0 97-99 % at ~1,375-1,405 MHz, with low utilization, since the menu is CPU-bound.
  • The figure: presents per second over menu +5..15 minutes.
block run fps frame p50 / p90 (s)
1 B 0.838 1.17 / 1.35
1 A 0.730 1.37 / 1.55
1 A 0.574 1.57 / 1.93
1 B 0.769 1.27 / 1.55
2 A 0.570 1.63 / 1.96
2 B 0.841 1.17 / 1.37
2 B 0.680 1.38 / 1.82
2 A 0.628 1.57 / 1.85
Summary lines at menu +10 of the first block's A and B runs (main 103015a, this change e23a2e325e)
{"commit":"103015a9ca66","dirty":false,"env":{"APS5_HOST_IMPORT_MIB":"6400","APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_GPL":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 3070 Laptop GPU","driver":"NVIDIA 617.42","os":"Windows 10.0.26300","cpu":"AMD Ryzen 9 5900HS with Radeon Graphics","cpu_threads":16,"memory_mib":15776,"title_id":"PPSA01556","title":"Resident Evil Village","content_version":"01.210.000","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":3606,"ms":11000.454},"interval_start_s":1034.493,"interval_end_s":1045.494,"presents":8,"frame_ms":{"p50":1373.495,"p90":1562.555,"p99":1562.555,"max":1562.555},"gpu_busy_ms_per_present":238.978,"worker_busy_pct":{"queue worker 0x0":99.569,"queue worker 0x38":0.065,"queue worker 0x20":88.370,"queue worker 0x28":94.164},"top_phases_ms_per_frame":{"Driver.Packet":3875.450,"Driver.Packet.memory_wait":2227.222,"Driver.Packet.draw":989.142,"Driver.Draw":988.349,"Graphics.Draw":831.033,"Graphics.Draw.draw_and_resource_release":812.519,"Driver.Packet.dispatch":620.045,"Driver.Dispatch":566.327},"trace_dropped":false,"trace":""}
{"commit":"e23a2e325e57","dirty":false,"env":{"APS5_HOST_IMPORT_MIB":"6400","APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_GPL":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TABLE_INDEX":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 3070 Laptop GPU","driver":"NVIDIA 617.42","os":"Windows 10.0.26300","cpu":"AMD Ryzen 9 5900HS with Radeon Graphics","cpu_threads":16,"memory_mib":15776,"title_id":"PPSA01556","title":"Resident Evil Village","content_version":"01.210.000","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":1778,"ms":10373.574},"interval_start_s":835.524,"interval_end_s":845.898,"presents":8,"frame_ms":{"p50":1309.928,"p90":1551.612,"p99":1551.612,"max":1551.612},"gpu_busy_ms_per_present":241.686,"worker_busy_pct":{"queue worker 0x0":99.548,"queue worker 0x38":0.076,"queue worker 0x20":88.449,"queue worker 0x28":93.505},"top_phases_ms_per_frame":{"Driver.Packet":3645.606,"Driver.Packet.memory_wait":2102.811,"Driver.Packet.draw":935.046,"Driver.Draw":934.113,"Graphics.Draw":746.266,"Graphics.Draw.draw_and_resource_release":726.113,"Driver.Packet.dispatch":554.988,"Driver.Dispatch":491.246},"trace_dropped":false,"trace":""}
- **Traces:** one 30 s capture of each arm, menu +10.5 min, with APS5_TRACE_SECONDS=960:30 and no other trace or profile switch: - A: [aps5-trace-103015a9ca66-33724.json.gz](https://github.com/EagleBearerYS/AnyPS5/releases/download/traces-12745/aps5-trace-103015a9ca66-33724.json.gz), 2,419,643 bytes, sha256 `16eab88b27f0843a5aa46433a83dbb69cc1fd960ff2a521acade7d20b52fb809`; - B: [aps5-trace-e23a2e325e57-31916.json.gz](https://github.com/EagleBearerYS/AnyPS5/releases/download/traces-12745/aps5-trace-e23a2e325e57-31916.json.gz), 2,563,423 bytes, sha256 `e6b2ebbe1cb5d78ec919fe62a62583d9ef1f35f141046c5332d9683a72ace0ec`. - In these single windows the two arms are within each other's noise (frame p50 1.50 s against 1.52 s). The speed comparison is the eight unprofiled runs above, not these. - GPU clocks weren't held: P0 97-98 %, mean 1,413-1,425 MHz.
trace_digest.py of A (103015a)

seconds 960:30 from present 2901: 21 presents, frame p50 1497.6 / p90 1783.2 / p99 1903.7 / max 1903.7 ms, GPU busy 230.6 ms per present
NVIDIA GeForce RTX 3070 Laptop GPU, NVIDIA 617.42, Windows 10.0.26300, 3840x2160, commit 103015a, dropped: no

{"commit":"103015a9ca66","dirty":false,"env":{"APS5_HOST_IMPORT_MIB":"6400","APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_GPL":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_SECONDS":"960:30"},"gpu":"NVIDIA GeForce RTX 3070 Laptop GPU","driver":"NVIDIA 617.42","os":"Windows 10.0.26300","cpu":"AMD Ryzen 9 5900HS with Radeon Graphics","cpu_threads":16,"memory_mib":15776,"title_id":"PPSA01556","title":"Resident Evil Village","content_version":"01.210.000","resolution":"3840x2160","window":{"spec":"seconds 960:30","first_present":2901,"ms":31778.408},"presents":21,"frame_ms":{"p50":1497.603,"p90":1783.23,"p99":1903.699,"max":1903.699},"gpu_busy_ms_per_present":230.559,"worker_busy_pct":{"queue worker 0x0":99.554,"queue worker 0x38":0.057,"queue worker 0x28":93.25,"queue worker 0x20":89.065},"top_phases_ms_per_frame":{"Driver.Packet":4261.674,"Driver.Packet.memory_wait":2505.215,"Driver.Packet.draw":1156.599,"Driver.Draw":1155.503,"Graphics.Draw":928.353,"Graphics.Draw.draw_and_resource_release":907.06,"Driver.Packet.dispatch":560.368,"Driver.Dispatch":510.148},"trace_dropped":false,"trace":"aps5-trace-103015a9ca66-33724.json.gz"}

Slowest frames (largest slices inside each, inclusive)

  • present 2907: 1903.7 ms at 9350 ms: Driver.WorkerWait (queue worker 0x38) 1903.0, Driver.WorkerWait.dequeue_order (queue worker 0x38) 1897.0, Driver.Packet (queue worker 0x0) 1885.3, Driver.Packet (queue worker 0x28) 1785.2
  • present 2908: 1831.4 ms at 11253 ms: Driver.WorkerWait (queue worker 0x38) 1828.9, Driver.WorkerWait.dequeue_order (queue worker 0x38) 1818.7, Driver.Packet (queue worker 0x0) 1812.5, Driver.Packet (queue worker 0x28) 1746.7
  • present 2921: 1783.2 ms at 29995 ms: Driver.Packet (queue worker 0x0) 1764.7, Driver.Packet (queue worker 0x28) 1682.4, Driver.Packet.memory_wait (queue worker 0x28) 1663.5, Driver.Packet (queue worker 0x20) 1600.6
  • present 2901: 1750.5 ms at 0 ms: Driver.Packet (queue worker 0x0) 1728.6, Driver.Packet (queue worker 0x20) 1566.8, Driver.Packet (queue worker 0x28) 1505.2, Driver.Packet.memory_wait (queue worker 0x28) 1486.6
  • present 2904: 1743.3 ms at 4870 ms: Driver.WorkerWait (queue worker 0x38) 1742.3, Driver.WorkerWait.dequeue_order (queue worker 0x38) 1736.4, Driver.Packet (queue worker 0x0) 1724.7, Driver.Packet (queue worker 0x28) 1658.1

Threads (ms per frame)

thread busy wait untraced in slices < 20 us largest
queue worker 0x0 1057.9 (70 %) 442.5 (29 %) 12.9 90.7 Driver.Packet 1496.1, Vulkan.Dispatch 0.0
draw committer 660.4 (44 %) 40.9 (3 %) 811.9 4.9 Graphics.Draw 675.0, Recorder.Submit 2.1
presenter 3.3 (0 %) 0.3 (0 %) 1509.7 0.1 VideoOut.Flip 3.2, Driver.Present 0.4
queue worker 0x38 0.7 (0 %) 1344.4 (89 %) 168.1 0.9 Driver.Packet 0.7, Driver.EndSubmission 0.1
queue worker 0x28 18.2 (1 %) 1483.2 (98 %) 11.9 0.2 Driver.Packet 1410.6, Driver.EndSubmission 0.5
queue worker 0x20 129.1 (9 %) 1374.5 (91 %) 9.7 4.9 Driver.Packet 1343.2, Driver.EndSubmission 4.0
gpu 242.4 (16 %) 0.0 (0 %) 1270.9 0.0 batch 242.4

Largest slices (ms per frame, inclusive, all threads): Driver.Packet 4250.6, Driver.Packet.memory_wait 2505.1, Driver.WorkerWait 1594.9, Driver.WorkerWait.dequeue_order 1338.7, Driver.Packet.draw 1155.6, Driver.Draw 1154.5, Graphics.Draw 927.6, Graphics.Draw.draw_and_resource_release 906.3, Driver.Packet.dispatch 559.1, Driver.Dispatch 508.7

Longest waits

  • Driver.WorkerWait (queue worker 0x38) 1903.8 ms at 9351 ms, present 2907
  • Driver.WorkerWait (queue worker 0x38) 1827.9 ms at 11257 ms, present 2908
  • Driver.WorkerWait (queue worker 0x38) 1742.4 ms at 4872 ms, present 2904
  • Driver.WorkerWait (queue worker 0x38) 1707.2 ms at 28288 ms, present 2920
  • Driver.WorkerWait (queue worker 0x38) 1652.5 ms at 26635 ms, present 2919
  • Driver.Packet.memory_wait (queue worker 0x28) 1639.3 ms at 9478 ms, present 2907
  • Driver.Packet.memory_wait (queue worker 0x28) 1577.3 ms at 11410 ms, present 2908
  • Driver.WorkerWait (queue worker 0x38) 1564.9 ms at 1753 ms, present 2902
  • Driver.WorkerWait (queue worker 0x38) 1552.0 ms at 3319 ms, present 2903
  • Driver.WorkerWait (queue worker 0x38) 1542.0 ms at 13086 ms, present 2909

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

  • batch 427: 41.7 ms at 11426 ms, present 2908: GPU no ranges; recorded by Driver.Packet (queue worker 0x0) 3.0, Driver.Packet.dispatch (queue worker 0x0) 2.6, Driver.Dispatch (queue worker 0x0) 2.5, Vulkan.DispatchRecipe (queue worker 0x0) 1.3
  • batch 1139: 41.4 ms at 28443 ms, present 2920: GPU no ranges; recorded by Driver.Packet (queue worker 0x0) 2.2, Driver.Packet.dispatch (queue worker 0x0) 2.0, Driver.Dispatch (queue worker 0x0) 1.9, Vulkan.DispatchRecipe (queue worker 0x0) 0.4
  • batch 897: 41.4 ms at 22580 ms, present 2916: GPU no ranges; recorded by Driver.Packet (queue worker 0x0) 1.8, Driver.Packet.dispatch (queue worker 0x0) 1.5, Driver.Dispatch (queue worker 0x0) 1.5, Vulkan.DispatchRecipe (queue worker 0x0) 0.7
  • batch 779: 41.3 ms at 19993 ms, present 2914: GPU no ranges; recorded by Driver.Packet (queue worker 0x0) 0.6, Driver.Packet.dispatch (queue worker 0x0) 0.4, Driver.Dispatch (queue worker 0x0) 0.4, Vulkan.DispatchRecipe (queue worker 0x0) 0.3
  • batch 955: 41.3 ms at 24025 ms, present 2917: GPU no ranges; recorded by Driver.Packet (queue worker 0x0) 0.2, Driver.Packet.flush_between_packets (queue worker 0x0) 0.1, Driver.Packet.dispatch (queue worker 0x0) 0.1, Recorder.Submit (queue worker 0x0) 0.1
trace_digest.py of B (e23a2e325e, APS5_TABLE_INDEX=1)

seconds 960:30 from present 3839: 20 presents, frame p50 1518.3 / p90 2022.3 / p99 2080.3 / max 2080.3 ms, GPU busy 241.8 ms per present
NVIDIA GeForce RTX 3070 Laptop GPU, NVIDIA 617.42, Windows 10.0.26300, 3840x2160, commit e23a2e325e57, dropped: no

{"commit":"e23a2e325e57","dirty":false,"env":{"APS5_HOST_IMPORT_MIB":"6400","APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_GPL":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TABLE_INDEX":"1","APS5_TRACE_SECONDS":"960:30"},"gpu":"NVIDIA GeForce RTX 3070 Laptop GPU","driver":"NVIDIA 617.42","os":"Windows 10.0.26300","cpu":"AMD Ryzen 9 5900HS with Radeon Graphics","cpu_threads":16,"memory_mib":15776,"title_id":"PPSA01556","title":"Resident Evil Village","content_version":"01.210.000","resolution":"3840x2160","window":{"spec":"seconds 960:30","first_present":3839,"ms":30625.661},"presents":20,"frame_ms":{"p50":1518.318,"p90":2022.26,"p99":2080.313,"max":2080.313},"gpu_busy_ms_per_present":241.793,"worker_busy_pct":{"queue worker 0x0":99.506,"queue worker 0x38":0.138,"queue worker 0x28":93.491,"queue worker 0x20":89.008},"top_phases_ms_per_frame":{"Driver.Packet":4317.648,"Driver.Packet.memory_wait":2512.91,"Driver.Packet.draw":1135.088,"Driver.Draw":1133.775,"Graphics.Draw":856.639,"Graphics.Draw.draw_and_resource_release":832.467,"Driver.Packet.dispatch":624.885,"Driver.Dispatch":563.075},"trace_dropped":false,"trace":"aps5-trace-e23a2e325e57-31916.json.gz"}

Slowest frames (largest slices inside each, inclusive)

  • present 3849: 2080.3 ms at 14750 ms: Driver.WorkerWait (queue worker 0x38) 2075.8, Driver.WorkerWait.dequeue_order (queue worker 0x38) 2073.1, Driver.Packet (queue worker 0x0) 2059.2, Driver.Packet (queue worker 0x28) 1973.0
  • present 3848: 2022.3 ms at 12728 ms: Driver.WorkerWait (queue worker 0x38) 2021.2, Driver.WorkerWait.dequeue_order (queue worker 0x38) 2015.5, Driver.Packet (queue worker 0x0) 2003.2, Driver.Packet (queue worker 0x28) 1901.9
  • present 3853: 2000.9 ms at 21358 ms: Driver.WorkerWait (queue worker 0x38) 1999.7, Driver.WorkerWait.dequeue_order (queue worker 0x38) 1993.3, Driver.Packet (queue worker 0x0) 1980.7, Driver.Packet (queue worker 0x28) 1914.2
  • present 3840: 1693.7 ms at 1399 ms: Driver.WorkerWait (queue worker 0x38) 1690.5, Driver.WorkerWait.dequeue_order (queue worker 0x38) 1685.8, Driver.Packet (queue worker 0x0) 1674.4, Driver.Packet (queue worker 0x28) 1608.4
  • present 3856: 1656.4 ms at 25966 ms: Driver.WorkerWait (queue worker 0x38) 1653.7, Driver.WorkerWait.dequeue_order (queue worker 0x38) 1649.0, Driver.Packet (queue worker 0x0) 1636.1, Driver.Packet (queue worker 0x28) 1544.4

Threads (ms per frame)

thread busy wait untraced in slices < 20 us largest
queue worker 0x0 1099.9 (72 %) 417.7 (27 %) 13.7 88.1 Driver.Packet 1513.0, Driver.EndSubmission 0.0
draw committer 678.4 (44 %) 51.2 (3 %) 801.6 4.2 Graphics.Draw 692.0, Recorder.Submit 2.6
presenter 3.3 (0 %) 0.4 (0 %) 1527.5 0.1 VideoOut.Flip 3.4, Driver.Present 0.3
queue worker 0x38 1.6 (0 %) 1388.0 (91 %) 141.6 0.7 Driver.Packet 1.7, Driver.EndSubmission 0.3
queue worker 0x28 19.3 (1 %) 1499.1 (98 %) 12.9 0.2 Driver.Packet 1431.0, Driver.EndSubmission 0.5
queue worker 0x20 149.8 (10 %) 1371.0 (90 %) 10.5 4.9 Driver.Packet 1360.4, Driver.EndSubmission 1.8
gpu 241.8 (16 %) 0.0 (0 %) 1289.5 0.0 batch 241.8

Largest slices (ms per frame, inclusive, all threads): Driver.Packet 4306.1, Driver.Packet.memory_wait 2512.7, Driver.WorkerWait 1637.1, Driver.WorkerWait.dequeue_order 1382.7, Driver.Packet.draw 1134.2, Driver.Draw 1132.9, Graphics.Draw 856.1, Graphics.Draw.draw_and_resource_release 831.8, Driver.Packet.dispatch 624.3, Driver.Dispatch 562.4

Longest waits

  • Driver.WorkerWait (queue worker 0x38) 2075.6 ms at 14755 ms, present 3849
  • Driver.WorkerWait (queue worker 0x38) 2021.3 ms at 12729 ms, present 3848
  • Driver.WorkerWait (queue worker 0x38) 1999.9 ms at 21359 ms, present 3853
  • Driver.Packet.memory_wait (queue worker 0x28) 1764.3 ms at 12849 ms, present 3848
  • Driver.Packet.memory_wait (queue worker 0x28) 1720.7 ms at 14986 ms, present 3849
  • Driver.WorkerWait (queue worker 0x38) 1691.0 ms at 1403 ms, present 3840
  • Driver.Packet.memory_wait (queue worker 0x28) 1685.3 ms at 21570 ms, present 3853
  • Driver.WorkerWait (queue worker 0x38) 1653.7 ms at 25970 ms, present 3856
  • Driver.WorkerWait (queue worker 0x38) 1606.4 ms at 16833 ms, present 3850
  • Driver.WorkerWait (queue worker 0x38) 1574.3 ms at 19784 ms, present 3852

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

  • batch 685: 41.6 ms at 17021 ms, present 3850: GPU no ranges; recorded by Driver.Packet (queue worker 0x0) 3.0, Driver.Packet.dispatch (queue worker 0x0) 2.9, Driver.Dispatch (queue worker 0x0) 2.9, Vulkan.DispatchRecipe (queue worker 0x0) 0.3
  • batch 556: 41.5 ms at 12861 ms, present 3848: GPU no ranges; recorded by Driver.Packet (queue worker 0x0) 2.2, Driver.Packet.dispatch (queue worker 0x0) 1.9, Driver.Dispatch (queue worker 0x0) 1.9, Vulkan.DispatchRecipe (queue worker 0x0) 0.7
  • batch 377: 41.5 ms at 9082 ms, present 3845: GPU no ranges; recorded by Driver.Packet (queue worker 0x0) 1.3, Driver.Packet.dispatch (queue worker 0x0) 1.1, Driver.Dispatch (queue worker 0x0) 1.1, Vulkan.DispatchRecipe (queue worker 0x0) 0.2
  • batch 71: 41.5 ms at 1559 ms, present 3840: GPU no ranges; recorded by Driver.Packet (queue worker 0x0) 1.6, Driver.Packet.dispatch (queue worker 0x0) 1.4, Driver.Dispatch (queue worker 0x0) 1.2, Vulkan.DispatchRecipe (queue worker 0x0) 0.1
  • batch 622: 41.4 ms at 15011 ms, present 3849: GPU no ranges; recorded by Vulkan.Dispatch.shader_resources (queue worker 0x0) 5.6, Resources.Complete (queue worker 0x0) 5.5, Driver.Packet (queue worker 0x0) 4.0, Driver.Packet.dispatch (queue worker 0x0) 3.7
### Tested This head, cda1b61, merges `main` edf6804 into a1345c6 with no conflicts and no adaptation; the branch's four commits are unchanged. Runs that don't name cda1b61 are on a1345c6, on `main` 85a4d7f. - **On cda1b61:** - **Writer paths:** every path `main` added or changed since 85a4d7f still reaches a bump, fails the sweep, or is proved per element, so there's no new red case. - **Linux** (lavapipe, CI's flags), off and on: `ctest -R '^agc'` ran 1,118 tests: 1,044 passed, 73 skipped, 1 failed. The failure is `agc_driver_address_passes`: llvmpipe's JIT emits a GFNI instruction the build machine's CPU lacks, and it fails the same on `main` there. The three index tests passed 10 of 10 each, off and on. Every source's case goes red with its own source dropped. - **The harness at 4,096 entries:** lookup goes from 2,595 to 447 µs per draw at 0 % writes, and from 2,734 to 462 at 2 %. With the switch off, every median is inside `main`'s run-to-run range. - **GitHub's runners** ([run 40870995161](https://github.com/EagleBearerYS/AnyPS5/actions/runs/40870995161)): the branch's driver tests plus `^agc_driver_table_index`, `^agc_driver_lookup_log` and `^agc_driver_village`, 10 times, 0 failed. - Linux: 77 run, 70 passed, 7 skipped. - Windows: 93 run, 4 passed, 89 skipped, since the runner has no Vulkan device. - The libc and libkernel suites, run with `APS5_SKIP_TIMING_TESTS=1`, pass: 191 and 291 tests on Linux, 220 and 314 on Windows. - **GitHub's runners:** - [run 40200070500](https://github.com/EagleBearerYS/AnyPS5/actions/runs/40200070500), the branch's tests and the draw, descriptor and texture tests around them, 10 times, with no failures: - Linux: 68 tests, 7 of them skipped. - Windows: 84 tests, 81 of them skipped, since the runner has no Vulkan device. - [run 40201781277](https://github.com/EagleBearerYS/AnyPS5/actions/runs/40201781277), under the Khronos validation layer on Linux. The layer loaded on both sides, and the only VUID on `main` and on this branch is `VUID-VkDeviceCreateInfo-pNext-pNext`. - **Linux** (Ubuntu 24.04, gcc 13.3, lavapipe, CI's configure flags), tests as an unprivileged user: - **`agc_driver_table_index_validation`** (10 cases, one per event source plus a 2D-array case): 20 of 20. Each source's case goes red on this head with its own source dropped through `APS5_TABLE_INDEX_BREAK`. - **`agc_draw_descriptors` and `agc_driver_lookup_log_fits_build`:** 10 of 10 each, with the switch off and on. - **The image-table, resource, revalidate, template, sampled, storage and texture tests** (60): run off, on, and with `APS5_DRAW_PIPELINE=1` as well. Each run gave 59 passed and 1 skipped. The skip is `agc_storage_clear_hand_over`, because lavapipe makes no watched host import. - **Full ctest as CI runs it:** 2,265 tests, 2,168 passed, 91 skipped, 6 failed. The same with `APS5_TABLE_INDEX=1` for the whole run. The six failures in both are IPv6 socket tests, which the build machine can't run. - **Vulkan validation** (Khronos layer 1.3.275) on `main` and on this branch, off and on, with the same 18 focused tests plus the new one: no new `VUID-` errors. All three show only the layer's `VUID-VkDeviceCreateInfo-pNext-pNext`, for an extension structure the layer predates. - Not tested on a console. - **6a930fc672, a merge of `main` 673fa86**, which brings johandavidcm's #11550 ([run](https://github.com/EagleBearerYS/AnyPS5/actions/runs/40980582487)). - **The conflict:** the `[rescache] revalidate (10 s)` profile line in `ShaderResources.cpp`. #11550 extends it with the full-walk times and the refused surfaces, and this PR adds the write-index line after it. - **The resolution:** the merge keeps #11550's lines, then this PR's block, and this PR's added and removed lines are unchanged. - **×10:** `agc_draw_descriptors`, #11550's `agc_driver_resource_cache_collect_refusals`, and the `^agc_driver_table_index`, `^agc_driver_lookup_log` and `^agc_driver_village` tests, with the tests for the files the merge changes. - Linux: 79 run, 71 pass, 8 skip, 0 fail. - Windows: 95 run, 4 pass, 91 skip (no Vulkan device), 0 fail. - The libc and libkernel suites run 194 and 294 tests on Linux and 224 and 317 on Windows, with 0 failed. The suites ran with `APS5_SKIP_TIMING_TESTS=1`, which relaxes `precise_wait`'s median bounds on GitHub's hosted runners. - **AMD Radeon RX 9070 XT (RDNA 4), by @bunbeans2-arch, at 6a930fc** ([comment](https://github.com//pull/12745#issuecomment-6522007651)): Windows 11 Pro 10.0.22631, driver 32.0.32015.7029 (amdvlk64), MSYS2 UCRT64 g++ 16.1.0, Release, `ANYPS5_REQUIRE_VULKAN=1`, `ANYPS5_NO_SHADER_CACHE=1` and the Khronos validation layer (the loader inserts it in every run). The head merged onto `main` f7f03da, 3 runs per side: - `agc_driver_table_index_validation` passes 3 of 3, printing `passed` for array, compared, cpu, driver, import, pending, release, table and unwatch. Each run also prints `remap: skipped on Windows`, so the remap case isn't covered there. - `agc_driver_village_draw_cost` passes 3 of 3. - `agc_driver_recorder`, the `agc_recorder_*` tests and `agc_driver_lookup_log_fits_build` pass 3 of 3, as on `main`. - No `VUID-` line on either side. - **6e2e6cd6de, two commits on 6a930fc that fix profile counters with the switch on.** johandavidcm's `agc_driver_resource_cache_collect_refusals` test (#11550) showed that with `APS5_TABLE_INDEX=1`, a refusal was counted twice when the write index's proof fell back to the ordinary fast proof. No proof outcome changes. - **81b548fb75** counts a collect refusal, its fast-fail reason and a depth-guard refusal once. `agc_driver_resource_cache_collect_refusals_index` runs #11550's test with the index on. It failed 20 of 20 on 6a930fc and passed 20 of 20 with the commit ([result](https://github.com/EagleBearerYS/AnyPS5/blob/cloud-results/results/cloud-3/BF-326.md)). - **6e2e6cd6de** counts a pending fast-fail once. `agc_driver_resource_cache_pending_fail_count` and its `_index` twin check that each proof counts one foreign and one T1-eligible pending fast-fail, with the index off and on. With the index on, it failed 20 of 20 on 81b548f (`pending foreign +2, snapshot +0, T1 eligible +2`) and passed 20 of 20 with the commit ([result](https://github.com/EagleBearerYS/AnyPS5/blob/cloud-results/results/cloud-5/BF-327.md)). - **Linux** (lavapipe, CI's flags, unprivileged user), on 6e2e6cd: `ctest -R '^agc'` ran 1,133 tests: 1,059 passed, 74 skipped, 0 failed, with the switch off and on. - On a second machine, at 81b548f, `agc_driver_image_sample_force_degamma` failed: llvmpipe's JIT emits an AVX-VNNI instruction under `GALLIUM_OVERRIDE_CPU_CAPS=avx` that the machine's CPU lacks. It fails the same way on 6a930fc there, and passes without the override. - **×10** on GitHub's runners ([run](https://github.com/EagleBearerYS/AnyPS5/actions/runs/41156213493)): the tests above plus `agc_draw_descriptors` and the `^agc_driver_table_index`, `^agc_driver_lookup_log`, `^agc_driver_village`, `^agc_driver_resource_cache` and `^agc_driver_sampled_cache` tests. - Linux: 92 run, 84 pass, 8 skip, 0 fail. - Windows: 108 run, 4 pass, 104 skip (no Vulkan device), 0 fail. - The libc and libkernel suites run 194 and 294 tests on Linux and 224 and 317 on Windows, with 0 failed. The suites ran with `APS5_SKIP_TIMING_TESTS=1`, which relaxes `precise_wait`'s median bounds on GitHub's hosted runners. - **Still counted twice:** two profile-only `[rescache]` counters, `countKeysProven` and `serialSkips`, can still count twice when the index's inner proof falls back. A follow-up fixes them. - **4922da2dec, a merge of `main` 0836dfd** ([run](https://github.com/EagleBearerYS/AnyPS5/actions/runs/41239531755)). #12862 moved `libSceAgcDriver`'s test registrations into `tests/cmake/`; the conflict in `CMakeLists.txt` is resolved with `tools/agc_test_split.py resolve`, which moves this PR's registrations into `tests/cmake/agc_driver_sampled_cache_budget_tests.cmake` (+7 −1). Nothing else conflicted. Apart from the move, this PR's diff is unchanged. With `-DBUILD_TESTING=ON`, `ctest -N` gives 3080 tests: `main`'s 3075 plus its 5 tests, each listed once. The 18 tests of this PR's verify set pass 10 runs in a row. Linux: 18 run, 18 pass, 0 skip, 0 fail. Windows: 18 run, 0 pass, 18 skip (no Vulkan device), 0 fail. Suites: libc and libkernel pass on Linux (199 and 308) and on Windows (226 and 330). The suites ran with `APS5_SKIP_TIMING_TESTS=1`, which relaxes `precise_wait`'s median bounds on GitHub's hosted runners. - **2537d44452 and cdcb984, from oneandonlydean's review** ([comment](https://github.com//pull/12745#issuecomment-6557352221)). - **2537d44452:** `TrimSubscriptionBumps` clears an overflowed subscription's marker and history only while the subscription's generation, read under the index mutex, still equals the trimmed baseline. Otherwise the marker stays and only the bumps at or before the baseline are dropped. Before, a bump between the proof's baseline read and the trim was lost: it went unrecorded because of the overflow, and the trim cleared the marker, so the next partial proof listed no block for it. The new `overflow` case runs that sequence on a real subscription and requires the next proof to fall back. - **cdcb98496e:** `tests/cmake/agc_driver_table_index_validation_tests.cmake` appends `APS5_TABLE_INDEX=1` to the test's default registration, which already exists, so a second `add_test` would fail the configure. The test returns 77 when guest memory has no write watch, so such a machine shows a skip, not a pass. - **Red** at 4922da2 with only the new case ([run](https://github.com/EagleBearerYS/AnyPS5/actions/runs/41305222690)): Linux fails with "overflow: trimming the overflowed history at the fallback's baseline forgot the unrecorded bump of block 2 after it, so the next proof would check 0 changed blocks instead of falling back". Windows skips it (no Vulkan device). - **×10 at cdcb984** ([run](https://github.com/EagleBearerYS/AnyPS5/actions/runs/41305214153)): this PR's 18-test set. Linux: 18 run, 18 pass, 0 skip, 0 fail. Windows: 18 run, 0 pass, 18 skip (no Vulkan device), 0 fail, so the overflow case has run only on Linux. The libc and libkernel suites run 199 and 308 tests on Linux and 226 and 330 on Windows, with 0 failed. The suites ran with `APS5_SKIP_TIMING_TESTS=1`, which relaxes `precise_wait`'s median bounds on GitHub's hosted runners. - **TechLevelZero's GPU bots at cdcb984,** each with `VK_LAYER_KHRONOS_validation`, on the tests this change can reach as `tools/select_tests.py` picks them from `main`'s build graph. Neither selection included `agc_driver_table_index_validation`, which `main` doesn't have yet. - **NVIDIA RTX 2000 Ada Generation** ([report](https://github.com//pull/12745#issuecomment-6559168372)): driver 595.99.02, Ubuntu 26.04.1, this head merged onto `main` e6f5730, 2,537 of 3,148 tests selected. 2,488 passed, 4 failed and 45 skipped. None of the failures is new: 3 also fail on `main`, and 1 is unstable there. No new validation IDs over 936 GPU tests; 3 tests ran with the layer but aren't in `main`'s baseline, so they weren't compared. - **AMD Radeon RX 6300 (RADV NAVI24, Mesa 25.2.8)** ([report](https://github.com//pull/12745#issuecomment-6558925551)): Ubuntu 26.04.1, this head merged onto `main` 291e02d, 2,542 of 3,155 tests selected. 2,475 passed, 13 failed and 54 skipped. None of the failures is new: 12 also fail on `main`, and 1 is unstable there. No new validation IDs over 936 GPU tests; the same 3 tests weren't compared. - **80ea80ed5e, a merge of `main` acf7ac2,** which brings Capmare's #10256 (one texture for the dynamic-resolution variants of an image table surface) and nikhilpanchal1's #10472 (image memory suballocation) ([×10](https://github.com/EagleBearerYS/AnyPS5/actions/runs/41778619158), [every `agc` test](https://github.com/EagleBearerYS/AnyPS5/actions/runs/41778644620)). - **The conflict:** one, at the top of `StorageTexture::markLayersPending` in `Texture.cpp`, where #10256 records the image's layout write and this PR notes the guest range as GPU-pending. The two are independent, and the merge keeps both, `main`'s first. This PR's diff over `main` is unchanged. - **×10:** `agc_draw_descriptors` and every test matching `^agc_driver_table_index`, `^agc_driver_lookup_log`, `^agc_driver_village`, `^agc_driver_resource_cache`, `^agc_driver_sampled_cache`, `^agc_driver_image_table`, `^agc_driver_image_memory` or `^agc_image_memory`, which takes in this PR's tests, #10256's `agc_driver_image_table_variants` and #10472's image-memory tests. Linux: 38 run, 38 pass, 0 skip, 0 fail. Windows: 38 run, 4 pass, 34 skip (no Vulkan device), 0 fail. The libc and libkernel suites run 301 and 325 tests on Linux and 331 and 343 on Windows, with 0 failed. The suites ran with `APS5_SKIP_TIMING_TESTS=1`, which relaxes `precise_wait`'s median bounds on GitHub's hosted runners. - **Every `agc` test, once:** Linux: 1,319 run, 1,233 pass, 85 skip, 1 fail. Windows: 1,356 run, 405 pass, 951 skip (no Vulkan device), 0 fail. The one failure is `agc_driver_pipeline_journal`'s 120-second timeout (`769/1319 Test #1398: agc_driver_pipeline_journal ***Timeout 120.05 sec`). It is `main`'s own cold run, near the limit: `main` 086c068 times out the same way under `ctest -V` ([run](https://github.com/EagleBearerYS/AnyPS5/actions/runs/41736700046)). - **TechLevelZero's GPU bots at 80ea80e**, each with `VK_LAYER_KHRONOS_validation`: - **NVIDIA RTX 2000 Ada Generation** ([report](https://github.com//pull/12745#issuecomment-6625922641)): driver 595.99.02, this head merged onto `main` 5b1d381, 2,892 of 3,883 tests selected. 2,836 passed, 6 failed (none new: 3 also fail on `main`, 3 unstable on `main`), 50 skipped. No new validation IDs over 979 GPU tests. This PR's `agc_driver_table_index_validation`, `agc_driver_lookup_log_fits_build`, `agc_draw_descriptors` and four resource-cache tests (`agc_driver_resource_cache_collect_refusals`, `_collect_refusals_index`, `_pending_fail_count` and `_pending_fail_count_index`) passed. `agc_driver_village_draw_cost` wasn't in the selection. - **AMD Radeon RX 6300 (RADV NAVI24, Mesa 25.2.8)** ([report](https://github.com//pull/12745#issuecomment-6626098833)): this head merged onto `main` b8efa62, 2,885 of 3,878 tests selected. 2,817 passed, 9 failed (none new: 8 also fail on `main`, 1 unstable on `main`), 59 skipped. No new validation IDs over 1,031 GPU tests. This PR's three added resource-cache registrations passed. - **11af6efcf0, a merge of `main` b11c7bf,** which brings #13858 ([×10](https://github.com/EagleBearerYS/AnyPS5/actions/runs/41801647695), [every `agc` test](https://github.com/EagleBearerYS/AnyPS5/actions/runs/41801673120)). - **The conflict:** one, at the end of `PrepareDrawBindings` in `ShaderResources.cpp`. #13858 moves the descriptor-set writes into a new `writeDrawSets`, and this PR keeps the bindings when no snapshot is selected but a texture was rebound (`selected.empty() && !rebound`). The merge takes #13858's split and keeps this PR's condition on the early return. This PR's diff over `main` is unchanged. - **×10:** the set above, with #13858's `^agc_driver_address_draw_space_reuse` and `^agc_driver_bda` tests added. Linux: 50 run, 50 pass, 0 skip, 0 fail. Windows: 50 run, 5 pass, 45 skip (no Vulkan device), 0 fail. The libc and libkernel suites run 303 and 327 tests on Linux and 334 and 345 on Windows, with 0 failed. The suites ran with `APS5_SKIP_TIMING_TESTS=1`, which relaxes `precise_wait`'s median bounds on GitHub's hosted runners. - **Every `agc` test, once:** Linux: 1,331 run, 1,245 pass, 85 skip, 1 fail. Windows: 1,370 run, 407 pass, 963 skip (no Vulkan device), 0 fail. The one failure is again `agc_driver_pipeline_journal`'s 120-second timeout (`776/1331 Test #1403: agc_driver_pipeline_journal ***Timeout 120.06 sec`), `main`'s own cold run. - **TechLevelZero's NVIDIA GPU test at 11af6ef** ([report](https://github.com//pull/12745#issuecomment-6633261022)), with `VK_LAYER_KHRONOS_validation`: driver 595.99.02, this head merged onto `main` b11c7bf, 2,907 of 3,894 tests selected. 2,851 passed, 7 failed (none new: 3 also fail on `main`, 4 unstable on `main`), 49 skipped. No new validation IDs over 986 GPU tests. This PR's `agc_driver_lookup_log_fits_build`, `agc_draw_descriptors` and four resource-cache tests (`agc_driver_resource_cache_collect_refusals`, `_collect_refusals_index`, `_pending_fail_count` and `_pending_fail_count_index`) passed. `agc_driver_table_index_validation` and `agc_driver_village_draw_cost` weren't in the selection. - **fa7e8e3dfd, a merge of `main` b611e63** ([×10](https://github.com/EagleBearerYS/AnyPS5/actions/runs/41909249974), [every `agc` test](https://github.com/EagleBearerYS/AnyPS5/actions/runs/41909420658)), which brings oneandonlydean's #14838 (the carry of #9012: template audits only after the host import set changed). - **The conflict:** one, in `docs/dev/ENVIRONMENT.md`, where this PR's `APS5_TABLE_INDEX` and `APS5_TABLE_INDEX_BREAK` rows sit beside #14838's new `APS5_TEMPLATE_AUDIT_ALWAYS` and `APS5_TEMPLATE_AUDIT_BUDGET` rows and its reworded `APS5_TEMPLATE_AUDIT_MS` row. The merge keeps all five, in name order. The code merged without conflicts, `ShaderResources.cpp` included, which #14838, #15682, #15741 and #15783 changed. This PR's diff over `main` is unchanged. - **×10:** the same set as at 11af6ef. Linux: 51 run, 51 pass, 0 skip, 0 fail. Windows: 51 run, 5 pass, 46 skip (no Vulkan device), 0 fail. The libc and libkernel suites run 303 and 329 tests on Linux and 335 and 360 on Windows, with 0 failed. The suites ran with `APS5_SKIP_TIMING_TESTS=1`, which relaxes `precise_wait`'s median bounds on GitHub's hosted runners. - **Every `agc` test, once:** Linux: 1,337 run, 1,250 pass, 85 skip, 2 fail. Windows: 1,376 run, 411 pass, 965 skip (no Vulkan device), 0 fail. Both failures are `main`'s: - `agc_driver_image_gather_volume` ("the vertex shader was not emitted in the device's module form") fails the same way in `main`'s own `linux` check on 638187d, the #15855 merge ([job](https://github.com/boykopovar/AnyPS5/actions/runs/41906999149/job/126869200694)). JJenkx's #15875, merged after b611e63, updates the test for the specialized vertex form #14265 emits. - `agc_driver_pipeline_journal`'s 120-second timeout (`778/1337 Test #1429: agc_driver_pipeline_journal ***Timeout 120.11 sec`), `main`'s own cold run. - **TechLevelZero's AMD GPU test at 11af6ef** ([report](https://github.com//pull/12745#issuecomment-6637406740)), with `VK_LAYER_KHRONOS_validation`: AMD Radeon RX 6300 (RADV NAVI24, Mesa 25.2.8), this head merged onto `main` b11c7bf, 2,907 of 3,894 tests selected. 2,838 passed, 9 failed (none new: 8 also fail on `main`, 1 unstable on `main`), 60 skipped. No new validation IDs over 986 GPU tests. As in the NVIDIA run, this PR's `agc_driver_lookup_log_fits_build`, `agc_draw_descriptors` and four resource-cache tests passed, and `agc_driver_table_index_validation` and `agc_driver_village_draw_cost` weren't in the selection.

Checklist

Related:

…ABLE_INDEX

A cached draw over an image table proves every sampled texture on every
Revalidate: one write-watch collect, one depth-plane flush and one
generation compare per element, so the proof grows with the table.

With APS5_TABLE_INDEX=1 the build subscribes its watched textures and
watched T# table spans to a write index over 64 KiB blocks. Writers bump
the subscriptions over the blocks they touch: tracker stamps (CPU and
driver), recorded storage writes, unwatch, allocation changes, and two
sources main's template audit covers today, a texture leaving the cache
and a host import over a texture's range. Revalidate then sweeps the
subscription's spans once, scans the pending registry only when its
serial moved, and proves only the bumped elements, the depth, DCC and
storage-backed elements, and the elements outside the write watch;
a bumped texture of a draw build is looked up again, from the same
first-layer words the build and the full walk use for a 2D read of a 2D
array, and re-bound without a rebuild. Everything else, the audit's periodic full walk
included, is unchanged, and with the switch off the only added work is
one relaxed load per stored tracker stamp.

APS5_TABLE_INDEX_BREAK drops one source's events for the tests.

Port of BF-041 (0063b98). Two tests assert main's full walk:
agc_draw_descriptors' first-layer case now asserts the path the switch
implies (the full walk, or the index comparing its unwatched element),
and agc_driver_lookup_log_fits_build, which measures the lookup log
after a full walk, pins the switch off.

The first-layer case also syncs the recorder and clears its textures
when it leaves early, as the file's other image cases do: a failed
assertion destroyed its own texture detiler before the recorder ran the
detile dispatch it had recorded, and the test crashed instead of
reporting the failure.
agc_driver_table_index_validation draws an 8-entry T# table over
watched textures with APS5_TABLE_INDEX=1, settles each case on the
index's O(1) proof, then drives one event source: a CPU write, a T#
word change, a pending storage write, a remap, an element outside the
write watch, a driver store, an unwatch, textures leaving the cache and
a host import over a texture. The "array" case reads a 2D array as 2D
and checks that a write to another slice leaves the element bound. Each case runs alone by name and goes red
under APS5_TABLE_INDEX_BREAK for its source; "outcome" keeps only what
the draw samples and whether the O(1) proof was taken.

The pixel program's key is user data plus a term that is zero at run
time but not known when the program is planned, so the table is bound
whole instead of narrowed to the one record a constant key selects.
…dless T# table

Taken from exp/bf046-main b7d6d98 without the GPU mutex hold times,
which need the lock-holder totals of the draw-record harness commit.
After the split it prints the process's VmRSS and VmHWM.
The table mode loaded each T# with s_load_dwordx8 at a register offset,
which the SRT walker does not plan, so every draw was an address-based
build and no template formed. The T#s now come from s_buffer_load_dwordx8
through a T# table V# at root+0x220. The key is still the object V#'s
index, plus a word of frame data the program reads at run time (zero),
so the planner cannot narrow the table to the records a known key
selects: every draw binds the whole table, as a bindless title does, and
draws of one program reuse one template.

VILLAGE_WRITE_PERCENT rewrites that share of the table's textures with
their own bytes before each frame, so the proof sees writes without the
sampled texels changing.
@github-actions github-actions Bot added perf Performance change perf numbers missing perf pull request without a before and after summary line labels Oct 29, 2026
@github-actions

Copy link
Copy Markdown

This pull request is labeled perf, so it needs the summary line of a capture on main and one with the change, from the same title, scene and machine, as the Performance report form asks. Please paste both aps5-summary.jsonl lines, attach the two traces and add the output of tools/trace_digest.py.

@oneandonlydean oneandonlydean self-assigned this Oct 29, 2026
@github-actions

github-actions Bot commented Oct 29, 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 7002 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp L3785-3786
PR 10049 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp L3829-3830, L3832, L4069-4071
PR 12575 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp L1181
PR 13248 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp L3832
PR 13963 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp L3832
PR 14262 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp L3942

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/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 1395 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 1896 docs/dev/ENVIRONMENT.md
PR 4472 docs/dev/ENVIRONMENT.md
PR 5021 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/libs/prx/libSceAgcDriver/tests/execution/SampledCacheBudget.cpp
PR 5609 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 5925 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6186 core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/ENVIRONMENT.md
PR 6187 core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6188 core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6192 core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6194 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6197 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6209 core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6223 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6280 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6340 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6412 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6481 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6804 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6924 docs/dev/ENVIRONMENT.md
PR 7085 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7449 docs/dev/ENVIRONMENT.md
PR 7457 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/ENVIRONMENT.md
PR 7514 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/ENVIRONMENT.md
PR 7604 core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/ENVIRONMENT.md
PR 7689 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 8004 docs/dev/ENVIRONMENT.md
PR 8484 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/ENVIRONMENT.md
PR 9012 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/execution/SampledCacheBudget.cpp
docs/dev/ENVIRONMENT.md
PR 9289 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/ENVIRONMENT.md
PR 9345 docs/dev/ENVIRONMENT.md
PR 9356 docs/dev/ENVIRONMENT.md
PR 9387 docs/dev/ENVIRONMENT.md
PR 9508 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/libs/prx/libSceAgcDriver/tests/cmake/agc_driver_sampled_cache_budget_tests.cmake
core/libs/prx/libSceAgcDriver/tests/execution/SampledCacheBudget.cpp
docs/dev/ENVIRONMENT.md
PR 9592 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 9852 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/ENVIRONMENT.md
PR 9884 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/libs/prx/libSceAgcDriver/tests/execution/SampledCacheBudget.cpp
PR 10193 core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/libs/prx/libSceAgcDriver/tests/cmake/agc_driver_sampled_cache_budget_tests.cmake
core/libs/prx/libSceAgcDriver/tests/execution/SampledCacheBudget.cpp
docs/dev/ENVIRONMENT.md
PR 10249 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 10442 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/ENVIRONMENT.md
PR 10678 docs/dev/ENVIRONMENT.md
PR 10757 docs/dev/ENVIRONMENT.md
PR 10894 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/ENVIRONMENT.md
PR 10920 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/libs/prx/libSceAgcDriver/tests/execution/SampledCacheBudget.cpp
PR 11435 docs/dev/ENVIRONMENT.md
PR 11436 docs/dev/ENVIRONMENT.md
PR 11444 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 12324 docs/dev/ENVIRONMENT.md
PR 12544 docs/dev/ENVIRONMENT.md
PR 12746 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/ENVIRONMENT.md
PR 12848 docs/dev/ENVIRONMENT.md
PR 12849 docs/dev/ENVIRONMENT.md
PR 12970 docs/dev/ENVIRONMENT.md
PR 13486 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/libs/prx/libSceAgcDriver/tests/execution/SampledCacheBudget.cpp
docs/dev/ENVIRONMENT.md
PR 13707 docs/dev/ENVIRONMENT.md
PR 13793 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/ENVIRONMENT.md
PR 13796 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 13809 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/ENVIRONMENT.md
PR 13863 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/ENVIRONMENT.md
PR 13920 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/ENVIRONMENT.md
PR 13928 core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/libs/prx/libSceAgcDriver/tests/cmake/agc_driver_sampled_cache_budget_tests.cmake
core/libs/prx/libSceAgcDriver/tests/execution/SampledCacheBudget.cpp
docs/dev/ENVIRONMENT.md
PR 13929 core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/libs/prx/libSceAgcDriver/tests/cmake/agc_driver_sampled_cache_budget_tests.cmake
core/libs/prx/libSceAgcDriver/tests/execution/SampledCacheBudget.cpp
docs/dev/ENVIRONMENT.md
PR 14051 docs/dev/ENVIRONMENT.md
PR 14137 core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
PR 14344 docs/dev/ENVIRONMENT.md
PR 14944 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 15059 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/ENVIRONMENT.md
PR 15136 core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/ENVIRONMENT.md
PR 15169 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/ENVIRONMENT.md
PR 15302 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 15529 core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/ENVIRONMENT.md
PR 15548 docs/dev/ENVIRONMENT.md
PR 15570 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/ENVIRONMENT.md

@EagleBearerYS
EagleBearerYS marked this pull request as ready for review October 29, 2026 14:47
@github-actions github-actions Bot removed the perf numbers missing perf pull request without a before and after summary line label Oct 29, 2026
@TechLevelZero

TechLevelZero commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head cda1b61 merged onto main bb04a4f · tested 2026-10-30 00:34 UTC · 21 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,237 passed · 3 failed (0 new, 3 also fail on main) · 40 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,280 of 2,918 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 (858 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_village_draw_cost 105.4 s, ⚠️ agc_driver_bda_device 61.7 s, ⚠️ agc_driver_array_layer_target_cpu 30.2 s
Failing on main too (3, not counted against this PR)
agc_compute_pipeline_inspection
guest_mmap_executable
guest_socket_options_multicast
Passed on retry (1, failed in the parallel run, passed when re-run with a 360 s timeout; not counted against this PR)
agc_driver_array_layer_target_cpu: Timeout in the parallel run
Validated but not compared (2, not in the main baseline's validation pass)
agc_driver_table_index_validation
agc_driver_village_draw_cost
Validation IDs already present on main (4 IDs in 398 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (398 tests): agc_compute_pipeline_replay, agc_driver, agc_driver_address_passes_draw_transitions, agc_driver_address_passes_targets_split, agc_driver_alias_copy_label, agc_driver_array_layer_target, agc_driver_array_layer_target_cpu, agc_driver_bda_anchor_reads, and 390 more
VUID-vkCmdCopyImage-srcImage-01548 (11 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_cpu_write_after_memo, agc_driver_depth_plane_cpu_write_after_page_unwatch, agc_driver_depth_plane_cpu_write_after_partial_unwatch, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_storage_dispatch, and 3 more
VUID-vkCmdCopyImage-srcImage-01551 (11 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_cpu_write_after_memo, agc_driver_depth_plane_cpu_write_after_page_unwatch, agc_driver_depth_plane_cpu_write_after_partial_unwatch, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_storage_dispatch, and 3 more
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (2 tests): agc_driver_prepared_exports, agc_driver_srgb8_color_target
Skipped (40)
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_msaa_dcc_compared_import_2: skipped, the device reports host imports that keep write protection, so the write-watch probe compares none of them
agc_driver_msaa_dcc_compared_import_4: skipped, the device reports host imports that keep write protection, so the write-watch probe compares none of them
agc_driver_msaa_dcc_compared_import_8: skipped, the device reports host imports that keep write protection, so the write-watch probe compares none of them
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_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_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_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_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
video_out_flip_eop_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_eop_main: 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_fresh: 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_labels: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not
Reproduce
git fetch origin cda1b6107769680b384a3064253da0acd64f949d bb04a4f1ea0175e9e4f149f0359a764d62ff3296
git checkout bb04a4f1ea0175e9e4f149f0359a764d62ff3296 && git merge --no-ff cda1b6107769680b384a3064253da0acd64f949d
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.

# Conflicts:
#	core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 30, 2026
@TechLevelZero

TechLevelZero commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head 6a930fc merged onto main 98ddd9c · tested 2026-10-30 16:20 UTC · 34 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,284 passed · 4 failed (0 new, 2 also fail on main, 2 unstable on main) · 40 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,328 of 2,987 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 (863 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_village_draw_cost 90.1 s, ⚠️ agc_driver_bda_device 37.6 s
Unstable on main (2, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_submit_progress: failed in 5 of the last 9 main runs
agc_submit_progress: failed in 5 of the last 9 main runs
Failing on main too (2, not counted against this PR)
guest_mmap_executable
guest_socket_options_multicast
Validated but not compared (2, not in the main baseline's validation pass)
agc_driver_table_index_validation
agc_driver_village_draw_cost
Validation IDs already present on main (4 IDs in 390 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (390 tests): agc_compute_pipeline_replay, agc_driver, agc_driver_address_passes_draw_transitions, agc_driver_address_passes_targets_split, agc_driver_array_layer_target_cpu, agc_driver_bda_span_reads_draw_pipeline, agc_driver_bindless_images, agc_driver_branch_past_endpgm, and 382 more
VUID-vkCmdCopyImage-srcImage-01548 (13 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_cpu_write_after_memo, agc_driver_depth_plane_cpu_write_after_page_unwatch, agc_driver_depth_plane_cpu_write_after_partial_unwatch, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_plane_sampling, and 5 more
VUID-vkCmdCopyImage-srcImage-01551 (13 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_cpu_write_after_memo, agc_driver_depth_plane_cpu_write_after_page_unwatch, agc_driver_depth_plane_cpu_write_after_partial_unwatch, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_plane_sampling, and 5 more
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (2 tests): agc_driver_prepared_exports, agc_driver_srgb8_color_target
Skipped (40)
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_msaa_dcc_compared_import_2: skipped, the device reports host imports that keep write protection, so the write-watch probe compares none of them
agc_driver_msaa_dcc_compared_import_4: skipped, the device reports host imports that keep write protection, so the write-watch probe compares none of them
agc_driver_msaa_dcc_compared_import_8: skipped, the device reports host imports that keep write protection, so the write-watch probe compares none of them
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_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_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_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
video_out_flip_eop_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_eop_main: 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_fresh: 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_labels: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is eithe
Reproduce
git fetch origin 6a930fc672d7beef09cd45cd9552db04735d318a 98ddd9c1792bbab016ceed5db267a93d1d61f00a
git checkout 98ddd9c1792bbab016ceed5db267a93d1d61f00a && git merge --no-ff 6a930fc672d7beef09cd45cd9552db04735d318a
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.

@bunbeans2-arch

Copy link
Copy Markdown
Contributor

An AMD RDNA 4 run on Windows of 6a930fc672, since the GPUs tested are NVIDIA and lavapipe.

Windows 11 Pro 10.0.22631, AMD Radeon RX 9070 XT (1002:7550, driver 32.0.32015.7029, amdvlk64), MSYS2 UCRT64 g++ 16.1.0, Release. ANYPS5_REQUIRE_VULKAN=1, ANYPS5_NO_SHADER_CACHE=1, VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation; with VK_LOADER_DEBUG=layer the loader logs Insert instance layer "VK_LAYER_KHRONOS_validation" in every run of every test below that creates a Vulkan instance. This head merged onto main f7f03daf52, 3 runs per side:

  • This head: agc_driver_table_index_validation passes 3 of 3 and prints passed for array, compared, cpu, driver, import, pending, release, table and unwatch. Each run also prints remap: skipped on Windows, so the remap case isn't covered here. agc_driver_village_draw_cost passes 3 of 3.
  • This head: agc_driver_recorder, the agc_recorder_* tests and agc_driver_lookup_log_fits_build pass 3 of 3, as on main.
  • No VUID- line on either side.

AI-assisted: yes (Claude Code)

With APS5_TABLE_INDEX=1 the write index's own fast proof counted a storage
image's collect refusal, its fast-fail reason and a depth-guard refusal, and
the ordinary fast proof the index falls back to counted them again. The
index's proof now counts none of them, so the fallback counts each once, as
without the index. No proof outcome changes.

agc_driver_resource_cache_collect_refusals_index runs the collect refusal
test with the index on.
With APS5_TABLE_INDEX=1 a Pending failure of the write index's own fast
proof counted its pending images (foreign, snapshot and T1 eligible),
and the ordinary fast proof the index falls back to counted them again.
countPendingFail now counts nothing inside the index's proof, as the
collect refusal and fast-fail counts already do, so the fallback counts
each once, as without the index. No proof outcome changes.

ShaderResources::PendingFailCounts reads the three counters beside
CollectRefusalCounts. agc_driver_resource_cache_pending_fail_count and
its _index twin prove a template over a host-imported surface, whose
binding views its storage image, while a smaller storage image over the
same memory has results pending: each proof counts one foreign and one
T1-eligible pending fast-fail, with the index on and off. The imports
keep the write watch (APS5_WRITE_WATCH_IMPORTS=watch); where the
surface leaves it, the test skips.
@TechLevelZero

TechLevelZero commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head 6e2e6cd merged onto main 6b48aee · tested 2026-10-31 06:16 UTC · 23 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,412 passed · 5 failed (0 new, 3 also fail on main, 2 unstable on main) · 42 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,459 of 3,041 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 (913 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_village_draw_cost 53.5 s, ⚠️ agc_driver_bda_device 36.2 s, ⚠️ agc_driver_graphics 32.8 s, ⚠️ agc_driver_depth_clear_hle 32.7 s, ⚠️ agc_driver_graphics_maps_fallback 31.5 s
Unstable on main (2, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_submit_progress: failed in 6 of the last 10 main runs
agc_submit_progress: failed in 6 of the last 10 main runs
Failing on main too (3, not counted against this PR)
agc_submit_progress_no_timeline
guest_mmap_executable
guest_socket_options_multicast
Validated but not compared (5, not in the main baseline's validation pass)
agc_driver_resource_cache_collect_refusals_index
agc_driver_resource_cache_pending_fail_count
agc_driver_resource_cache_pending_fail_count_index
agc_driver_table_index_validation
agc_driver_village_draw_cost
Validation IDs already present on main (4 IDs in 421 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (421 tests): agc_compute_pipeline_replay, agc_driver, agc_driver_address_passes, agc_driver_address_passes_draw_transitions, agc_driver_address_passes_targets_split, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, and 413 more
VUID-vkCmdCopyImage-srcImage-01548 (13 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_cpu_write_after_memo, agc_driver_depth_plane_cpu_write_after_page_unwatch, agc_driver_depth_plane_cpu_write_after_partial_unwatch, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_plane_sampling, and 5 more
VUID-vkCmdCopyImage-srcImage-01551 (13 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_cpu_write_after_memo, agc_driver_depth_plane_cpu_write_after_page_unwatch, agc_driver_depth_plane_cpu_write_after_partial_unwatch, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_plane_sampling, and 5 more
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (1 test): agc_driver_srgb8_color_target
Skipped (42)
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_msaa_dcc_compared_import_2: skipped, the device reports host imports that keep write protection, so the write-watch probe compares none of them
agc_driver_msaa_dcc_compared_import_4: skipped, the device reports host imports that keep write protection, so the write-watch probe compares none of them
agc_driver_msaa_dcc_compared_import_8: skipped, the device reports host imports that keep write protection, so the write-watch probe compares none of them
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_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_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_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
video_out_flip_eop_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_eop_main: 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_fresh: 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 6e2e6cd6de9300f14bb2fa48c1e2791539a095ad 6b48aee5d2ea9fce6155163d78f8ce8dc84f7827
git checkout 6b48aee5d2ea9fce6155163d78f8ce8dc84f7827 && git merge --no-ff 6e2e6cd6de9300f14bb2fa48c1e2791539a095ad
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.

The conflict in core/libs/prx/libSceAgcDriver/CMakeLists.txt from boykopovar#12862's split is resolved with tools/agc_test_split.py resolve, which moves this PR's test registrations into tests/cmake/.
@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 31, 2026
@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head 4922da2 merged onto main 0836dfd · tested 2026-10-31 22:30 UTC · 26 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,449 passed · 5 failed (0 new, 4 also fail on main, 1 unstable on main) · 44 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,498 of 3,087 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 (929 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_lookup_log_fits_build 71.9 s, ⚠️ agc_driver_pipeline_journal 57.2 s, ⚠️ agc_driver_graphics_maps_fallback 36.3 s
Unstable on main (1, these also failed in recent main runs on this machine; not counted against this PR)
agc_submit_progress: failed in 7 of the last 10 main runs
Failing on main too (4, not counted against this PR)
agc_driver_idle_store_yields
agc_driver_image_table
guest_mmap_executable
guest_socket_options_multicast
Validated but not compared (3, not in the main baseline's validation pass)
agc_driver_resource_cache_collect_refusals_index
agc_driver_resource_cache_pending_fail_count
agc_driver_resource_cache_pending_fail_count_index
Validation IDs already present on main (5 IDs in 476 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (476 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 468 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_prepared_exports
VUID-VkShaderModuleCreateInfo-pCode-08737 (1 test): agc_driver_image_sample_derivatives
Skipped (44)
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_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_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
video_out_flip_eop_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_eop_main: 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_fresh: 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_f
Reproduce
git fetch origin 4922da2dec19323bf004487e7703886158d23295 0836dfdf4fecb1e0326100c490476e15d3a74da5
git checkout 0836dfdf4fecb1e0326100c490476e15d3a74da5 && git merge --no-ff 4922da2dec19323bf004487e7703886158d23295
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.

@github-actions github-actions Bot added the build label Nov 1, 2026
@oneandonlydean

Copy link
Copy Markdown
Collaborator

@EagleBearerYS two points on 4922da2dec.

  1. Overflow cleanup can drop writes newer than the proved baseline. Once a subscription has MaxRecordedBumps bumps, later bumps aren't recorded and overflowedAt is set. TrimSubscriptionBumps(sub, B) then clears the overflow and all bumps whenever overflowedAt <= B. But B is read before the proof work (ShaderResources.cpp 3870 before fastRevalidate, and indexBaseline at 4105 before the full revalidation that runs after an overflow fallback), and CPU/driver/pending stores can bump the subscription from other threads in between. Those bumps are newer than B, weren't recorded because of the overflow, and the trim then forgets they happened, so the next partial proof's SubscriptionBumpsSince(B) returns a list without them. Could you clear the overflow only when the subscription's generation still equals B (checked under the index mutex), and otherwise keep it set and erase only bumps <= B? A case that overflows, bumps after the baseline read and then expects the next proof to fall back would pin it.

  2. agc_driver_table_index_validation doesn't run in ctest. Execution tests are EXCLUDE_FROM_ALL and only registered through agc_add_default_test or a tests/cmake/<name>.cmake, and there's neither for it. It also needs APS5_TABLE_INDEX, so the ten event-source cases never run in CI. Please add a tests/cmake/agc_driver_table_index_validation_tests.cmake with ENVIRONMENT "ANYPS5_NO_SHADER_CACHE=1;APS5_TABLE_INDEX=1" and SKIP_RETURN_CODE 77, and return VulkanTestSkipped (77) rather than 0 when there's no write watch, so a machine without it shows as skipped, not passed.

A concrete sequence for point 1: fill the 1,024-entry history, overflow at generation G, take the fallback baseline G, finish that proof, then bump another block at G+1 before the receipt trims G. The G+1 bump isn't recorded, trimming G clears the overflow marker, and on the next call SubscriptionBumpsSince succeeds with no blocks, so the partial index path can accept without checking the changed element. (Found from source and a small state-machine reproduction, not a native driver run.)

This also changes Graphics/src/ShaderResources.cpp alongside #12921 and the two conflict there; could you note on both which one lands first? Please keep the #12921 second-merge test adjustment and the #9508/#10894 proof interactions explicit when composing them.

…e trimmed baseline

TrimSubscriptionBumps cleared an overflowed subscription's marker and its
whole history whenever the overflow was at or before the trimmed generation.
A bump between the proof's baseline read and the trim is newer than the
baseline and went unrecorded because of the overflow, so the next partial
proof listed no block for it. Clear the marker only while the subscription's
generation still equals the baseline, under the index mutex; otherwise keep
it and drop only the bumps at or before the baseline.
…d skip it without a write watch

The default execution-test registration already runs the test. Its
fragment appends APS5_TABLE_INDEX=1 to that registration's environment, and
the test returns 77 when guest memory has no write watch, so such a machine
reports a skip instead of a pass.
@EagleBearerYS

Copy link
Copy Markdown
Contributor Author

@oneandonlydean thanks. Done in 2537d44 and cdcb984:

  1. The overflow trim: TrimSubscriptionBumps now clears an overflowed subscription's marker and history only while the subscription's generation still equals the trimmed baseline. It reads the generation under the index mutex, where bumpSubscriptions increments it. Otherwise the marker stays, and only the bumps at or before the baseline are dropped. Its one caller, noteIndexProof, passes the baseline read at ShaderResources.cpp 4105 or proved from 3870 and 3936; nothing else changes.
    • The case, overflow in TableIndexValidation.cpp, runs your sequence on a real subscription through GuestMemory's calls. It overflows the history with alternating bumps of two blocks, takes the baseline, bumps block 2, trims at the baseline, and requires the next SubscriptionBumpsSince to fail, so the proof falls back. It then checks that a trim at the current generation clears the overflow, and that a new bump is then listed by itself. It doesn't go through a draw: on one thread, no draw sequence puts a bump between the baseline read and the trim and still reaches the trim.
    • Red at the previous head with only the new case added (run): on GitHub's Linux runner it fails with "overflow: trimming the overflowed history at the fallback's baseline forgot the unrecorded bump of block 2 after it, so the next proof would check 0 changed blocks instead of falling back".
  2. The registration: the test was already registered. The default execution-test loop in CMakeLists.txt adds it with ANYPS5_NO_SHADER_CACHE=1 and SKIP_RETURN_CODE 77, and its main() sets APS5_TABLE_INDEX=1 before the write index reads it, so its cases did run in ctest. A fragment with its own add_test fails the configure ("add_test given test NAME "agc_driver_table_index_validation" which already exists in this directory"). So tests/cmake/agc_driver_table_index_validation_tests.cmake appends APS5_TABLE_INDEX=1 to that registration's environment, as agc_driver_draw_cache_reuse_tests.cmake does for its test, and ctest -N stays at the same count. The test now returns 77 when guest memory has no write watch, so such a machine shows a skip, not a pass.
  3. ×10 at cdcb984 (run), this PR's 18-test set:
    • Linux: 18 run, 18 pass, 0 skip, 0 fail.
    • Windows: 18 run, 0 pass, 18 skip (no Vulkan device), 0 fail. So the overflow case has run only on Linux.
  4. Merge order: this PR first, then perf(agc): keep an untracked fast proof across collect epochs on Windows while its write-watch hint has not moved #12921, noted on both. perf(agc): keep an untracked fast proof across collect epochs on Windows while its write-watch hint has not moved #12921 takes the second merge in ShaderResources.cpp, with the test-only update already on test/untracked-proof-index-on-12921. The perf(agc): GPU descriptor heap on VK_EXT_descriptor_heap (APS5_GPU_HEAP) #9508 and perf(agc): reuse a cached resource build that samples a texture remade per use #10894 interactions stay in Related.

@oneandonlydean

Copy link
Copy Markdown
Collaborator

Thanks, 2537d44452 and cdcb98496e cover both points. The overflow marker is now cleared only when the subscription's generation still equals the trim baseline (under the index mutex), and OverflowedHistory pins the sequence. The no-write-watch path returns 77.

A correction to my point 2: I was wrong that agc_driver_table_index_validation didn't run in ctest. The default loop in libSceAgcDriver/CMakeLists.txt (agc_add_default_test) already registers every execution test that isn't on its skip list, and the test sets APS5_TABLE_INDEX=1 itself, so its cases did run. Only the skip return code was a real gap. The new fragment's APS5_TABLE_INDEX=1 is harmless but redundant, and it's fine to keep or drop. Sorry for the noise.

@TechLevelZero

TechLevelZero commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

✅ AMD GPU test: passed

PR head cdcb984 merged onto main 4f41f4c · tested 2026-11-03 15:25 UTC · 39 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,750 passed · 10 failed (0 new, 8 also fail on main, 2 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,818 of 3,811 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 (935 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.3 s, ⚠️ public_headers 61.4 s, ⚠️ agc_driver_image_sample_unnormalized 53.2 s, ⚠️ agc_driver_lazy_resolved_abi 38.4 s, ⚠️ agc_driver_sample_multisample_target 32.2 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 7 of the last 9 main runs
agc_driver_store_over_untracked: failed in 1 of the last 9 main runs
Failing on main too (8, not counted against this PR)
agc_driver_image_table
agc_driver_native_depth_bda_clear
agc_driver_native_multisample_depth
agc_driver_submit_progress
agc_submit_progress
agc_submit_progress_no_timeline
guest_mmap_executable
guest_socket_options_multicast
Validated but not compared (4, not in the main baseline's validation pass)
agc_driver_resource_cache_collect_refusals_index
agc_driver_resource_cache_pending_fail_count
agc_driver_resource_cache_pending_fail_count_index
agc_driver_village_draw_cost
Validation IDs already present on main (4 IDs in 516 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (516 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 508 more
VUID-vkCmdCopyImage-srcImage-01548 (8 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth, agc_driver_stencil_null_feedback, agc_driver_stencil_plane_memory
VUID-vkCmdCopyImage-srcImage-01551 (8 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth, agc_driver_stencil_null_feedback, agc_driver_stencil_plane_memory
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (1 test): agc_driver_srgb8_color_target
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_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_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_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_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_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: DisplayW
Reproduce
git fetch origin cdcb98496ea3c614dddfd1a499d5b93db07900d6 4f41f4c375f5abb487dbd184fbc150f31994d762
git checkout 4f41f4c375f5abb487dbd184fbc150f31994d762 && git merge --no-ff cdcb98496ea3c614dddfd1a499d5b93db07900d6
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.

@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head cdcb984 merged onto main e6f5730 · tested 2026-11-01 14:18 UTC · 28 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,488 passed · 4 failed (0 new, 3 also fail on main, 1 unstable on main) · 45 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,537 of 3,148 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 (936 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 118.6 s, ⚠️ agc_driver_graphics 30.1 s
Unstable on main (1, these also failed in recent main runs on this machine; not counted against this PR)
agc_submit_progress_no_timeline: failed in 8 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
Validated but not compared (3, not in the main baseline's validation pass)
agc_driver_resource_cache_collect_refusals_index
agc_driver_resource_cache_pending_fail_count
agc_driver_resource_cache_pending_fail_count_index
Validation IDs already present on main (5 IDs in 484 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (484 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 476 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_prepared_exports
VUID-VkShaderModuleCreateInfo-pCode-08737 (1 test): agc_driver_image_sample_derivatives
Skipped (45)
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_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_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
video_out_flip_eop_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_eop_main: 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_fps_limit: 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_o
Reproduce
git fetch origin cdcb98496ea3c614dddfd1a499d5b93db07900d6 e6f57307fa7f47165d7fc1bee945abdb2f6816e7
git checkout e6f57307fa7f47165d7fc1bee945abdb2f6816e7 && git merge --no-ff cdcb98496ea3c614dddfd1a499d5b93db07900d6
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.

@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Nov 4, 2026
Texture.cpp conflicts at the top of StorageTexture::markLayersPending,
where boykopovar#10256 records the image's layout write and this branch notes the
guest range as GPU-pending. The two are independent, and the merge keeps
both, main's first.
@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head 80ea80e merged onto main 5b1d381 · tested 2026-11-04 08:09 UTC · 36 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,836 passed · 6 failed (0 new, 3 also fail on main, 3 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,892 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 (979 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.4 s
Unstable on main (3, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_pipeline_journal: failed in 3 of the last 10 main runs
agc_submit_progress: failed in 4 of the last 10 main runs
agc_submit_progress_no_timeline: failed in 3 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
Validated but not compared (4, not in the main baseline's validation pass)
agc_driver_resource_cache_collect_refusals_index
agc_driver_resource_cache_pending_fail_count
agc_driver_resource_cache_pending_fail_count_index
agc_driver_table_index_validation
Validation IDs already present on main (13 IDs in 543 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (543 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 535 more
VUID-VkShaderModuleCreateInfo-pCode-08737 (8 tests): agc_driver_dpp16_operands, agc_driver_dpp8_pk_fmac, agc_driver_dx10_clamp, agc_driver_float16_fma_rounding, agc_driver_float16_unused_nan_payloads, agc_driver_packed_alu, agc_driver_packed_f16_denormal_modes, agc_driver_packed_float16_native
VUID-VkShaderModuleCreateInfo-pCode-08739 (8 tests): agc_driver_dpp16_operands, agc_driver_dpp8_pk_fmac, agc_driver_dx10_clamp, agc_driver_float16_fma_rounding, agc_driver_float16_unused_nan_payloads, agc_driver_packed_alu, agc_driver_packed_f16_denormal_modes, agc_driver_packed_float16_native
VUID-VkShaderModuleCreateInfo-pCode-08741 (8 tests): agc_driver_dpp16_operands, agc_driver_dpp8_pk_fmac, agc_driver_dx10_clamp, agc_driver_float16_fma_rounding, agc_driver_float16_unused_nan_payloads, agc_driver_packed_alu, agc_driver_packed_f16_denormal_modes, agc_driver_packed_float16_native
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 (2 tests): agc_driver_prepared_exports, agc_driver_srgb8_color_target
VUID-VkPipelineShaderStageCreateInfo-module-parameter (1 test): agc_driver_float16_unused_nan_payloads
VUID-VkPipelineShaderStageCreateInfo-pSpecializationInfo-06849 (1 test): agc_driver_float16_unused_nan_payloads
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 80ea80ed5ecb364a2213966dd1951d5ce06fb250 5b1d381d5ad5d9f923326b18479c3bd889cdd588
git checkout 5b1d381d5ad5d9f923326b18479c3bd889cdd588 && git merge --no-ff 80ea80ed5ecb364a2213966dd1951d5ce06fb250
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.

@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Nov 4, 2026
@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ AMD GPU test: passed

PR head 80ea80e merged onto main b8efa62 · tested 2026-11-04 08:19 UTC · 45 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,817 passed · 9 failed (0 new, 8 also fail on main, 1 unstable on main) · 59 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,885 of 3,878 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 (1031 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.3 s, ⚠️ public_headers 84.7 s, ⚠️ agc_driver_image_sample_unnormalized 76.8 s, ⚠️ agc_driver_lazy_resolved_abi 53.8 s, ⚠️ agc_driver_lazy_resolved_abi_switch_set 45.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 (8, not counted against this PR)
agc_driver_image_table
agc_driver_native_depth_bda_clear
agc_driver_native_depth_buffer_clear
agc_driver_native_depth_clears
agc_submit_progress
agc_submit_progress_no_timeline
guest_mmap_executable
guest_socket_options_multicast
Passed on retry (1, failed in the parallel run, passed when re-run with a 360 s timeout; not counted against this PR)
agc_driver_emulated_color_compare: Timeout in the parallel run; also passed only on retry in 36 other runs in the last 7 days
Validated but not compared (3, not in the main baseline's validation pass)
agc_driver_resource_cache_collect_refusals_index
agc_driver_resource_cache_pending_fail_count
agc_driver_resource_cache_pending_fail_count_index
Validation IDs already present on main (8 IDs in 533 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (533 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 525 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 (1 test): agc_driver_prepared_exports
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 (59)
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_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_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_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_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_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_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 supp
Reproduce
git fetch origin 80ea80ed5ecb364a2213966dd1951d5ce06fb250 b8efa6292ae69dfdebbeffcc869b66ddbb8739fc
git checkout b8efa6292ae69dfdebbeffcc869b66ddbb8739fc && git merge --no-ff 80ea80ed5ecb364a2213966dd1951d5ce06fb250
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.

@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Nov 4, 2026
ShaderResources.cpp conflicts at the end of PrepareDrawBindings, where
boykopovar#13858 moves the descriptor-set writes into writeDrawSets and this branch
keeps the bindings when no snapshot is selected but a texture was rebound.
The merge takes boykopovar#13858's split and keeps this branch's condition on the
early return.
@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Nov 4, 2026
@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head 11af6ef merged onto main b11c7bf · tested 2026-11-04 14:29 UTC · 27 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,851 passed · 7 failed (0 new, 3 also fail on main, 4 unstable on main) · 49 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,907 of 3,894 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 (986 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 (4, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_pipeline_journal: failed in 3 of the last 10 main runs
agc_driver_submit_progress: failed in 3 of the last 10 main runs
agc_submit_progress: failed in 4 of the last 10 main runs
agc_submit_progress_no_timeline: failed in 3 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
Validated but not compared (3, not in the main baseline's validation pass)
agc_driver_resource_cache_collect_refusals_index
agc_driver_resource_cache_pending_fail_count
agc_driver_resource_cache_pending_fail_count_index
Validation IDs already present on main (13 IDs in 551 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (551 tests): agc_driver, agc_driver_address_draw_space_reuse, 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, and 543 more
VUID-VkShaderModuleCreateInfo-pCode-08737 (8 tests): agc_driver_dpp16_operands, agc_driver_dpp8_pk_fmac, agc_driver_dx10_clamp, agc_driver_float16_fma_rounding, agc_driver_float16_unused_nan_payloads, agc_driver_packed_alu, agc_driver_packed_f16_denormal_modes, agc_driver_packed_float16_native
VUID-VkShaderModuleCreateInfo-pCode-08739 (8 tests): agc_driver_dpp16_operands, agc_driver_dpp8_pk_fmac, agc_driver_dx10_clamp, agc_driver_float16_fma_rounding, agc_driver_float16_unused_nan_payloads, agc_driver_packed_alu, agc_driver_packed_f16_denormal_modes, agc_driver_packed_float16_native
VUID-VkShaderModuleCreateInfo-pCode-08741 (8 tests): agc_driver_dpp16_operands, agc_driver_dpp8_pk_fmac, agc_driver_dx10_clamp, agc_driver_float16_fma_rounding, agc_driver_float16_unused_nan_payloads, agc_driver_packed_alu, agc_driver_packed_f16_denormal_modes, agc_driver_packed_float16_native
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-VkPipelineShaderStageCreateInfo-module-parameter (1 test): agc_driver_float16_unused_nan_payloads
VUID-VkPipelineShaderStageCreateInfo-pSpecializationInfo-06849 (1 test): agc_driver_float16_unused_nan_payloads
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 (49)
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_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
video_out_flip_eop_aftergpu: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not av
Reproduce
git fetch origin 11af6efcf0e7874527ae66fa1771a879e69b5324 b11c7bf84f5d2f636ff60166cc3371bd071e24d5
git checkout b11c7bf84f5d2f636ff60166cc3371bd071e24d5 && git merge --no-ff 11af6efcf0e7874527ae66fa1771a879e69b5324
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.

@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ AMD GPU test: passed

PR head 11af6ef merged onto main b11c7bf · tested 2026-11-04 17:28 UTC · 44 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,838 passed · 9 failed (0 new, 8 also fail on main, 1 unstable on main) · 60 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,907 of 3,894 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 (986 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 121.1 s, ⚠️ public_headers 83.3 s, ⚠️ agc_driver_image_sample_unnormalized 50.5 s, ⚠️ agc_driver_sample_multisample_target 48.1 s, ⚠️ agc_driver_lazy_resolved_abi 46.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 (8, not counted against this PR)
agc_driver_image_table
agc_driver_native_depth_bda_clear
agc_driver_native_multisample_depth
agc_driver_submit_progress
agc_submit_progress
agc_submit_progress_no_timeline
guest_mmap_executable
guest_socket_options_multicast
Validated but not compared (3, not in the main baseline's validation pass)
agc_driver_resource_cache_collect_refusals_index
agc_driver_resource_cache_pending_fail_count
agc_driver_resource_cache_pending_fail_count_index
Validation IDs already present on main (8 IDs in 551 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (551 tests): agc_driver, agc_driver_address_draw_space_reuse, 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, and 543 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 (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 (60)
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_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_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_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 platf
Reproduce
git fetch origin 11af6efcf0e7874527ae66fa1771a879e69b5324 b11c7bf84f5d2f636ff60166cc3371bd071e24d5
git checkout b11c7bf84f5d2f636ff60166cc3371bd071e24d5 && git merge --no-ff 11af6efcf0e7874527ae66fa1771a879e69b5324
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.

@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Nov 4, 2026
@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Nov 4, 2026
@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ AMD GPU test: passed

PR head fa7e8e3 merged onto main b611e63 · tested 2026-11-04 23:25 UTC · 40 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,870 passed · 10 failed (0 new, 9 also fail on main, 1 unstable on main) · 60 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,940 of 3,946 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 (991 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.7 s, ⚠️ agc_driver_image_sample_unnormalized 60.7 s, ⚠️ public_headers 57.2 s, ⚠️ agc_driver_sample_multisample_target 52.7 s, ⚠️ agc_driver_lazy_resolved_abi 52.2 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 9 of the last 10 main runs
Failing on main too (9, not counted against this PR)
agc_driver_image_gather_volume
agc_driver_image_table
agc_driver_native_depth_bda_clear
agc_driver_native_multisample_depth
agc_driver_submit_progress
agc_submit_progress
agc_submit_progress_no_timeline
guest_mmap_executable
guest_socket_options_multicast
Passed on retry (1, failed in the parallel run, passed when re-run with a 360 s timeout; not counted against this PR)
agc_driver_recorder: Timeout in the parallel run; also passed only on retry in 22 other runs in the last 7 days
Validated but not compared (4, not in the main baseline's validation pass)
agc_driver_resource_cache_collect_refusals_index
agc_driver_resource_cache_pending_fail_count
agc_driver_resource_cache_pending_fail_count_index
agc_driver_table_index_validation
Validation IDs already present on main (4 IDs in 557 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (557 tests): agc_driver, agc_driver_address_draw_space_reuse, 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, and 549 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
Skipped (60)
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_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_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_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 platf
Reproduce
git fetch origin fa7e8e3dfde1779299d5598f55dc06d06725f10d b611e634f7fc024f0c13e342d96de744448ef1d9
git checkout b611e634f7fc024f0c13e342d96de744448ef1d9 && git merge --no-ff fa7e8e3dfde1779299d5598f55dc06d06725f10d
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.

@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head fa7e8e3 merged onto main acac7c8 · tested 2026-11-05 03:10 UTC · 41 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,887 passed · 7 failed (0 new, 3 also fail on main, 4 unstable on main) · 55 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,949 of 3,960 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 (998 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.1 s, ⚠️ agc_driver_interpolation_modes 36.2 s, ⚠️ agc_driver_image_sample_unnormalized 31.3 s
Unstable on main (4, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_pipeline_journal: failed in 3 of the last 10 main runs
agc_driver_submit_progress: failed in 2 of the last 10 main runs
agc_submit_progress: failed in 3 of the last 10 main runs
agc_submit_progress_no_timeline: failed in 2 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
Validated but not compared (4, not in the main baseline's validation pass)
agc_driver_resource_cache_collect_refusals_index
agc_driver_resource_cache_pending_fail_count
agc_driver_resource_cache_pending_fail_count_index
agc_driver_table_index_validation
Validation IDs already present on main (9 IDs in 557 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (557 tests): agc_driver, agc_driver_address_draw_space_reuse, 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, and 549 more
VUID-VkShaderModuleCreateInfo-pCode-08737 (14 tests): agc_driver_dpp16_operands, agc_driver_dpp8_pk_fmac, agc_driver_dx10_clamp, agc_driver_f16_fma_denormal_modes, agc_driver_f16_fma_invalid_nan, agc_driver_float16_fma_rounding, agc_driver_float16_modifiers, agc_driver_float16_native, and 6 more
VUID-VkShaderModuleCreateInfo-pCode-08739 (14 tests): agc_driver_dpp16_operands, agc_driver_dpp8_pk_fmac, agc_driver_dx10_clamp, agc_driver_f16_fma_denormal_modes, agc_driver_f16_fma_invalid_nan, agc_driver_float16_fma_rounding, agc_driver_float16_modifiers, agc_driver_float16_native, and 6 more
VUID-VkShaderModuleCreateInfo-pCode-08741 (14 tests): agc_driver_dpp16_operands, agc_driver_dpp8_pk_fmac, agc_driver_dx10_clamp, agc_driver_f16_fma_denormal_modes, agc_driver_f16_fma_invalid_nan, agc_driver_float16_fma_rounding, agc_driver_float16_modifiers, agc_driver_float16_native, and 6 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 (2 tests): agc_driver_prepared_exports, agc_driver_srgb8_color_target
VUID-VkPipelineShaderStageCreateInfo-module-parameter (1 test): agc_driver_float16_unused_nan_payloads
VUID-VkPipelineShaderStageCreateInfo-pSpecializationInfo-06849 (1 test): agc_driver_float16_unused_nan_payloads
Skipped (55)
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_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_host_resolution_disabled: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_host_resolution_four_k: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_host_resolution_height_only: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_host_resolution_limit: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_host_resolution_malformed: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_host_resolution_width_only: 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
Reproduce
git fetch origin fa7e8e3dfde1779299d5598f55dc06d06725f10d acac7c854182a1674162f5e623aa25a6469985ae
git checkout acac7c854182a1674162f5e623aa25a6469985ae && git merge --no-ff fa7e8e3dfde1779299d5598f55dc06d06725f10d
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.

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* build docs perf Performance change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants