Skip to content

test(agc): name the missing mesh shader when the mesh vector window test skips - #13632

Merged
adriadam10 merged 1 commit into
boykopovar:mainfrom
GiannisG1:test/mesh-vector-window-skip-names-mesh-shader
Oct 31, 2026
Merged

adriadam10 merged 1 commit into
boykopovar:mainfrom
GiannisG1:test/mesh-vector-window-skip-names-mesh-shader

Conversation

@GiannisG1

Copy link
Copy Markdown
Contributor

What

agc_driver_mesh_vector_window_waves (from #12233) returns 77 without printing anything on a device without VK_EXT_mesh_shader:

if (!device || !TargetHasCapability(device->Target(), spv::CapabilityMeshShadingEXT)) return VulkanTestSkipped;

ctest reports it as skipped, but tools/check_skips.py needs skipped, and the device's reason in the output, so a job on such a device fails the skip check:

error: agc_driver_mesh_vector_window_waves skipped

This PR splits the gate: no device still returns 77 as before, and a device without the mesh shading capability prints skipped, the device has no VK_EXT_mesh_shader, the wording #12512 uses for the other mesh tests. The llvmpipe skip after it and the test itself are unchanged.

Tested

Linux Mint 22.3, kernel 7.0.0-38, GCC 13.3.0, Release, BUILD_TESTING=ON, on main 16345cad6a. The PR changes only this test's source, so every other test binary is the same as main's. None of these devices runs the test's body: the GTX 1050 Ti and the HD 630 have no VK_EXT_mesh_shader, and llvmpipe stops at its own skip.

agc_driver_mesh_vector_window_waves, 3 runs each:

Device main 16345cad6a this PR
NVIDIA GTX 1050 Ti, 580.178.04 skipped silently; check_skips.py on the full run: error: agc_driver_mesh_vector_window_waves skipped skipped 3/3 with skipped, the device has no VK_EXT_mesh_shader; check_skips.py exit 0 on each run's JUnit file
Intel HD Graphics 630, Mesa 25.2.8 skipped silently; same check_skips.py error skipped 3/3 with the same line; exit 0
llvmpipe, Mesa 25.2.8 skipped with its llvmpipe reason the same, 3/3; exit 0

With VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation (layers 1.3.275), ANYPS5_NO_SHADER_CACHE=1, ANYPS5_REQUIRE_VULKAN=1, ctest -V: no was not found but was requested by env var VK_INSTANCE_LAYERS; VUIDs the same on main and this PR (none on the HD 630, VUID-VkDeviceCreateInfo-pNext-pNext on the other two).

The 226 source-scanning tests (conventions_*, public_headers*, check_compile*, check_main_sync, check_skips) pass, and check_conventions.py, check_test_registration.py and check_main_sync.py are clean. tools/pr_overlap.py --branch: no overlap.

Checklist

  • Based on current main; no other open PR implements the same functions
  • One topic per PR; follow-ups go in a new PR
  • No comments in code except technical debt
  • Unimplemented paths throw (NotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file
  • No notes, investigation .md files or images added to the repository (attach them to this PR)
  • New third-party code is a submodule built from source
  • Generic behaviour, not specific to one title
  • Depends on: none
  • Fixes: none
  • Unblocks: none
  • GPUs tested: Intel HD Graphics 630 (Mesa 25.2.8 ANV), NVIDIA GeForce GTX 1050 Ti (580.178.04), llvmpipe (Mesa 25.2.8); Linux Mint 22.3, kernel 7.0.0-38
  • AI-assisted: yes

🤖 Generated with Claude Code

…est skips

The test returned 77 without a word on a device without VK_EXT_mesh_shader,
so tools/check_skips.py could not tell an expected skip from lost
coverage. Split the gate as the other mesh tests do and print the device
reason.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Eomm0

Eomm0 commented Oct 30, 2026

Copy link
Copy Markdown

Windows/NVIDIA execution check for PR #13632

Tested PR head 81fffab applied without modification to main 7fcab08. The one-file patch applied cleanly; no other proposed changes were included.

Environment: Windows 11 Pro 10.0.26200, AMD Ryzen 7 7800X3D, NVIDIA GeForce RTX 5070 Ti (vendor 0x10de, device 0x2c05), NVIDIA 617.42, WinLibs GCC 15.2.0 UCRT r7, Release, SPIRV-Tools enabled. Khronos validation layer manifest API 1.4.366, from the official Windows nightly asset (archive SHA-256 a0ca3a30a679f6e24252c7501c12b29c4dd8f1de6f93ecf354e6ed2bf6a6b049).

Same test on both builds:

ANYPS5_GPU=NVIDIA GeForce RTX 5070 Ti
ANYPS5_REQUIRE_VULKAN=1
ANYPS5_NO_SHADER_CACHE=1
VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation
VK_LAYER_PATH=<local validation layer directory>
VK_LOADER_DEBUG=layer
ctest --test-dir <build> -R '^agc_driver_mesh_vector_window_waves$' -V --timeout 30 --repeat until-fail:3
  • Main: 3/3 passed, no skips; printed mesh vector window tests passed.
  • PR applied: 3/3 passed, no skips; same success message.
  • Both select the physical RTX 5070 Ti. Both logs explicitly show the Khronos validation layer being loaded and inserted. Neither reports the missing-layer phrase, VUIDs, validation errors or validation warnings for this test.
  • Conventions against origin/main and whitespace checks pass for the applied patch.

This complements the skip-path checks in the PR: the mesh-capable execution path still runs and passes on Windows/NVIDIA. It does not independently retest the unsupported-device message. No game, performance measurement, or full-suite run.

AI-assisted: yes (Codex). These runs were performed locally. Implementation authorship remains with the PR author.

@JJenkx

JJenkx commented Oct 31, 2026

Copy link
Copy Markdown
Contributor

Windows GPU run of head 81fffaba79, merged onto main 0835ec8bdc (clean merge, local only). Windows 11 Enterprise 10.0.22621, Ryzen 9 5950X, Radeon RX 6700 XT with AMD proprietary driver 26.10.1, WinLibs GCC 15.2.0 UCRT r7, Release, BUILD_TESTING=ON, VK_LAYER_KHRONOS_validation 1.4.309.

  • This PR: agc_driver_mesh_vector_window_waves passes 3 of 3 (--repeat until-fail:3). On this device the mesh shader is available, so the test runs instead of skipping, and the new skip message is not exercised here.
  • Validation layer: reports VUID-CullPrimitiveEXT-CullPrimitiveEXT-07036 and VUID-VkShaderModuleCreateInfo-pCode-08737.
  • Control: this PR's test file on main sources passes and reports the same two VUIDs, so they come from main's mesh path, not from this change.

AI-assisted: yes (Claude Code).

@JJenkx

JJenkx commented Oct 31, 2026

Copy link
Copy Markdown
Contributor

A note on the two VUIDs above: they are most likely a false positive in VVL 1.4.309's bundled spirv-val, not a recompiler bug.

EmitMeshEntryPoint (SpirvModuleEmitter.cpp) declares the cull output as a bool array of maxPrimitives, decorated BuiltIn CullPrimitiveEXT and PerPrimitiveEXT. The SPIRV-Tools this repository pins (3rdparty/SPIRV-Tools, ValidateMeshBuiltinInterfaceRules) accepts "either a bool or an array of bool" with PerPrimitiveEXT for that builtin. The older message ("needs to be a boolean value array… is not a bool scalar") comes from the stricter check those rules replaced.

AI-assisted: yes (Claude Code).

@JJenkx

JJenkx commented Oct 31, 2026

Copy link
Copy Markdown
Contributor

Confirmed on the GPU. I built VK_LAYER_KHRONOS_validation from tag vulkan-sdk-1.4.363.0 with the same toolchain and ran the same agc_driver_mesh_vector_window_waves build (main 0835ec8bdc sources with this PR's test file) on the RX 6700 XT. It passes, the layer is loaded from that build (inserted 2 times), and it reports no VUIDs. The two VUIDs above came from VVL 1.4.309's older spirv-val check, not from the recompiler's mesh output.

AI-assisted: yes (Claude Code).

@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head 81fffab merged onto main 6b48aee · tested 2026-10-31 05:30 UTC · 16 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 ✅ 808 passed · 3 failed (0 new, 1 also fail on main, 2 unstable on main) · 8 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 819 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 (396 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_graphics 35.5 s
Unstable on main (2, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_depth_clear_hle: failed in 1 of the last 10 main runs
agc_submit_progress: failed in 6 of the last 10 main runs
Failing on main too (1, not counted against this PR)
agc_submit_progress_no_timeline
Validation IDs already present on main (4 IDs in 109 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (109 tests): 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_cmask_fast_clear, agc_driver_dcc_key_presync, and 101 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_plane_sampling_evicting, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
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_plane_sampling_evicting, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-vkCmdCopyBuffer-commonparent (1 test): agc_driver_depth_clear_hle
Skipped (8)
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_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
Reproduce
git fetch origin 81fffaba798b3a0c56f16f4bae2c8954c686fc0a 6b48aee5d2ea9fce6155163d78f8ce8dc84f7827
git checkout 6b48aee5d2ea9fce6155163d78f8ce8dc84f7827 && git merge --no-ff 81fffaba798b3a0c56f16f4bae2c8954c686fc0a
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 agc libSceAgc* label Oct 31, 2026
@adriadam10 adriadam10 self-assigned this Oct 31, 2026
@adriadam10
adriadam10 merged commit 841deda into boykopovar:main Oct 31, 2026
12 checks passed
@adriadam10

Copy link
Copy Markdown
Collaborator

Checked the split gate against tools/check_skips.py (DEVICE_LIMITATION matches skipped, the device has no ...), the llvmpipe skip and test body are unchanged, and the NVIDIA/Windows runs in the thread pass with no new failures; merged.

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

Labels

agc libSceAgc*

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants