Skip to content

fix(agc): capture direct-write order under the tracker lock - #15551

Open
rickyalvarez185 wants to merge 2 commits into
boykopovar:mainfrom
rickyalvarez185:fix/agc-direct-write-record-order
Open

rickyalvarez185 wants to merge 2 commits into
boykopovar:mainfrom
rickyalvarez185:fix/agc-direct-write-record-order

Conversation

@rickyalvarez185

Copy link
Copy Markdown
Contributor

What

Capture the direct-write record order while holding the write-tracker lock, independently of whether the destination has valid write-watch proof. MarkDirectWrites previously reused the zero proof value for untracked destinations as its record order; completion could then discard image results recorded after the buffer write once the destination became tracked again.

The existing two-argument MarkPossiblyWritten still returns zero when proof is unavailable. The ordered overload also reserves a distinct order after a failed fresh collect temporarily releases the lock for an unwatch hook.

Adds agc_write_tracking_mark_order, covering empty, tracked and untracked ranges, concurrent generation advances, and a deterministic failed-collect interleaving. No GDS allocation/layout workaround is included.

Tested

Windows 11, WinLibs GCC 15.2.0 UCRT, Release/Ninja; NVIDIA GeForce RTX 4080 SUPER, driver 621.01; Vulkan validation layer 1.4.363.1. GPU tests run at medium integrity with ANYPS5_GPU=4080, ANYPS5_REQUIRE_VULKAN=1, ANYPS5_NO_SHADER_CACHE=1, VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation, and verbose loader/layer logging. The layer's actual insertion and absence of missing-layer warnings were checked, not just its installation.

  • Baseline: clean main at 1e658521a0a599872612bb91949311e2956b5283; agc_driver_direct_write_completion fails. The regression was also bisected to merge 8009be68d7602c728b7d8f7c70880035b4ec343f (perf(agc): back the GDS with anonymous shared memory on integrated GPUs and keep its DMA_DATA on the GPU #13159), while its parent passed on the same GPU.
  • Negative control: removing only the post-suspension generation increment makes the new ordering test fail with a failed fresh collect reused the intervening writer's mark order; restoring it passes. The pre-update candidate passed the direct-write and write-tracking focused set three consecutive times without VUIDs.
  • Current-main focused comparison: identical CTest selection on baseline and change, including the direct-write regression, all write-tracking cases, agc_storage_rewritten_blocks, agc_storage_rewritten_stale_units, agc_driver_prepared_exports and agc_driver_srgb8_color_target. Baseline: 9 pass / 1 fail; change: 11 pass / 0 fail (the additional case is the new ordering test). Both logs have exactly 18 occurrences of VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 from the existing validation controls, with identical VUID-ID multisets, six validation-layer insertions each and no missing-layer warning. The direct-write regression adds no VUID; the focused comparison introduces no new validation error.
  • Complete Release build and libs target succeeded. Full verbose CTest run after the final overlap-avoidance changes: 3925 cases, 3912 passed, 12 skipped, 1 failed. The only failure is agc_driver_store_over_untracked (the first result was not stored), reproduced on clean main at the base above and intentionally left to a separate fix. The full run reports only the same 18 occurrences of the validation ID already present in the focused baseline. The previously intermittent no-timeline test and Windows relinker fixture pass in this completed run; interrupted earlier runs are not counted as completed validation. Relocating the new test's Windows PATH property preserves all 3925 generated test command/property configurations exactly.
  • Conventions, whitespace, and test registration checks passed. The final official pr_overlap.py --branch fix/agc-direct-write-record-order --repo boykopovar/AnyPS5 --base main --jobs 4 reports no direct overlap but exits 2, not clean: 33 other PRs already conflict with main, so its comparisons fail closed. Every one was checked with paired base+PR and change+PR merge trees: identical conflict paths and identical modes/source after reversing only this contribution, ignoring only left-side commit labels on conflict-marker lines. fix(agc): stop frame capture deltas from collecting the previous delta's pages again #14137 is also checked and merges without the former registration collision. All 34 audited heads and the base remained unchanged in the final official rerun. These are source/merge checks, not claims that the other branches build or pass tests.

Validation logs, full-suite summary and per-head overlap evidence: https://gist.github.com/rickyalvarez185/bb546d1d2140addcb2a91bd52ccba2a4

Final head: 30a0b806bf71da658f0e5231bfa79b1c4fdc1b39. Independent static review approved both the runtime patch and final overlap-avoidance changes; final-head focused rerun: 11/11 pass.

  • No real title was tested; no title-unblock or performance claim.

Checklist

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

Keep write-watch proof separate from record order for untracked direct writes. Reserve a fresh order after failed-collect unwatch interleavings and test both normal and suspended-lock paths.
Initialize the optional order output under the lock before the original zero-byte return. Assign the new test its own Windows PATH property instead of editing the shared test list.
@github-actions github-actions Bot added build agc libSceAgc* labels Nov 3, 2026
@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head 30a0b80 merged onto main 1e65852 · tested 2026-11-03 21:11 UTC · 33 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,751 passed · 7 failed (0 new, 3 also fail on main, 4 unstable on main) · 48 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,806 of 3,818 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_pipeline_journal 120.3 s, ⚠️ agc_driver_lazy_resolved_abi 36.6 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 4 of the last 10 main runs
agc_driver_submit_progress: failed in 5 of the last 10 main runs
agc_submit_progress: failed in 6 of the last 10 main runs
agc_submit_progress_no_timeline: failed in 5 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 (1, not in the main baseline's validation pass)
agc_write_tracking_mark_order
Validation IDs already present on main (4 IDs in 517 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (517 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 509 more
VUID-vkCmdCopyImage-srcImage-01548 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-vkCmdCopyImage-srcImage-01551 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (1 test): agc_driver_srgb8_color_target
Skipped (48)
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_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 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 co
Reproduce
git fetch origin 30a0b806bf71da658f0e5231bfa79b1c4fdc1b39 1e658521a0a599872612bb91949311e2956b5283
git checkout 1e658521a0a599872612bb91949311e2956b5283 && git merge --no-ff 30a0b806bf71da658f0e5231bfa79b1c4fdc1b39
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.

@Galluno

Galluno commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

Tested on a second machine, merged onto current main: an RTX 3080 that reproduces #15564 on unchanged main.

Windows 11 Pro 10.0.26340, WinLibs GCC 15.2.0 r7, Ninja, Release, BUILD_TESTING=ON. NVIDIA GeForce RTX 3080 (10de:2206), driver 617.42. Vulkan SDK 1.4.363.1. Every run had ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation. VK_LOADER_DEBUG=layer showed the layer inserted for both the instance and the device. No log contains was not found but was requested by env var VK_INSTANCE_LAYERS.

Each tree ran ctest --test-dir build -R '^agc' -j4 -V:

Tree ^agc agc_driver_direct_write_completion VUID-
main 04a9eb4fa2 1325 / 1328 fails: 15 of 15 runs held the image results pending, 15 dropped them 26
main 04a9eb4fa2 + this PR (30a0b806bf, merges cleanly) 1328 / 1329 passes: 0 dropped them, 0 of 15 runs with a CPU write before the completion kept the image results, 0 lost the write 26, same IDs and same tests
  • The 26 VUID- messages are identical in both runs: 18 VkPipelineColorBlendStateCreateInfo-pAttachments-00605 and 8 VkSamplerCreateInfo-addressMode*, from the same three tests. So this PR adds none.
  • agc_write_tracking_mark_order passes.
  • The other two main failures were agc_driver_pm4_replay (timed out at 30 s just after starting, in the parallel run) and agc_driver_pm4_replay_tool (not run because of it). Both pass with this PR.
  • With this PR, agc_driver_draw_shader_failure_materialization failed once in the parallel run: the draw-shader-request-failed record (submission 1) does not correlate with the draw-error record (submission ). It then passed 10 of 10 with the layer and 10 of 10 without it, run on its own. It also passed in the main run, so it looks intermittent under load, but I can't rule out a connection with one failure.

The cause I traced on this machine matches the PR description. The GDS is mapped when the device is created, so it takes the first arena block. The test's surfaces then start at 0x200010000, and each gets a 256 KiB host import of its own instead of one 8 MiB import (APS5_TRACE_HOST_IMPORT=1). At record time the Fill's range is not covered by the write watch, so MarkPossiblyWritten returned 0 and directWritesGeneration stayed 0. StampKeepingNewerResults then kept nothing at the completion. Separately, I had made the same one-line change (record TrackerGeneration() when the stamp is 0), and it gave the same results. This PR's ordered overload also covers the failed-collect interleaving.

AI-assisted: yes (Claude Code)

@Superseabas

Copy link
Copy Markdown

Windows run of head 30a0b806bf merged onto main b11c7bf84f (clean merge, local only), on the two GPUs from #15564, including the integrated Radeon that #15610 does not cover.

Windows 11 Home 10.0.26200, WinLibs GCC 16.2.0 (x86_64-ucrt-posix-seh, r3), Release, BUILD_TESTING=ON. ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1, ANYPS5_GPU selecting the device (confirmed by Selected GPU).

agc_driver_direct_write_completion, 10 runs per GPU:

GPU main this PR this PR with main's GuestBufferMemory.cpp
NVIDIA GeForce RTX 5070 Ti (10de:2c05, discrete), 621.01 6 of 10 10 of 10 3 of 5
AMD Radeon Graphics, Ryzen 7 7700X iGPU (1002:164e, integrated), AMD 26.10.1 0 of 10 10 of 10 3 of 5
  • With VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation, -R '^(agc_driver_direct_write_completion|agc_driver_gds_dma_fill.*|agc_driver_linear_target_direct_write_completion|agc_write_tracking.*)$': main passes 8 of 9 on each GPU (agc_driver_direct_write_completion fails), and this PR passes 10 of 10 on each, including the new agc_write_tracking_mark_order. There are no VUID- lines and no missing-layer line on either side.
  • agc_driver_gds_dma_fill and agc_driver_linear_target_direct_write_completion pass 3 of 3 on each GPU.
  • agc_write_tracking* passes 3 of 3 runs.
  • check_conventions.py --base main passes on the merge.
  • For comparison, fix(agc): leave the GDS unallocated until it is used when no importable GDS was requested #15610 at 7c53e47f34 on the same machine: RTX 5070 Ti 10 of 10, Radeon iGPU 1 of 10.

AI-assisted: yes (Claude Code)

@JJenkx

JJenkx commented Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

Windows AMD check of head 30a0b806bf, against plain main fc23faa40a built from the same tree. It fixes #15564 on this card.

Setup: Windows 11 Enterprise 22621, WinLibs GCC 15.2 UCRT, Release, Radeon RX 6700 XT 12 GB (discrete), AMD driver 26.10.1. Run with ANYPS5_REQUIRE_VULKAN=1 and Vulkan validation layers 1.4.363, through the Windows test queue.

main fc23faa40a this PR merged (0f64ff5675, clean)
agc_driver_direct_write_completion fails: "15 of 15 runs held the image results pending, 15 dropped them" passes 3 of 3: "15 of 15 … held, 0 dropped them"
agc_write_tracking — passes 3 of 3
  • Validation layer: loaded in each run, with no VUID- errors on either side.
  • CPU-write case: the PR's runs also print "0 of 15 runs with a CPU write before the completion kept the image results, 0 lost the write" (quoted as printed; the test passes with it).

So on discrete RDNA 2 too, the drop traced in #15564 is gone with this change. That makes three GPUs with this result, together with the NVIDIA reports on the issue.

AI-assisted: yes.

@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ AMD GPU test: passed

PR head 30a0b80 merged onto main e772fb2 · tested 2026-11-05 18:06 UTC · 22 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,932 passed · 7 failed (0 new, 5 also fail on main, 2 unstable on main) · 61 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 3,000 of 4,074 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 (973 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.2 s, ⚠️ public_headers 79.5 s, ⚠️ agc_driver_image_sample_unnormalized 32.9 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 9 of the last 10 main runs
agc_submit_progress_no_timeline: failed in 9 of the last 10 main runs
Failing on main too (5, not counted against this PR)
agc_driver_image_table
agc_driver_native_depth_bda_clear
agc_driver_native_multisample_depth
guest_mmap_executable
guest_socket_options_multicast
Validated but not compared (1, not in the main baseline's validation pass)
agc_write_tracking_mark_order
Validation IDs already present on main (4 IDs in 589 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (589 tests): agc_compute_pipeline_replay, 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, and 581 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
Skipped (61)
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_recorded_draw_staging: skipped, the device does not keep host imports write-watched, so the target is never resident
agc_driver_unit_shadow: 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_shadowed_key_stores: skipped, the device imports no watched host memory under a unit shadow
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_net_ctl_disconnected: 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_device_capability: 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 availabl
Reproduce
git fetch origin 30a0b806bf71da658f0e5231bfa79b1c4fdc1b39 e772fb25cc72ee5faf77847f06bbc69533016e82
git checkout e772fb25cc72ee5faf77847f06bbc69533016e82 && git merge --no-ff 30a0b806bf71da658f0e5231bfa79b1c4fdc1b39
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.

@AlfaRojo

AlfaRojo commented Nov 6, 2026

Copy link
Copy Markdown

Windows check of head 30a0b806bf, merged onto main b611e634f7 (803749707e, clean merge), on both vendors.

Setup: Windows 11 Pro (10.0.26200), WinLibs GCC 15.2.0 r7 UCRT, Release,
-DANYPS5_AGC_EXECUTION_TESTS=LdsTreeReduction;ScratchPool;QuadPixelMask;DirectWriteCompletion;PixelLds;SampleOrder, ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1, ANYPS5_GPU selecting the device; no validation layer on this machine.

GPU main b611e634f7 with this PR
NVIDIA GeForce RTX 4070 (10de:2786, driver 32.0.16.1692) 0 of 3: 15 of 15 runs held the image results pending, 1 dropped them 3 of 3 pass
AMD Radeon Graphics 1002:13c0 (RDNA 2 integrated, driver 32.0.21043.5001) 0 of 3: 15 of 15 runs held the image results pending, 6 dropped them 3 of 3 pass

So this closes #15564 on another machine, discrete Ada and integrated RDNA 2 alike.

AI-assisted: yes.

@oneandonlydean oneandonlydean self-assigned this Nov 6, 2026
@irwanrivaldi

Copy link
Copy Markdown
Contributor

Tested on a Radeon 860M (RDNA 3.5, 1002:1114), AMD driver 32.0.32015.7029, Windows 11, WinLibs GCC 16.2.0 UCRT, Release, ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1. No validation layer on this run, so this says nothing about VUIDs.

  • main b11c7bf84f: agc_driver_direct_write_completion fails 5 of 5.
  • main + this PR (30a0b806bf): passes 3 of 3, and agc_write_tracking* (6 tests, including agc_write_tracking_mark_order) pass 3 of 3.

Focused tests only, not the full GPU suite. AI-assisted: yes.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants