Skip to content

fix(agc): accept ANCILLARY without PS_ITER_SAMPLE for a one-sample color target without MSAA_ENABLE - #13991

Open
JJenkx wants to merge 2 commits into
boykopovar:mainfrom
JJenkx:fix/agc-onesample-color-ancillary
Open

JJenkx wants to merge 2 commits into
boykopovar:mainfrom
JJenkx:fix/agc-onesample-color-ancillary

Conversation

@JJenkx

@JJenkx JJenkx commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

What

Metal Gear 1 in Metal Gear & Metal Gear 2: Solid Snake (PPSA14408) stops before its first frame:

AGC graphics: a one-sample color target under a multisampled rasterizer without MSAA_ENABLE is unsupported with a sample index or coverage input, or a sample-mask export

The draw has these registers:

  • One one-sample color target and no depth target.
  • PA_SC_AA_CONFIG 0x30e003: eight samples.
  • PA_SC_MODE_CNTL_0 0x2: MSAA_ENABLE is clear.
  • SPI_PS_INPUT_ENA and SPI_PS_INPUT_ADDR 0x2002: PERSP_CENTER and ANCILLARY.
  • DB_SHADER_CONTROL 0x50: no sample-mask export.

The only refused input is ANCILLARY.

#9988 accepted ANCILLARY without PS_ITER_SAMPLE for a one-sample depth target on this path, and left the one-sample color rule unchanged. This PR applies the same rule to one-sample color targets. ANCILLARY now throws on this path only with PA_SC_MODE_CNTL_1.PS_ITER_SAMPLE. SAMPLE_COVERAGE and a sample-mask export still throw. #9988's reasoning carries over:

  • The ancillary word holds the primitive class, the sample index and the render target index. Of these, only the sample index can depend on the sample.
  • Without PS_ITER_SAMPLE the guest does not iterate per sample, and the recompiler already reads the sample index as 0. The one-sample draw keeps sample 0 at the pixel center.
  • With PS_ITER_SAMPLE the console runs one invocation per sample, each with its own index, so that case still throws.

The debt entry "A one-sample target under a multisampled rasterizer without MSAA_ENABLE" now states the rule for both target kinds and names the title.

Tested

Linux 7.2.11, Ryzen 9 7950X, Radeon RX 6650 XT, RADV Mesa 26.2.6, Release.

  • agc_driver_graphics: a one-sample color draw whose program reads ANCILLARY without PS_ITER_SAMPLE is drawn as one sample without sample shading. SAMPLE_COVERAGE, ANCILLARY under PS_ITER_SAMPLE and a sample-mask export still throw, with the new message.
  • Negative control: with main's rule in State.cpp and this PR's test, agc_driver_graphics fails on the old refusal. With the change it passes.
  • Full ctest -j8, on main 73f4f7e06e and on this change (d9506e308f, on the same base). Both ran with VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation, ANYPS5_REQUIRE_VULKAN=1 and ANYPS5_NO_SHADER_CACHE=1. Results:
    • 3060 tests in each run.
    • The same single failure, agc_idle_publish_wait ("the idle publish's bytes are wrong"), which also fails on main.
    • The same 47 skips.
    • Identical validation output: 13 VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 errors, and the same warnings by ID and count.

PPSA14408, natively, content version 01.500.000. The launcher starts MG1 through sceSystemServiceLoadExec (/app0/PS/eboot.bin -mgst mg1 …). Relinked with --module-dir Media/Modules --module-dir Media/Plugins --module-dir . --executable PS/eboot.bin. Run with APS5_PLAYGO_UNLISTED_CHUNKS=installed.

Build Result
main 60bdb06135 The launcher runs at 59.94 FPS through Terms of Use, Game Selection and Start, then MG1 aborts at 137 s with the error above.
this change (d9506e308f) MG1 draws its first frames (the Bluepoint Games logo) and runs about 30 s more. It then stops on an unrelated NGS2 refusal, NGS2: waveform block 0 does not fit its data.

The DB depth copy that stopped MG1 in #8737 is no longer reached as a stop on main.

