Skip to content

fix(agc): import a native multisample D32S8 target whose stencil plane the guest stored its clear value into - #13023

Open
JAB-dev wants to merge 24 commits into
boykopovar:mainfrom
JAB-dev:fix/agc-import-d32s8-stored-stencil-clear
Open

JAB-dev wants to merge 24 commits into
boykopovar:mainfrom
JAB-dev:fix/agc-import-d32s8-stored-stencil-clear

Conversation

@JAB-dev

@JAB-dev JAB-dev commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

What

Arcade Game Zone (PPSA19015) can be refused at the native multisample D32S8 import with guest writes raced native multisample depth import although the separate stencil plane still holds its clear value: the guest stores the clear value over the plane while the host takes the plane, the write tracker sees a store, and the import gives up. The plane is now excluded from the write-generation check and proven by its content instead, read again after a fresh collect. A store of the clear value over the plane imports; a store of any other value is still refused with the same message. A guest that keeps storing the clear value after the import still throws at its next sample, as before.

Tested

Windows 11, NVIDIA RTX 4070 SUPER, driver 610.88.

  • agc_driver_native_depth_separate_stencil: new cases at 2, 4 and 8 samples store the clear value into the plane during the import (imports and samples), and one stores another value (refused). The same-value case fails without the change.
  • agc_driver_native_multisample_depth and the other agc_driver_native_depth_* tests, and check_conventions.py.
  • Validation layers: same VUID sets as the base (main with the open D32S8 import change) in all 37 focused tests (the VUIDs are VUID-VkDeviceCreateInfo-pNext-pNext, VUID-VkPhysicalDeviceProperties2-pNext-pNext, VUID-VkGraphicsPipelineCreateInfo-renderPass-06053 and VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605, all reported by the base), and no log reports was not found but was requested by env var VK_INSTANCE_LAYERS.
  • Arcade Game Zone: 27 minutes of play without a stop together with the publication change and the staged 4_4_4_4 partial write change.

Checklist

🤖 Generated with Claude Code

JAB-dev and others added 2 commits October 29, 2026 23:48
# Conflicts:
#	core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
…guest planes on a guest read

A native multisample D32S8 surface the host has written leaves its guest depth, stencil and HTILE planes stale. A guest read now takes the host samples back, retiles them into the guest layout, writes expanded HTILE words, and keeps every byte the guest itself wrote, proven by the write tracker. A byte it cannot prove (a same-value CPU store) still throws. The owner stays resident after publishing; once a guest byte was merged over the host's, a later draw on that target throws instead of re-importing a cleared image.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@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 15443 core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp L433

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/include/DepthSurface.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp
PR 1395 core/libs/prx/libSceAgcDriver/Graphics/include/DepthSurface.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp
PR 6808 core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp
core/libs/prx/libSceAgcDriver/tests/execution/NativeMultisampleDepth.cpp
PR 7449 core/libs/prx/libSceAgcDriver/Graphics/include/DepthSurface.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp
PR 7642 core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp
PR 9950 core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp
core/libs/prx/libSceAgcDriver/tests/execution/NativeMultisampleDepth.cpp
PR 10193 core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp
PR 10249 core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp
PR 10920 core/libs/prx/libSceAgcDriver/tests/execution/NativeMultisampleDepth.cpp
PR 11444 core/libs/prx/libSceAgcDriver/Graphics/include/DepthSurface.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp
PR 13486 core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp
PR 13863 core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp
PR 13920 core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp
PR 13928 core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp
PR 13929 core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp
PR 14344 core/libs/prx/libSceAgcDriver/Graphics/include/DepthSurface.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp
PR 15059 core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp

… still holds the snapshot

A guest store that landed after the last publication check, or between the
plane commits, was overwritten by the host byte. The commit now exchanges
each changed byte only while it still holds the snapshot value, refuses the
whole part when the tracker saw a CPU store since the last collect, and
throws when any byte was lost, keeping the guest's byte. WriteChanged keeps
its previous behaviour for every other caller.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
JAB-dev and others added 2 commits October 30, 2026 01:25
…for a held target list

The tests for states that are valid but not implemented required one exact
refusal message. They now accept a refusal or a later implementation: a
refusal must change no guest byte, and a publication must write only host
bytes and keep every byte the guest stored. A new case publishes while another
thread holds the GPU mutex and the multisampled target list.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…e the guest stored its clear value into

A guest that stores the stencil clear value over a separate stencil plane while the host takes the plane for import stamped the write tracker, and the import refused with "guest writes raced native multisample depth import" although the plane still held its clear value. The plane is now excluded from the write-generation check and proven by its content instead, read again after a fresh collect: a store of the same value imports, a store of any other value still refuses.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@JAB-dev
JAB-dev force-pushed the fix/agc-import-d32s8-stored-stencil-clear branch from d66ae35 to 790e422 Compare October 29, 2026 23:30
@TechLevelZero

TechLevelZero commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head 790e422 merged onto main 98ddd9c · tested 2026-10-30 14:04 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,371 passed · 5 failed (0 new, 2 also fail on main, 3 unstable on main) · 41 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,417 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 (910 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_bda_device 35.9 s
Unstable on main (3, 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 8 main runs
agc_submit_progress: failed in 5 of the last 8 main runs
agc_submit_progress_no_timeline: failed in 6 of the last 8 main runs
Failing on main too (2, not counted against this PR)
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_job_manager_compute_capacity: Failed in the parallel run; also passed only on retry in 109 other runs in the last 7 days
Validated but not compared (7, not in the main baseline's validation pass)
agc_driver_native_depth_aliased_stencil
agc_driver_native_depth_driver_path
agc_driver_native_depth_driver_queued_fill
agc_driver_native_depth_expand_gate
agc_driver_native_depth_publication
agc_driver_native_depth_separate_stencil
agc_driver_native_depth_stencil
Validation IDs already present on main (4 IDs in 425 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (425 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 417 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 (41)
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 790e4224371f0365c1e15b1a7f675020506d77f9 98ddd9c1792bbab016ceed5db267a93d1d61f00a
git checkout 98ddd9c1792bbab016ceed5db267a93d1d61f00a && git merge --no-ff 790e4224371f0365c1e15b1a7f675020506d77f9
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

Same machine and method as my comment on #13021 (RX 9070 XT, AMD's Windows driver 32.0.32015.7029, validation layer on, main 409fe64199 with this PR merged, every test executable rebuilt): the same results, 3 of 3 runs, 0 VUID- lines. 13 of the 14 native-depth/multisample tests pass. agc_driver_native_depth_driver_queued_fill skips with host imports are compared here, not write-watched, and a queued fill's HTILE proof needs a write-watched import, so its HTILE check does not run on this Windows setup.

AI-assisted: yes (Claude Code)

@oneandonlydean oneandonlydean self-assigned this Oct 30, 2026
@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Oct 30, 2026
# Conflicts:
#	core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp
#	core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
@JAB-dev

JAB-dev commented Oct 30, 2026

Copy link
Copy Markdown
Contributor Author

Merged the updated publication branch (which carries main) into this one: no conflicts, the 79 scoped agc_driver tests and the depth plane tests pass on the merged head. The extra merge commit is not part of this PR's change.

@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 30, 2026

@jotitadev jotitadev left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Linux run of head 93673d8da5, with a negative control for the new same-value case.

Setup: Ubuntu 26.04, GCC 15.2, Release. RTX 3070 (NVIDIA 595.99.02) and lavapipe (Mesa 26.0.3), one at a time via VK_DRIVER_FILES. Khronos validation layer 1.4.341, ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1, ctest -j1. The head merged --no-ff onto current main de96e3efbd with no conflicts.

  • Negative control. I took #13021's head (this PR's base) and added only 790e422's test changes, its StencilPlaneRead enum value and the one hook line, with none of the import change. agc_driver_native_depth_separate_stencil then fails on both devices with guest writes raced native multisample depth import. So the new case does catch the refusal this PR removes.
  • This head, focused set, 15 tests: agc_driver_native_multisample_depth, the agc_driver_native_depth_* tests, multisample_retirement, depth_plane_fill and depth_surface_from_storage. 15/15 in 3 of 3 runs on each device, 0 VUID- lines.
  • agc_driver_native_depth_driver_queued_fill runs its HTILE check here instead of skipping. On the RTX 3070 it checks 6 of 6 cases; on lavapipe it checks 4, and the 2-sample cases are unavailable.
  • With the older layer the NVIDIA CI uses (1.3.275), the focused set also passes on the RTX 3070. That layer reports VkDeviceCreateInfo-pNext-pNext and vkCmdCopyImage-srcImage-01548/01551, which the CI already lists for main.
  • Full ^agc suite (without display/flip/lds_atomics64, no layer, --timeout 60): 1136/1136 on the RTX 3070 and 1136/1136 on lavapipe.
  • ninja all plus every agc*_tests target builds. GCC prints no warnings on the lines this PR adds.

GPUs tested: NVIDIA GeForce RTX 3070 (595.99.02, Linux); lavapipe (Mesa 26.0.3, Linux).

Written with AI assistance (Claude Code). I ran the builds and tests above on my machine.

@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head 93673d8 merged onto main bd5d95a · tested 2026-10-31 00:39 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,415 passed · 4 failed (0 new, 4 also fail 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,461 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 (915 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_bda_device 49.3 s, ⚠️ agc_driver_graphics_maps_fallback 30.9 s, ⚠️ agc_driver_graphics 30.3 s
Failing on main too (4, not counted against this PR)
agc_submit_progress
agc_submit_progress_no_timeline
guest_mmap_executable
guest_socket_options_multicast
Validated but not compared (7, not in the main baseline's validation pass)
agc_driver_native_depth_aliased_stencil
agc_driver_native_depth_driver_path
agc_driver_native_depth_driver_queued_fill
agc_driver_native_depth_expand_gate
agc_driver_native_depth_publication
agc_driver_native_depth_separate_stencil
agc_driver_native_depth_stencil
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 93673d8da578840f9ab288ee89df51c6ef59d0ec bd5d95a5e47fcb0ec442d7d5e504ccfa8b6b258a
git checkout bd5d95a5e47fcb0ec442d7d5e504ccfa8b6b258a && git merge --no-ff 93673d8da578840f9ab288ee89df51c6ef59d0ec
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 Oct 31, 2026
# Conflicts:
#	core/libs/prx/libSceAgcDriver/CMakeLists.txt
#	core/libs/prx/libSceAgcDriver/Graphics/include/DepthSurface.hpp
#	core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp
#	core/libs/prx/libSceAgcDriver/tests/execution/NativeMultisampleDepth.cpp
@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 474d598 merged onto main 88e804b · tested 2026-11-02 14:18 UTC · 20 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,551 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,600 of 3,234 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 (971 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.2 s, ⚠️ agc_driver_graphics_maps_fallback 30.5 s, ⚠️ agc_driver_native_depth_clears 30.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 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
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_native_depth_clears: Timeout in the parallel run; also passed only on retry in 5 other runs in the last 7 days
Validated but not compared (1, not in the main baseline's validation pass)
agc_driver_native_depth_publication
Validation IDs already present on main (4 IDs in 495 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (495 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 487 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-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 474d5989695cd1ca836b90923e0d78d3bf299d85 88e804b0a7df1f1ac373a9e2f72fb378d925fdd4
git checkout 88e804b0a7df1f1ac373a9e2f72fb378d925fdd4 && git merge --no-ff 474d5989695cd1ca836b90923e0d78d3bf299d85
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.

@XairRrR XairRrR left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed — approved

The PR's own change (790e422437) proves the separate stencil plane by its content after a fresh collect, instead of by its write generation. It is sound, the focused tests pass, and the new same-value case fails when the old check is put back.

What I ran

Head 474d5989695cd1ca836b90923e0d78d3bf299d85, merged --no-ff onto main 9090972b7e91fd266819cbd77a8b058e177b5682. The merge was clean. The build tree was Release, GCC 14.2.0, Ninja, BUILD_TESTING=ON. The machine is Debian 13 (VM, 32 vCPU Xeon Gold 6136), with Vulkan through lavapipe (Mesa 26.1.6, LLVM 19) and no GPU.

git diff --check 9090972b7e91fd266819cbd77a8b058e177b5682...474d5989695cd1ca836b90923e0d78d3bf299d85
python3 tools/check_conventions.py --base 9090972b7e91fd266819cbd77a8b058e177b5682
ANYPS5_REQUIRE_VULKAN=1 ctest --test-dir build -j8 --test-load 32 --output-on-failure -R "agc_driver_native_(depth|multisample)|agc_driver_multisample_retirement|agc_driver_depth_plane_fill|agc_driver_depth_surface_from_storage"
ANYPS5_REQUIRE_VULKAN=1 ctest --test-dir build -V -R "^agc_driver_native_depth_separate_stencil$"
# negative control (see below)
ninja -C build -j32 -l32 agc_driver_native_multisample_depth_tests
ANYPS5_REQUIRE_VULKAN=1 ctest --test-dir build --output-on-failure -R "^agc_driver_native_depth_separate_stencil$"
# restore merged DepthSurface.cpp, rebuild, rerun
ANYPS5_REQUIRE_VULKAN=1 ctest --test-dir build -R "^agc_driver_native_depth_(separate_stencil|publication)$"
git status --porcelain

Results

Check Result
git diff --check clean
check_conventions.py 0 errors, 1 warning that was already there (see Non-blocking)
Configure / build / libs (script) passed
Selected tests (script): 2099 ran 0 new failures, 0 timeouts; the 7 known failures (agc_driver_division, the denormal-mode tests, unwrap_self, vector_constant_factor_tininess) also fail on main
Validation-layer comparison (script): 757 tests layer loaded in 756, missing in none; 0 tests with new VUID- lines
Focused native-depth set: 17 tests 16 passed, 1 skipped (agc_driver_native_depth_bda_clear, a device limitation), all under 3 s each
agc_driver_native_depth_separate_stencil passed, 1.8 s, checked=42 unavailable=21
agc_driver_native_depth_publication passed, 1.6 s
Worktree after restore git status --porcelain empty
separate_stencil output (merged tree)
Native depth with a separate stencil plane stored the clear value again during import: imported; stored another value: refused
Native depth with a separate stencil plane cases checked=42 unavailable=21
1/1 Test #1675: agc_driver_native_depth_separate_stencil ...   Passed    1.80 sec

Negative control

main's production files cannot be restored as they are: the test needs the DepthPublicationStage::StencilPlaneRead hook, which this branch adds through #13021. So I put back only the import check from main. I replaced the block after the plane read with main's if (!GuestMemory::UnchangedSinceAll(state.initial)) return refuse("guest writes raced native multisample depth import");. The hook and the whole test source stayed the same. After a rebuild, agc_driver_native_depth_separate_stencil failed:

AGC graphics: guest writes raced native multisample depth import
0% tests passed, 1 tests failed out of 1

I then restored the merged DepthSurface.cpp and rebuilt. separate_stencil and publication passed again, and the worktree was back to the merged tree. This agrees with jotitadev's negative control and RNK123's one-expression mutation in the discussion. It is a third run of the same check, on lavapipe and GCC 14.

Findings

Blocking

None.

Non-blocking

  • The diff still carries #13021. Most of the +1009 lines are the publication change (WriteChangedIfHeld, UnchangedSinceLastCollect, PublishToGuest, the publication tests and the debt entry). This PR's own topic is the 15 lines in prepareDepthSampling (core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp:221-241 in the merged tree) and the two new PlaneFault cases. CnRJay already raised this, and the author answered and declared Depends on: #13021. I mention it only so this PR is merged after #13021. I read the publication part only as far as it affects the import change; its full review belongs on #13021.
  • The import reads the stencil plane twice. It now reads the whole plane a second time after the extra collect. At 8 samples and a large extent, that is tens of MB copied again once per import. It is correct, and since it happens once per surface it is unlikely to matter. If it ever shows up in a profile, the first content check could be skipped when the second one runs.
  • The debt-length warning from check_conventions.py is on the "Native multisampled depth sampling" entry (docs/dev/debt/libSceAgcDriver.md:67). That entry is already far over 1000 characters on main, and this branch only shortens it, through #13021's commit. The warning is not from this PR.

Correctness of the change

  • The plane is removed from UnchangedSinceAll only when it was proven by content (provedPlane). Aliased or unproven planes keep the old generation check.
  • After that, the plane's generation is moved forward to a fresh CollectWritesUncached, and the plane is read again.
    • A store that lands before that collect is covered by the reread: a different value refuses with the same message, and the clear value is accepted.
    • A store that lands after the collect is stamped after the new generation, so the existing checks at the next sample catch it. This matches the description's "still throws at its next sample, as before".
  • The depth and HTILE ranges keep their original generations, so nothing changes for them.
  • The behaviour is general and not tied to one title. Nothing new silently succeeds: a different value still refuses.
  • Checklist lines are present: Depends on, Fixes, Unblocks PPSA19015 with its discussion, GPUs tested, and AI-assisted. The PR adds no code comments, and new tests finish well under 30 s.

Not verified

  • Only lavapipe here. separate_stencil reports 21 cases unavailable on this device, so the 2- and 8-sample same-value cases may not all have run on this machine. The discussion has reports that they run on an RTX 3070 (jotitadev) and an RX 9060 XT with RADV (RNK123).
  • No Windows run. I did not check the Windows path, where host imports are compared rather than write-watched.
  • No title run. I did not launch the title. The author's 27-minute Arcade Game Zone run also included two other changes that are not in this PR (the publication branch and a staged 4_4_4_4 partial-write change).
  • #13021's publication code got only a light read. I did not review it in depth.

…ve-d32s8-guest-planes

# Conflicts:
#	core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Nov 2, 2026
@github-actions github-actions Bot added review queue Next in the maintainer review queue: checks pass, no open change request, no conflict and removed needs rebase Conflicts with main, rebase needed labels Nov 3, 2026
@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head f49ecfc merged onto main f6232fc · tested 2026-11-03 05:17 UTC · 20 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,737 passed · 5 failed (0 new, 3 also fail on main, 2 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,791 of 3,743 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.1 s
Unstable on main (2, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_pipeline_journal: failed in 4 of the last 10 main runs
agc_submit_progress_no_timeline: failed in 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
Validation IDs already present on main (4 IDs in 526 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (526 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 518 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_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth, agc_driver_stencil_null_feedback
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_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth, agc_driver_stencil_null_feedback
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (1 test): agc_driver_srgb8_color_target
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_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
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
Reproduce
git fetch origin f49ecfc3ba4ef68f14e2fba312267dde8921aba0 f6232fcfda70644495273f6b8dd88cf0603463d6
git checkout f6232fcfda70644495273f6b8dd88cf0603463d6 && git merge --no-ff f49ecfc3ba4ef68f14e2fba312267dde8921aba0
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 3, 2026
@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ AMD GPU test: passed

PR head f49ecfc merged onto main 7feb37e · tested 2026-11-03 05:27 UTC · 35 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,724 passed · 9 failed (0 new, 8 also fail on main, 1 unstable on main) · 58 skipped (ANYPS5_REQUIRE_VULKAN=1)
Test setup CPU-only tests without a GPU; GPU tests (and any CPU-only test that failed or skipped without one) once on the GPU with VK_LAYER_KHRONOS_validation and ANYPS5_NO_SHADER_CACHE=1; main ran the same way
Test selection 2,791 of 3,743 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, ⚠️ agc_driver_image_sample_unnormalized 44.6 s, ⚠️ public_headers 40.1 s, ⚠️ agc_driver_sample_multisample_target 39.6 s, ⚠️ agc_driver_lazy_resolved_abi 39.0 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 5 of the last 7 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_idle_publish_wait
agc_submit_progress
agc_submit_progress_no_timeline
guest_mmap_executable
guest_socket_options_multicast
Validation IDs already present on main (4 IDs in 526 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (526 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 518 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_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth, agc_driver_stencil_null_feedback
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_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth, agc_driver_stencil_null_feedback
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_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_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: DisplayWindow: Vulkan support is either not co
Reproduce
git fetch origin f49ecfc3ba4ef68f14e2fba312267dde8921aba0 7feb37ee3e30e10139b483fb4df689d5b5b69ab8
git checkout 7feb37ee3e30e10139b483fb4df689d5b5b69ab8 && git merge --no-ff f49ecfc3ba4ef68f14e2fba312267dde8921aba0
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.

…ve-d32s8-guest-planes

# Conflicts:
#	core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp

@XairRrR XairRrR left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-checked — approved

Since my review of 474d598, the only changes are two merges of main: 456c2ef40b into the publication branch, which resolved a conflict in VulkanDevice.cpp, and f49ecfc3ba into this branch. The resolution is correct, and the focused tests still pass. The two new failures in the script's run also happen on main.

What changed since my last review

  • The PR's own commits are unchanged. The range-diff shows all six commits identical (0a3252876f … f6e7798ba9).
  • Merge 456c2ef40b resolved a conflict in core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp. main had added the scratch-pool lookup (ScratchPoolFor) in recordDispatch. The branch's resources.RequireGuestBuffers() now comes right after StoreDrawnLinearTouching, before the scratch-pool block.
  • No new author comments or replies to my review. The description and checklist are unchanged.

What I ran

Head f49ecfc3ba4ef68f14e2fba312267dde8921aba0, merged --no-ff onto main 5cb015caaaaf83f8ee431414ee6a457b5b307d49 (merged tree cf1f9afcfa321796927b3c32e6e4cd60da475eeb). Debian 13 VM, GCC 14.2.0, Release, lavapipe (Mesa 26.1.6).

git diff --check 5cb015caaaaf83f8ee431414ee6a457b5b307d49...f49ecfc3ba4ef68f14e2fba312267dde8921aba0
python3 tools/check_conventions.py --base 5cb015caaaaf83f8ee431414ee6a457b5b307d49
git show --cc 456c2ef40b64 -- core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
ANYPS5_REQUIRE_VULKAN=1 ctest --test-dir build -j8 --test-load 32 -R "agc_driver_native_(depth|multisample)|agc_driver_multisample_retirement|agc_driver_depth_plane_fill|agc_driver_depth_surface_from_storage"
ANYPS5_REQUIRE_VULKAN=1 ctest --test-dir build --output-on-failure -R "^agc_driver_image_sample_lod_clamp_shader_lane$"
# put main's version back in the 9 production files the PR changes, then:
ninja -C build -j32 -l32 agc_driver_image_sample_lod_clamp_tests
ANYPS5_REQUIRE_VULKAN=1 ctest --test-dir build --output-on-failure -R "^agc_driver_image_sample_lod_clamp_shader_lane$"
# restore the merged files, then:
ninja -C build -j32 -l32 agc_driver_image_sample_lod_clamp_tests agc_driver_native_multisample_depth_tests
ANYPS5_REQUIRE_VULKAN=1 ctest --test-dir build -R "^agc_driver_native_depth_(separate_stencil|publication)$"
git status --porcelain
Check Result
git diff --check clean
check_conventions.py 0 errors; the same debt-length warning as before, on docs/dev/debt/libSceAgcDriver.md:67 (already there on main)
Build / libs (script) passed
Selected tests (script): 2235 ran 2 new failures listed, both from main (see below); 0 timeouts
Validation comparison (script): 759 tests layer loaded in 758, missing in none, 0 tests with new VUID- lines
Focused native-depth set: 17 tests 16 passed, 1 skipped (agc_driver_native_depth_bda_clear, a device limitation)
separate_stencil and publication after the restore passed
Worktree after the restore git status --porcelain is empty

The two failures the script lists as new do not come from this PR:

  • agc_driver_image_sample_lod_clamp_shader_lane. This test was added on main by fe18496c95, after the script's baseline 096c455. With the PR's 9 production files restored from main and the target rebuilt, it still fails with the same thread 0 component 1 is 0.000000, expected 0.062500 message.
  • unwrap_self_UnwrapTest_test_new_output_inherits_the_destination_directory_group. This subtest is new on main too, from the unwrap test split (a8090ef04e). It fails on os.chown with EINVAL in this sandbox. The PR touches nothing in tools/.

Previous findings

  • The diff still carries #13021: Still open, non-blocking. The branch still contains the publication series. Merge #13021 first, as Depends on says.
  • The import reads the stencil plane twice: Still open, non-blocking. The code is unchanged (DepthSurface.cpp in prepareDepthSampling).
  • The debt-length warning: No longer applies as a finding against this PR. The warning is unchanged, and the entry was already over the limit on main.

New findings

Blocking

None.

Non-blocking

None. In the resolved recordDispatch, RequireGuestBuffers() still runs before recorder.Commands / OverlapCommands takes the command buffer, which is what 24869a37ea intends. The ScratchPoolFor block main added sits between the two and does not take a command buffer first.

Not verified

  • Negative control not rerun. The test sources and the import change are byte-identical to 474d598 (range-diff =), so the negative control from my previous review still applies.
  • Only lavapipe. No other GPUs, no Windows run and no title run. The NVIDIA and AMD runs in the discussion for this head report 0 new failures and no new validation IDs.

@github-actions github-actions Bot removed the review queue Next in the maintainer review queue: checks pass, no open change request, no conflict label Nov 3, 2026

@XairRrR XairRrR left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-checked — approved

Since my review of f49ecfc, the only change is a new merge of main. It resolves a conflict in Draw.cpp with main's stencil-write-intent depth view (merged into main in 66749882e0). The resolution keeps both sides correctly. The checks pass, and so do the focused tests, including the stencil-plane test that main added.

What changed since my last review

  • The PR's own commits are unchanged. delta.patch shows all six commits identical (0a3252876f … f6e7798ba9).
  • Merge 6e2b8263c2 (main d1ae628bc2 into the publication branch) resolved a conflict in core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp, in two places: prepareDraw and DrawWithRecipe.
    • What main changed: it replaced DepthSurfaceView(...) with DepthSurfaceViewWithStencilWriteIntent(..., writesStencilTarget(state)). Its NoteDepthSurfaceWrite call stayed right after the view.
    • What the branch already had: NoteDepthSurfaceWrite moved later, after resolveDrawResources in prepareDraw and after CheckBufferAliases in DrawWithRecipe.
    • The resolution: it takes main's new view call and keeps the branch's later NoteDepthSurfaceWrite placement, at Draw.cpp:3089 and Draw.cpp:3879. Neither side is lost, and the call is not duplicated.
    • writesDepthTarget already includes writesStencilTarget (Draw.cpp:398), so the moved call still notes stencil-only writes.
  • Merge 4767e11930 (the publication branch into this branch) carries only that main merge.
  • No new author comments or replies. The description and checklist are unchanged.

What I ran

Head 4767e11930a92af5cadcb224b61eef6ee22589ad, merged --no-ff onto main d1ae628bc2f62459cce1e9872ba5632c938c71f2 (merged tree 09053e576e99960cf70ef8fa883c4ab312eb7671). Debian 13 VM, GCC 14.2.0, Release, lavapipe (Mesa 26.1.6).

git show --cc 6e2b8263c246 -- core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
git diff d1ae628bc2f62459cce1e9872ba5632c938c71f2 09053e576e99960cf70ef8fa883c4ab312eb7671 -- core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
git diff --check d1ae628bc2f62459cce1e9872ba5632c938c71f2...4767e11930a92af5cadcb224b61eef6ee22589ad
python3 tools/check_conventions.py --base d1ae628bc2f62459cce1e9872ba5632c938c71f2
ANYPS5_REQUIRE_VULKAN=1 ctest --test-dir build -j8 --test-load 32 --output-on-failure -R "agc_driver_native_(depth|multisample)|agc_driver_multisample_retirement|agc_driver_depth_plane_fill|agc_driver_depth_surface_from_storage|stencil_plane"
git status --porcelain
Check Result
git diff --check clean
check_conventions.py 0 errors. One debt-length warning on docs/dev/debt/libSceAgcDriver.md:67, already there on main
Build / libs (script) passed
Selected tests (script): 2199 ran 0 new failures, 0 timeouts. The 7 known failures also fail on main
Validation comparison (script): 767 tests layer loaded in 766 and missing in none; 0 tests with new VUID- lines
Focused set: 18 tests, including agc_driver_stencil_plane_memory from main 17 passed, 1 skipped (agc_driver_native_depth_bda_clear, a device limitation)
Worktree git status --porcelain is empty

Previous findings

  • The diff still carries #13021: Still open, non-blocking. The branch still contains the publication series. Merge #13021 first, as Depends on says.
  • The import reads the stencil plane twice: Still open, non-blocking. prepareDepthSampling in DepthSurface.cpp is unchanged.

New findings

Blocking

None.

Non-blocking

None.

Not verified

  • Negative control not rerun. The PR's commits are identical to the ones I reviewed before (range-diff =), and the merge changed no test of this PR. The earlier negative control still applies.
  • Only lavapipe. I made no run on another GPU, on Windows, or on a title. The NVIDIA and AMD CI runs in the discussion cover f49ecfc, not this head.

@github-actions github-actions Bot added needs rebase Conflicts with main, rebase needed and removed needs rebase Conflicts with main, rebase needed labels Nov 3, 2026
JAB-dev and others added 2 commits November 3, 2026 10:29
…ve-d32s8-guest-planes

# Conflicts:
#	core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
#	docs/dev/debt/libSceAgcDriver.md
@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Nov 3, 2026

@XairRrR XairRrR left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-checked — approved

Since 4767e11, the only change is a new merge of main. It resolves conflicts in GuestMemory.cpp and docs/dev/debt/libSceAgcDriver.md and keeps both sides in each. The checks and the focused tests pass. The one new VUID- the script reports comes from a test that main added, not from this PR.

What changed since my last review

  • The PR's own commits are unchanged. delta.patch shows all six commits identical (0a3252876f … f6e7798ba9).
  • Merge 0180bafe62 (main 4f41f4c375 into the publication branch) resolved two conflicts:
    • Execution/src/GuestMemory.cpp: main added WriteChanged(..., byteStoreLimit) and WriteChangedKeepingGuest, both through writeChanged(..., keepGuest). The branch had added WriteChangedIfHeld. The resolution keeps all three, placed next to each other. All of the branch's other tracker changes are intact: cpuUnchanged, the walked parameter of rangeUnchanged, storeOwn(..., complete) and UnchangedSinceLastCollect. git diff 4f41f4c375 4e3f9208d2 on this file is exactly the branch's earlier change against d1ae628bc2. main's callers (GuestBufferMemory.cpp:6837, GuestBufferMemory.cpp:6846) and its test (tests/Pm4.cpp:895) still reach WriteChangedKeepingGuest.
    • Debt file: the branch's edited "Native multisampled depth clears" entry, its new "Native D32S8 guest publication" entry and its trimmed sampling entry are kept. main's new "Native multisampled D32S8 depth without HTILE" entry is kept at docs/dev/debt/libSceAgcDriver.md:70.
  • DepthSurface.cpp merged without conflicts with main's import of D32S8 targets without HTILE. I checked how that new owner interacts with publication:
    • Its sampling.initial holds two planes (DepthSurface.cpp:190), so NoteHostWrite captures two.
    • PublishToGuest then throws at its explicit publication.size() == 3u check (DepthSurface.cpp:2184). It fails loudly rather than mis-indexing the stencil plane as HTILE.
  • Merge a4cd5ea600 (the publication branch into this branch) carries only that merge.
  • No new author comments or replies. The description and checklist are unchanged.

What I ran

Head a4cd5ea60044c2ea4e331a0ac99fec155d09027e, merged --no-ff onto main 4f41f4c375f5abb487dbd184fbc150f31994d762 (merged tree 4e3f9208d2d619691bc38032ab1b3250e43bab82). Debian 13 VM, GCC 14.2.0, Release, lavapipe (Mesa 26.1.6).

git show --cc 0180bafe62f4 -- core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp docs/dev/debt/libSceAgcDriver.md
git diff 4f41f4c375 4e3f9208d2 -- core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
git diff d1ae628bc2 6e2b8263c2 -- core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
git diff --check 4f41f4c375f5abb487dbd184fbc150f31994d762...a4cd5ea60044c2ea4e331a0ac99fec155d09027e
python3 tools/check_conventions.py --base 4f41f4c375f5abb487dbd184fbc150f31994d762
env VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation ANYPS5_NO_SHADER_CACHE=1 ANYPS5_REQUIRE_VULKAN=1 VK_LOADER_DEBUG=error,warn,layer ctest --test-dir build -V -R "^agc_driver_native_depth_uniform_planes$"
ANYPS5_REQUIRE_VULKAN=1 ctest --test-dir build -j8 --test-load 32 --output-on-failure -R "agc_driver_native_(depth|multisample)|agc_driver_multisample_retirement|agc_driver_depth_plane_fill|agc_driver_depth_surface_from_storage|stencil_plane"
git status --porcelain
Check Result
git diff --check clean
check_conventions.py 0 errors. One debt-length warning on docs/dev/debt/libSceAgcDriver.md:69 (the sampling entry, which main already flagged)
Build / libs (script) passed
Selected tests (script): 2230 ran 0 new failures, 0 timeouts. The 7 known failures also fail on main
Validation comparison (script): 770 tests layer loaded in 769 and missing in none. One test has new VUID- lines: agc_driver_native_depth_uniform_planes, which did not run on the baseline (see below)
Focused set: 19 tests 18 passed, 1 skipped (agc_driver_native_depth_bda_clear, a device limitation)
Worktree git status --porcelain is empty

About the new VUID. agc_driver_native_depth_uniform_planes was added by main. The script's baseline (d1ae628bc2) is older than that test, so it had nothing to compare against. When I ran the test alone with the layer, it passes and prints 8 × VUID-vkCmdDispatch-groupCountX-00386.

Message
Native D32S8 without HTILE, samples=4: uniform planes imported and sampled, other planes refused
Validation Error: [ VUID-vkCmdDispatch-groupCountX-00386 ] | MessageID = 0x8e927036
vkCmdDispatch(): groupCountX (69144) exceeds device limit maxComputeWorkGroupCount[0] (65535).

69144 is 129 × 67 × 8. The source is the test's own fetch:

  • fetch.Run(batch.Handle(), extent.width * extent.height * samples) in CheckUniformPlanesWithoutHtile (tests/execution/NativeMultisampleDepth.cpp:3165-3167, and again for the stencil plane right after it).
  • Fetch::Run (NativeMultisampleDepth.cpp:519-522) dispatches that count as groupCountX.
  • The extent is {129u, 67u} (NativeMultisampleDepth.cpp:3112).

This PR does not touch that function. The VUID is main's, so I do not count it against this PR. It is worth a separate fix on main: split the dispatch, or use a 2D grid.

Previous findings

  • The diff still carries #13021: Still open, non-blocking. The branch still contains the publication series. Merge #13021 first, as Depends on says.
  • The import reads the stencil plane twice: Still open, non-blocking. The PR's commits are unchanged (range-diff =), and the merge did not touch prepareDepthSampling's stencil proof.

New findings

Blocking

None.

Non-blocking

  • The publication debt entry omits main's D32S8 owners without HTILE (docs/dev/debt/libSceAgcDriver.md:68).
    • The entry lists "D16/D32-only owners" among the cases that throw.
    • Since this merge, a host-written D32S8 owner imported without HTILE (DepthSurface.cpp:190) also throws on a guest read. Its two captured planes fail publication.size() == 3u (DepthSurface.cpp:2184).
    • The behaviour is correct, since it throws, but the gap is not recorded. Suggested fix: add "D32S8 owners without HTILE" to that sentence.

Not verified

  • Negative control not rerun. The PR's commits are identical to the ones I reviewed before, and the merge changed none of this PR's tests. The earlier negative control still applies.
  • No main-only rerun of the new VUID.
    • I could not rebuild the test binary with the PR's files restored from main: CMake regeneration is not permitted in my sandbox.
    • I attribute the VUID to main from the source instead. The dispatch size comes from main's unchanged test code, which this PR does not modify.
  • Only lavapipe. I made no run on another GPU, on Windows, or on a title. The NVIDIA and AMD CI runs in the discussion cover f49ecfc, not this head.

@github-actions github-actions Bot added the review queue Next in the maintainer review queue: checks pass, no open change request, no conflict label Nov 3, 2026
@TechLevelZero

TechLevelZero commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head a4cd5ea merged onto main 4f41f4c · tested 2026-11-03 16:17 UTC · 30 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,759 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,814 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 (931 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.1 s, ⚠️ agc_driver_lookup_log_fits_build 31.8 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
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 (9 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, agc_driver_stencil_null_feedback, and 1 more
VUID-vkCmdCopyImage-srcImage-01551 (9 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, agc_driver_stencil_null_feedback, and 1 more
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 a4cd5ea60044c2ea4e331a0ac99fec155d09027e 4f41f4c375f5abb487dbd184fbc150f31994d762
git checkout 4f41f4c375f5abb487dbd184fbc150f31994d762 && git merge --no-ff a4cd5ea60044c2ea4e331a0ac99fec155d09027e
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 a4cd5ea merged onto main 4f41f4c · tested 2026-11-03 12:16 UTC · 34 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,746 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,814 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 (931 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.5 s, ⚠️ public_headers 57.6 s, ⚠️ agc_shader_sampler_limits 40.3 s, ⚠️ agc_driver_image_sample_unnormalized 35.5 s, ⚠️ agc_driver_stream_copy 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 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
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 (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 a4cd5ea60044c2ea4e331a0ac99fec155d09027e 4f41f4c375f5abb487dbd184fbc150f31994d762
git checkout 4f41f4c375f5abb487dbd184fbc150f31994d762 && git merge --no-ff a4cd5ea60044c2ea4e331a0ac99fec155d09027e
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.

@adam25136

adam25136 commented Nov 3, 2026 •

Copy link
Copy Markdown

Windows and NVIDIA Blackwell run, for head a4cd5ea600 merged into main 1e658521a0 (git merge --no-ff, clean merge).

GPU NVIDIA GeForce RTX 5080 (10de:2c02), driver 617.42 (32.0.16.1742), Vulkan 1.4.351
Host Windows 10 Pro 22H2 (19045), i9-12900KF, WinLibs GCC 15.2.0 r7, Release, BUILD_TESTING=ON
Selection 2,242 of 3,924 tests, chosen by tools/select_tests.py select from main's build graph for the 12 changed files
Run select_tests.py ctest build --parallel 4 --timeout 120 with ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1; main ran the full suite the same way on this machine
Result 2,228 passed, 12 skipped (the same 12 as on main), 2 failed, 0 new

Both failures fail on main here too: agc_driver_store_over_untracked (#15559, since b6c6549) and agc_driver_direct_write_completion, which fails on main on this machine as well, also when run on its own (33 of 34 runs). No selected test took over 30 s.

The new agc_driver_native_depth_publication is missing from this run because I didn't reconfigure CMake after the merge, so the test wasn't registered when the selection was made (my setup, not the selection tool); run on its own 3 times it passed in 0.95-1.07 s. The 13 other agc_driver_native_depth_* and agc_driver_native_multisample_depth tests in the selection passed; agc_driver_native_depth_driver_queued_fill is skipped here, as on main.

Not run: the Khronos validation layer is not installed on this machine, so this says nothing about VUIDs. PPSA19015 was not run.

Edited after posting: corrected why the new test was missing from the run.

AI-assisted: yes. Claude Code ran the builds and tests and drafted this comment; the numbers are from the runs on this machine.

@JJenkx

JJenkx commented Nov 4, 2026

Copy link
Copy Markdown
Contributor

Windows data from a second title, Spirit of the Island (PPSA13934), whose native multisample depth target is D32S8 at 8 samples. Same scripted new game to the island, Windows / RX 6700 XT. This PR's head a4cd5ea600 was merged locally onto main 1c8c0efc8c (b18c612773; only libSceAgcDriver.prx differs).

With APS5_NO_HOST_IMPORT=1, which makes the stop deterministic here:

Build Runs Stop
main 1c8c0efc8c 4 4/4 at 287.2–287.6 s: guest writes raced native multisample depth import
this PR on 1c8c0efc8c 3 0/3 on the raced import; all 3 at 287.3–287.7 s on guest writes over native multisample depth are not implemented

So for this title the PR does what it says: the import refused on main now goes through. The title then stops at the same moment on the next limit, guest writes over native multisample depth are not implemented, which is out of scope for this change.

For context, without APS5_NO_HOST_IMPORT the same main stops in 2 of 4 runs at about 300 s on native multisample depth publication cannot distinguish an unwritten byte from a same-value guest store, and the other 2 run to 330 s.

AI-assisted: yes.

@ryanc2112

Copy link
Copy Markdown
Contributor

A GFX8 data point: AMD Radeon RX 570 (RADV POLARIS10), Mesa 26.2.5, SteamOS 3.8.28 (Arch distrobox), GCC 16.2.1, Release. Head a4cd5ea600 merged onto main b11c7bf84f (clean merge), with ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation and ctest -V --no-tests=error. No log reports was not found but was requested by env var VK_INSTANCE_LAYERS.

On GFX8, 11 of the 17 agc_driver_native_depth_* tests fail on main for an unrelated reason: the sample shadow lacks depth-attachment usage, which #15750 fixes. So I ran this PR both on its own and on top of #15750. #15750 and this PR merge together cleanly.

agc_driver_native_depth_* (17 tests), 3 runs each:

Result VUID- errors
main 6 pass, 11 fail (#15750's GFX8 failures) 0
This PR the same 6 pass and 11 fail 0
main + #15750 17 of 17 pass 0
main + #15750 + this PR 17 of 17 pass 0

The 1,327 AGC, shader, VideoOut and Vulkan tests, this PR on main, once each:

AI-assisted: yes (Claude Code)

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 review queue Next in the maintainer review queue: checks pass, no open change request, no conflict unblocks title Names a title ID on the Unblocks line

Projects

None yet

Development

Successfully merging this pull request may close these issues.