Independent reports on head d9506e308f (their runs, summarised here; see their comments):

  • @jacknieland, Windows 11, WinLibs GCC 15.2.0, GTX 1650 with the Vulkan SDK 1.4.363.0 validation layer (comment): agc_driver_graphics passes on this PR and on main with 0 VUID- lines. This PR's test on main's State.cpp fails with the refusal it narrows. Only that target was built; no title was run.
  • @TechLevelZero's NVIDIA CI (RTX 2000 Ada, driver 595.99.02), merged onto main 73f4f7e: 2,334 passed, 0 new failures, with VK_LAYER_KHRONOS_validation.

Not verified

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: PPSA14408 (Metal Gear & Metal Gear 2: Solid Snake (PPSA14408) #8737)
  • GPUs tested: AMD Radeon RX 6650 XT, RADV Mesa 26.2.6, Linux 7.2.11-arch1-1
  • AI-assisted: yes

🤖 Generated with Claude Code

…lor target without MSAA_ENABLE

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added unblocks title Names a title ID on the Unblocks line docs agc libSceAgc* labels Oct 31, 2026

@MarcZX10 MarcZX10 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 — looks good

The exact-head code and regression cases are consistent with the reported Linux validation, and the applicable hosted checks pass.

What I ran

Reviewed head d9506e308ff0f932b413fd13f244693aa70f3e6d against base 73f4f7e06e4f210a8c6570e335fd654dc0a86134; no build or merge-preview was run. Environment: Debian Linux 6.1 x86_64, Python 3.11.2; no C++ compiler invocation.

git diff --check 73f4f7e06e4f210a8c6570e335fd654dc0a86134...d9506e308ff0f932b413fd13f244693aa70f3e6d
gh pr checks 13991 --repo boykopovar/AnyPS5

I also inspected the exact-head State.cpp and Graphics.cpp diff and the PR checklist. The author reports same-machine Linux main/change CTest runs and a PPSA14408 title run; those runs were not performed by me.

Results

Check Result
git diff --check Passed; no output
Windows CI Passed
Conventions, eligibility, intake, labels, library portability, report Passed
Linux and specialized product jobs Skipped by workflow
Source/test inspection The non-PS_ITER_SAMPLE ANCILLARY case is accepted, the PS_ITER_SAMPLE case remains rejected, and coverage/sample-mask cases remain rejected.
Author-reported matched Linux CTest and title run 3060 tests on each head with the same one failure and same 47 skips; validation output reported identical. PPSA14408 reaches the Bluepoint logo before a later NGS2 refusal. Not independently run.
Unedited local diff-check output
Unedited hosted check summary
windows	pass	6m7s	https://github.com/boykopovar/AnyPS5/actions/runs/41210557699/job/124564472729
linux	skipping	0	https://github.com/boykopovar/AnyPS5/actions/runs/41210557699/job/124564473863
register-context	skipping	0	https://github.com/boykopovar/AnyPS5/actions/runs/41210557699/job/124564473962
relinker	skipping	0	https://github.com/boykopovar/AnyPS5/actions/runs/41210557699/job/124564473679
relinker-asan	skipping	0	https://github.com/boykopovar/AnyPS5/actions/runs/41210557699/job/124564474325
write-watch	skipping	0	https://github.com/boykopovar/AnyPS5/actions/runs/41210557699/job/124564473980
conventions	pass	17s	https://github.com/boykopovar/AnyPS5/actions/runs/41210557447/job/124564448916
eligibility	pass	4s	https://github.com/boykopovar/AnyPS5/actions/runs/41210557699/job/124564448089
intake	pass	4s	https://github.com/boykopovar/AnyPS5/actions/runs/41210558048/job/124564450280
labels	pass	9s	https://github.com/boykopovar/AnyPS5/actions/runs/41210557498/job/124564448843
library-portability	pass	1m23s	https://github.com/boykopovar/AnyPS5/actions/runs/41210557562/job/124564447545
report	pass	1m5s	https://github.com/boykopovar/AnyPS5/actions/runs/41210557495/job/124564447253

Negative control

The author reports that the focused test fails with the base implementation and passes with this change; I did not independently run that control.

Findings

Blocking

None found in the reviewed diff.

Non-blocking

The console behavior of ANCILLARY's sample index without PS_ITER_SAMPLE remains an inference, as the PR states. The title run establishes progress through the first frames, not full game compatibility.

Sources

Not verified

I did not build AnyPS5 or run CTest locally, test other operating systems or GPUs, or verify behavior on a physical PS5. The Linux and title results above are author-reported; product Linux and specialized hosted jobs were skipped.

@github-actions

github-actions Bot commented Oct 31, 2026 •

Copy link
Copy Markdown

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 1395 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 2434 docs/dev/debt/libSceAgcDriver.md
PR 4040 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 5925 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6186 docs/dev/debt/libSceAgcDriver.md
PR 6188 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
PR 6194 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6223 docs/dev/debt/libSceAgcDriver.md
PR 6235 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6273 docs/dev/debt/libSceAgcDriver.md
PR 6280 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6412 docs/dev/debt/libSceAgcDriver.md
PR 6481 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6548 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6804 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6808 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6970 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6987 docs/dev/debt/libSceAgcDriver.md
PR 6989 docs/dev/debt/libSceAgcDriver.md
PR 6995 docs/dev/debt/libSceAgcDriver.md
PR 7002 docs/dev/debt/libSceAgcDriver.md
PR 7085 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7256 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7410 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 7449 docs/dev/debt/libSceAgcDriver.md
PR 7604 docs/dev/debt/libSceAgcDriver.md
PR 7642 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7668 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 8246 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 8592 docs/dev/debt/libSceAgcDriver.md
PR 8707 docs/dev/debt/libSceAgcDriver.md
PR 9020 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9318 docs/dev/debt/libSceAgcDriver.md
PR 9335 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9356 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9387 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9592 docs/dev/debt/libSceAgcDriver.md
PR 9672 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9673 docs/dev/debt/libSceAgcDriver.md
PR 9675 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9700 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9712 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9748 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9895 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9897 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9898 docs/dev/debt/libSceAgcDriver.md
PR 9915 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9950 docs/dev/debt/libSceAgcDriver.md
PR 10049 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10193 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10233 docs/dev/debt/libSceAgcDriver.md
PR 10249 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
PR 10256 docs/dev/debt/libSceAgcDriver.md
PR 10359 docs/dev/debt/libSceAgcDriver.md
PR 10743 docs/dev/debt/libSceAgcDriver.md
PR 11825 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 11998 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 12120 docs/dev/debt/libSceAgcDriver.md
PR 12565 docs/dev/debt/libSceAgcDriver.md
PR 12567 docs/dev/debt/libSceAgcDriver.md
PR 13599 docs/dev/debt/libSceAgcDriver.md
PR 13707 docs/dev/debt/libSceAgcDriver.md
PR 13863 docs/dev/debt/libSceAgcDriver.md
PR 13920 docs/dev/debt/libSceAgcDriver.md
PR 13928 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 13929 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 13963 docs/dev/debt/libSceAgcDriver.md
PR 13994 docs/dev/debt/libSceAgcDriver.md
PR 14005 docs/dev/debt/libSceAgcDriver.md
PR 14032 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 14212 docs/dev/debt/libSceAgcDriver.md
PR 14302 docs/dev/debt/libSceAgcDriver.md
PR 14311 docs/dev/debt/libSceAgcDriver.md
PR 14344 docs/dev/debt/libSceAgcDriver.md
PR 14621 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 14943 docs/dev/debt/libSceAgcDriver.md
PR 14944 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 14976 docs/dev/debt/libSceAgcDriver.md
PR 15059 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp

@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head d9506e3 merged onto main 73f4f7e · tested 2026-10-31 15:43 UTC · 21 min

GPU NVIDIA RTX 2000 Ada Generation, driver 595.99.02, Vulkan 1.4.329
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-38-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ✅ 2,334 passed · 6 failed (0 new, 4 also fail on main, 2 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,388 of 3,072 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 (878 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_bda_device 43.0 s, ⚠️ agc_driver_graphics 30.4 s, ⚠️ agc_driver_graphics_maps_fallback 30.3 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 2 of the last 10 main runs
agc_driver_submit_progress: failed in 7 of the last 10 main runs
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
Validation IDs already present on main (4 IDs in 387 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (387 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 379 more
VUID-vkCmdCopyImage-srcImage-01548 (12 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 4 more
VUID-vkCmdCopyImage-srcImage-01551 (12 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 4 more
VUID-vkCmdCopyBuffer-commonparent (1 test): agc_driver_depth_clear_hle
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_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_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 plat
Reproduce
git fetch origin d9506e308ff0f932b413fd13f244693aa70f3e6d 73f4f7e06e4f210a8c6570e335fd654dc0a86134
git checkout 73f4f7e06e4f210a8c6570e335fd654dc0a86134 && git merge --no-ff d9506e308ff0f932b413fd13f244693aa70f3e6d
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.

@jacknieland

Copy link
Copy Markdown
Contributor

Windows result for head d9506e308f, whose base is the current main 73f4f7e06e.

Host: Windows 11 Pro 26200, i7-9750H, WinLibs GCC 15.2.0 (x86_64-ucrt-posix-seh, r7), Release, BUILD_TESTING=ON, Ninja, NVIDIA GeForce GTX 1650 (driver 566.41) with the Vulkan SDK 1.4.363.0 validation layer.

  • agc_driver_graphics passes on this PR and on main, with 0 VUID- lines.
  • Red/green: this PR's tests/Graphics.cpp on main's State.cpp fails with a one-sample color target under a multisampled rasterizer without MSAA_ENABLE is unsupported with a sample index or coverage input, or a sample-mask export, which is the refusal this PR narrows.

Only this test target was built, not the full suite, and no title was run. AI-assisted.

@github-actions github-actions Bot added review queue Next in the maintainer review queue: checks pass, no open change request, no conflict and removed review queue Next in the maintainer review queue: checks pass, no open change request, no conflict labels Nov 2, 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.

Reviewed — approved

The change gives one-sample color targets the rule #9988 gave one-sample depth targets: ANCILLARY without PS_ITER_SAMPLE is accepted. The code matches the depth path, the test pins both the new acceptance and the refusals that remain, and the negative control fails on the old refusal.

What I ran

Head d9506e308ff0f932b413fd13f244693aa70f3e6d, main 9090972b7e91fd266819cbd77a8b058e177b5682, merged with --no-ff into tree ea394590bb7434fec715354c4083a84b9406f4d9. Debian 13 VM, GCC 14.2.0, Release, Vulkan through lavapipe (Mesa 26.1.6).

git diff --check 9090972b7e91fd266819cbd77a8b058e177b5682...d9506e308ff0f932b413fd13f244693aa70f3e6d
python3 tools/check_conventions.py --base 9090972b7e91fd266819cbd77a8b058e177b5682
ctest --test-dir build -R '^agc_driver_graphics$' --output-on-failure
# negative control
git show 9090972b7e91fd266819cbd77a8b058e177b5682:core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp > core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
ninja -C build tests/agc_driver_graphics_tests
ctest --test-dir build -R '^agc_driver_graphics$' --output-on-failure
git show ea394590bb7434fec715354c4083a84b9406f4d9:core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp > core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
ninja -C build tests/agc_driver_graphics_tests
ctest --test-dir build -R '^agc_driver_graphics$'
git status --porcelain

Results

Check Result
git diff --check Clean
check_conventions.py 0 errors. 1 debt-length warning on the edited entry (4335 characters); the entry was already well over 1000 characters on main
Build (script) Configure, build and libs OK
Selected tests (script) 2031 run, 1913 passed, 111 expected skips, 0 new failures, 0 timeouts. 7 known failures that also fail on main (agc_driver_division, the denormal tests, unwrap_self, vector_constant_factor_tininess)
Validation (script) 757 tests, layer loaded in 756 (none listed as missing), 0 tests with new VUID-
agc_driver_graphics on the merged tree Passed (34.5 s; 35.3 s after the restore)
Negative control Failed as expected (see below)
git status --porcelain after the restore Empty

Negative control

I restored only core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp from main, kept this PR's test, rebuilt and ran agc_driver_graphics. It failed with the refusal this PR narrows:

Output
All 256 MSAA CMASK byte classifications passed
AGC graphics: a one-sample color target under a multisampled rasterizer without MSAA_ENABLE is unsupported with a sample index or coverage input, or a sample-mask export
0% tests passed, 1 tests failed out of 1

After restoring the merged file, the test passes again and the worktree matches the merged tree. This confirms @jacknieland's red/green result on Windows, now on Linux with GCC 14.

Code review

  • core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp:1686-1688 uses the same sampleIndex mask as the depth path at State.cpp:1587-1589. So ANCILLARY is refused only with PA_SC_MODE_CNTL_1.PS_ITER_SAMPLE, and SAMPLE_COVERAGE and the DB_SHADER_CONTROL sample-mask export still throw. The two paths stay consistent.
  • The claim that the sample index reads as 0 holds. core/shader/recompiler/Optimization/src/ConstantFolder.cpp:815 lowers the packed-ancillary sample field to Constant(0) unless pixelIteratesSamples is set. Here PS_ITER_SAMPLE is clear, so the recompiler gives sample 0, which is the sample the one-sample draw keeps.
  • perSampleShading is computed at State.cpp:1608 before the color loop, and the branch forces it to false at State.cpp:1691. The test checks this at tests/Graphics.cpp:854.
  • The test keeps the refusals for SAMPLE_COVERAGE (tests/Graphics.cpp:855-857), for ANCILLARY under PS_ITER_SAMPLE (tests/Graphics.cpp:863-864) and for the sample-mask export (tests/Graphics.cpp:865-868). All of them match the new message.
  • The behaviour is general, not tied to one title, and no code comments were added. The debt entry is updated: the depth-only qualifier is removed from both the throw rule and the sample-index inference, and PPSA14408 is named.
  • The checklist lines (Depends on, Fixes, Unblocks, GPUs tested, AI-assisted) are present. The description's Not verified section correctly says the console's sample index is inferred, as in #9988.

Findings

Blocking

None.

Non-blocking

  • agc_driver_graphics took 34.5–35.3 s here, over the 30 s budget. TechLevelZero's NVIDIA CI measured 30.4 s for it. This PR only adds one DecodeState call, so the time is not caused by the PR, and I did not time main on this machine. The test should be split separately.
  • check_conventions.py warns that the "A one-sample target under a multisampled rasterizer without MSAA_ENABLE" entry in docs/dev/debt/libSceAgcDriver.md:79 is 4335 characters long. The entry was already far over the limit on main, and this PR adds one sentence, so this is not a reason to hold the PR.

Not verified

  • The console's ancillary sample index on this path. It is inferred, not measured, as the PR states.
  • The PPSA14408 title run. I did not launch titles.
  • Behaviour on hardware GPUs. I ran on lavapipe only; the author reports RADV, and others report NVIDIA (RTX 2000 Ada, GTX 1650).

@github-actions github-actions Bot added review queue Next in the maintainer review queue: checks pass, no open change request, no conflict and removed review queue Next in the maintainer review queue: checks pass, no open change request, no conflict labels Nov 2, 2026
@oneandonlydean oneandonlydean self-assigned this Nov 3, 2026
@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
@adam25136

adam25136 commented Nov 3, 2026 •

Copy link
Copy Markdown

Windows and NVIDIA Blackwell run, for head d9506e308f 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,171 of 3,924 tests, chosen by tools/select_tests.py select from main's build graph for the 3 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,157 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).

Timing: agc_driver_graphics took 17.5 s (16.4 s on main). agc_driver_pipeline_journal took 30.2 s in the parallel run (23.7 s on main); run alone 3 times it took 29.0-29.5 s on this change and 29.2-29.7 s on main, so this change does not move it, but on this machine it sits just under the 30 s budget on main as well.

Not run: the Khronos validation layer is not installed on this machine, so this says nothing about VUIDs. PPSA14408 was not 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 5, 2026

Copy link
Copy Markdown
Contributor Author

Still needed on current main. In a 125 s run of Metal Gear and Metal Gear 2 (PPSA14408) on plain main b611e634f7, the game stops at 92 s with:

AGC graphics: a one-sample color target under a multisampled rasterizer without MSAA_ENABLE is unsupported

This PR removes that refusal. With this PR and #15538, the same title ran to the scheduled close of a 300 s run, as reported on #15538 and in discussion #8737. This PR's head d9506e308f still merges cleanly with main c42e3a000c.

AI-assisted: yes

@oneandonlydean

Copy link
Copy Markdown
Collaborator

Hi JJenkx,

I pushed one small commit on top of your branch: it removes the SAMPLE_COVERAGE expectFailure assertion from msaaEnableClearOneSampleTargetTests. That case checks a valid but unsupported input, and we don't pin unsupported paths as throws in tests. The ANCILLARY change, the other refusal checks and everything else in your PR are untouched. Thanks for the PPSA14408 runs.

@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head dbcd61e merged onto main 9ab6a28 · tested 2026-11-05 01:28 UTC · 11 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,773 passed · 1 failed (0 new, 1 also fail 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,822 of 3,909 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 (969 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 106.1 s
Failing on main too (1, not counted against this PR)
agc_driver_image_table
Validation IDs already present on main (13 IDs in 548 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (548 tests): agc_driver, agc_driver_address_draw_space_reuse, agc_driver_address_passes, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, agc_driver_bc_block_copy, agc_driver_bda_anchor_reads, and 540 more
VUID-VkShaderModuleCreateInfo-pCode-08737 (8 tests): agc_driver_dpp16_operands, agc_driver_dpp8_pk_fmac, agc_driver_dx10_clamp, agc_driver_float16_fma_rounding, agc_driver_float16_unused_nan_payloads, agc_driver_packed_alu, agc_driver_packed_f16_denormal_modes, agc_driver_packed_float16_native
VUID-VkShaderModuleCreateInfo-pCode-08739 (8 tests): agc_driver_dpp16_operands, agc_driver_dpp8_pk_fmac, agc_driver_dx10_clamp, agc_driver_float16_fma_rounding, agc_driver_float16_unused_nan_payloads, agc_driver_packed_alu, agc_driver_packed_f16_denormal_modes, agc_driver_packed_float16_native
VUID-VkShaderModuleCreateInfo-pCode-08741 (8 tests): agc_driver_dpp16_operands, agc_driver_dpp8_pk_fmac, agc_driver_dx10_clamp, agc_driver_float16_fma_rounding, agc_driver_float16_unused_nan_payloads, agc_driver_packed_alu, agc_driver_packed_f16_denormal_modes, agc_driver_packed_float16_native
VUID-vkCmdCopyImage-srcImage-01548 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-vkCmdCopyImage-srcImage-01551 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (2 tests): agc_driver_prepared_exports, agc_driver_srgb8_color_target
VUID-VkPipelineShaderStageCreateInfo-module-parameter (1 test): agc_driver_float16_unused_nan_payloads
VUID-VkPipelineShaderStageCreateInfo-pSpecializationInfo-06849 (1 test): agc_driver_float16_unused_nan_payloads
VUID-VkSamplerCreateInfo-addressModeU-01079 (1 test): agc_driver_image_gather_volume
VUID-VkSamplerCreateInfo-addressModeU-parameter (1 test): agc_driver_image_gather_volume
VUID-VkSamplerCreateInfo-addressModeV-parameter (1 test): agc_driver_image_gather_volume
VUID-VkSamplerCreateInfo-addressModeW-parameter (1 test): agc_driver_image_gather_volume
Skipped (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_gcn_display_present: skipped, no display: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
agc_driver_sample_order_grid_reference: skipped, the device does not keep depth drawn at custom sample locations at those locations, even after a transition that names them: the composite of uniform renders holds the guest's depth in 0 of 3005 sloped samples, so no path can be compared with it bit for bit
agc_driver_scattered_runs: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_sparse_dma_buf_import: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_stencil_ref_export: skipped, the device lacks VK_EXT_shader_stencil_export
agc_host_import_sparse: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_import_settle_initial_dcc: skipped, the device has no deferred settle of host imports: imports under 1 MiB wait for one only on Windows
agc_unit_shadow_completion_store: skipped, the device reports watched host memory written when it imports or reads it
guest_http_uri_locale: 
guest_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 pl
Reproduce
git fetch origin dbcd61e89617699d494e412673bc5b00456779d4 9ab6a281ea61c9e62a7eb07eb4cef8f19ede1c5c
git checkout 9ab6a281ea61c9e62a7eb07eb4cef8f19ede1c5c && git merge --no-ff dbcd61e89617699d494e412673bc5b00456779d4
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 dbcd61e merged onto main b611e63 · tested 2026-11-05 04:32 UTC · 21 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,789 passed · 8 failed (0 new, 7 also fail on main, 1 unstable on main) · 58 skipped (ANYPS5_REQUIRE_VULKAN=1)
Test setup CPU-only tests without a GPU; GPU tests (and any CPU-only test that failed or skipped without one) once on the GPU with VK_LAYER_KHRONOS_validation and ANYPS5_NO_SHADER_CACHE=1; main ran the same way
Test selection 2,855 of 3,946 tests run: the ones this change can reach, chosen by tools/select_tests.py from main's build graph
Vulkan validation ✅ no new validation IDs vs main (976 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.6 s, ⚠️ public_headers 83.1 s, ⚠️ agc_driver_image_sample_unnormalized 49.9 s, ⚠️ agc_shader_sampler_limits 42.2 s, ⚠️ agc_driver_stream_copy 39.9 s
Unstable on main (1, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_pipeline_journal: failed in 9 of the last 10 main runs
Failing on main too (7, not counted against this PR)
agc_driver_image_gather_volume
agc_driver_image_table
agc_driver_native_depth_bda_clear
agc_driver_native_multisample_depth
agc_driver_submit_progress
agc_submit_progress
agc_submit_progress_no_timeline
Validation IDs already present on main (4 IDs in 556 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (556 tests): agc_driver, agc_driver_address_draw_space_reuse, agc_driver_address_passes, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, agc_driver_bc_block_copy, agc_driver_bda_anchor_reads, and 548 more
VUID-vkCmdCopyImage-srcImage-01548 (4 tests): agc_driver_depth_clear_hle, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-vkCmdCopyImage-srcImage-01551 (4 tests): agc_driver_depth_clear_hle, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (2 tests): agc_driver_prepared_exports, agc_driver_srgb8_color_target
Skipped (58)
agc_driver_bda_reads_shadowed_results: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_bda_reads_shadowed_results_per_build: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_copied_writer_label_order: skipped, the device reports a minStorageBufferOffsetAlignment of 4, so the dispatch binds its record at +0x1004 in place and nothing is written back; the test needs an alignment above 4
agc_driver_float16_unused_nan_payloads: skipped, the device has no native f16 conversions with RTE rounding and kept f16 denormals
agc_driver_gcn_display_present: skipped, no display: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
agc_driver_image_table_vouched_lookups: skipped, the device reports 4 of 4 host-imported pages written after a GPU read, so a watched imported table cannot be vouched for
agc_driver_linear_target_direct_write_completion: skipped, the device does not keep host imports write-watched, so no completion stamp over the target is tracked
agc_driver_ngg_vertex_wave_reduction: skipped, s3 describes a 32-lane wave only on 32-lane subgroups, and the device has 64 lanes
agc_driver_scattered_runs: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_sparse_dma_buf_import: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_unit_shadow: skipped, the device does not import watched host memory for unit shadows
agc_driver_unit_shadow_budget: skipped, the device does not import watched host memory for unit shadows
agc_host_import_sparse: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_idle_publish_wait: skipped, the device reports 4 of 4 host-imported pages written after a GPU read, so a forced watch of the import reads its submissions as CPU stores
agc_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_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 cur
Reproduce
git fetch origin dbcd61e89617699d494e412673bc5b00456779d4 b611e634f7fc024f0c13e342d96de744448ef1d9
git checkout b611e634f7fc024f0c13e342d96de744448ef1d9 && git merge --no-ff dbcd61e89617699d494e412673bc5b00456779d4
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.

@JJenkx

JJenkx commented Nov 5, 2026

Copy link
Copy Markdown
Contributor Author

Current-main check of this PR on Metal Gear / Metal Gear 2 (PPSA14408), Linux, RX 6650 XT (RADV), Release.

Tree: main 1e24993fa3 + this PR dbcd61e896 + #15538 697519a9fd (#15538 clears the separate NGS2 stop at the first in-game audio). The PR merges cleanly onto that main.

  • 300 s scripted route, unlisted chunks installed: exit 0 at 298 s, 59.9 fps after 150 s, in Metal Gear 2 gameplay (a codec call) at 200 s.
  • Without this PR, plain main b611e634f7 (the latest plain-main run I have of this title, 120 s) stops at 92 s on AGC graphics: a one-sample color target under a multisampled rasterizer without MSAA_ENABLE is unsupported with a sample index or coverage input, or a sample-mask export. I did not rerun plain main on 1e24993fa3.

AI-assisted: yes

This branch has not been deployed

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

Labels

agc libSceAgc* 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.

7 participants