Skip to content

feat(agc): scale the presentation with FSR 1 under ANYPS5_UPSCALE=fsr - #10043

Open
EagleBearerYS wants to merge 17 commits into
boykopovar:mainfrom
EagleBearerYS:prep/agc-fsr1-upscaling-main
Open

EagleBearerYS wants to merge 17 commits into
boykopovar:mainfrom
EagleBearerYS:prep/agc-fsr1-upscaling-main

Conversation

@EagleBearerYS

@EagleBearerYS EagleBearerYS commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

What

An optional scaler for the presented image: AMD FidelityFX Super Resolution 1.0, EASU upscaling plus RCAS sharpening. ANYPS5_UPSCALE=fsr turns it on. The default stays today's bilinear scaler.

No title needs this to run, and nothing changes unless it's set. With ANYPS5_UPSCALE unset, no upscaler object exists. The present path records exactly what it records today, and a test checks the output is bit-identical.

Where it helps: a display buffer shown in a larger window, for example a 1920x1080 buffer in a 2560x1440 or 3840x2160 window, which today is a bilinear stretch. Here is Planet of Lana (PPSA19450) with platform-ps5-video-out-width=1920 in its app0/Media/boot.config, maximized on a 2560x1440 panel, where the 1920x1080 buffer is presented at 2372x1334. The main menu at 1:1, bilinear on the left and FSR at the default sharpness 0.2 on the right:

Planet of Lana's menu, bilinear against FSR, 1:1

The crops on their own: bilinear and FSR. The full frames: bilinear and FSR. That one-line edit of the title's own data file isn't part of this PR. megood's run of Bendy and the Ink Machine at 1920x1080 in a larger window, shared in the AnyPS5 Discord dev chat, is what pointed us at Unity's resolution settings. Titles that present 3840x2160 buffers in play, such as Resident Evil Village (PPSA01556) and Animal Well (PPSA22520), keep today's scaler in any smaller window, since FSR stays off where it can't upscale.

How to try it on a title: for Planet of Lana (PPSA19450), set platform-ps5-video-out-width=1920 in the dump's app0/Media/boot.config (it ships with 3840), run it in a window larger than 1920x1080, and compare ANYPS5_UPSCALE unset with ANYPS5_UPSCALE=fsr. Other Unity titles may have the same line, but none has been checked yet.

The test's synthetic pattern shows the difference in numbers. It's a 960x540 pattern upscaled to 1920x1080, shown as a 320x180 crop at 2x, with bilinear on the left and FSR at 0.2 on the right:

Bilinear against FSR

The one-pixel grid lines peak at 179 under bilinear and at 219 with FSR (the source line is 230). A 51/204 edge goes 89 → 166 under bilinear and 65 → 190 with FSR.

Sharpness 0.2 (left) against 2.0, the weakest (right). EASU is the same in both; RCAS's halo is 5-9 levels at 0.2 and 1 level at 2.0:

Sharpness 0.2 against 2.0

The whole synthetic FSR frame at half size, for context: image. These three are rendered by this PR's own code on lavapipe.

How:

  • ANYPS5_UPSCALE and ANYPS5_FSR_SHARPNESS (0.0 sharpest to 2.0 weakest, default 0.2) are read once when the window's device is created, like ANYPS5_PRESENT_MODE. An empty value is the same as unset; any other bad value stops the start with a message naming the variable.

  • With fsr, a presentation whose fitted image is larger than the display buffer on either axis goes through FSR:

    • present() renders today's output at the buffer's own size into a per-slot stage image;
    • EASU (FsrEasu.frag) scales it to the fitted size;
    • RCAS (FsrRcas.frag) sharpens it into the swapchain image, with the black letterbox around it.
      This covers the drawn, direct and shared present paths. Clear-only presents skip it.
  • With the performance overlay (feat(agc,videoout): show an optional performance overlay with F10 #6012) on: RCAS ends in COLOR_ATTACHMENT_OPTIMAL, and the overlay records from there when the frame was drawn or upscaled. Otherwise the overlay records from TRANSFER_DST_OPTIMAL as it does today. The overlay's entry dependency orders it after RCAS's writes, so its text is neither scaled nor sharpened.

  • With main's overlay plane (feat(videoout): composite the overlay bus over the main output #10507) and system keyboard (feat(libSceImeDialog): type with the controller on an on-screen keyboard #11207): they draw after RCAS too, over the upscaled output at display resolution. RCAS ends in COLOR_ATTACHMENT_OPTIMAL whenever the plane, the keyboard or the performance overlay draws next, and each of them starts from that layout after an upscale; with nothing drawn over it, RCAS ends in PRESENT_SRC_KHR.

  • Where it can't upscale (1:1 or a smaller window), FSR stays off for that frame, which is presented exactly as without ANYPS5_UPSCALE. RCAS alone would cost frame rate there without adding detail.

    • On lavapipe it costs 2.8x today's blit at 2560x1440.
    • Before this gate, Planet of Lana (PPSA19450), showing a 3840x2160 buffer in a 1084x610 window, dropped from 12.05 to 5.75 fps with RCAS alone.
    • On lavapipe the cost shows up as draws waiting while the presentation holds the GPU mutex, since QueuePresent waits for the presentation's rendering inside it.
    • FSR's start line says so: [present] ANYPS5_UPSCALE=fsr: FSR 1 EASU and RCAS when the window is larger than the display buffer, the normal scaler otherwise; RCAS sharpness 0.20.
  • HDR10 (feat(videoout): present PQ display buffers through an HDR10 swapchain #5697) and SDR: FSR runs on the values the display receives, sRGB-encoded for SDR and PQ code values for HDR10, never on linear light. Both are perceptual encodings, which is what FSR 1 expects. EASU's deringing keeps each output inside its 2x2 neighbourhood. RCAS limits its negative lobe to stay inside [0, 1], and the shader clamps its result to [0, 1] after AMD's approximate reciprocal, so PQ output stays a valid code.

  • Cost when upscaling: two images per presentation in flight (7.9 + 31.6 MiB per slot for a 1080p buffer in a 4K window) and two extra passes per frame. The table gives FSR's GPU time per frame (the stage write, EASU and RCAS) against today's bilinear blit, as the median over 200 frames from agc_driver_presentation_pass_tests --fsr-cost. The times are GPU timestamps of 200 back-to-back frames after 20 warm-up frames, offscreen with no other GPU work. The RTX 3070 column is from this head. Its clocks weren't held: during the measured frames nvidia-smi (every 100 ms) showed it in P3 and P0, at 780 to 945 MHz graphics and 5,501 to 6,001 MHz memory. So these are mid-clock figures, upper bounds for both passes at full clock. FSR and the blit were timed in the same frames at the same clocks, so the comparison is like for like at those clocks. lavapipe runs on the CPU, so only its ratios mean anything. Recording FSR costs 45-55 µs of CPU per frame on the RTX 3070 when it upscales (median; 89-101 at p95), against 3-4 µs for the blit.

    Case RTX 3070 Laptop: FSR / blit, median (p95) lavapipe: FSR / blit
    1920x1080 into 2560x1440 0.53 (0.55) / 0.07 (0.08) ms 74.3 / 7.8 ms
    1920x1080 into 3840x2160 1.13 (1.19) / 0.14 (0.15) ms 165.2 / 16.8 ms
    1280x720 into 3840x2160 (EASU beyond 2x) 1.33 (1.33) / 0.14 (0.14) ms 153.6 / 16.1 ms
    1920x1080 or 3840x2160 at 1:1, 3840x2160 into 2560x1440 FSR off: the blit alone FSR off: the blit alone

    The cost mode measures RCAS alone too, which is what FSR would run where it can't upscale. At 1920x1080 1:1 it costs 0.12 ms against the blit's 0.05 on the RTX 3070 (20.6 against 5.0 on lavapipe), at 3840x2160 1:1 0.46 against 0.20, and for 3840x2160 into 2560x1440 0.29 against 0.15 (34.7 against 9.2 on lavapipe). That gives no detail for the cost, so FSR stays off there.

    The shaders derive the EASU and RCAS constants per pixel from the sizes and the sharpness in their push constants, about 20 ALU per pixel; AMD's samples compute them once on the CPU, which would save that at the cost of a larger push-constant block. When off, the cost is two getenv calls at device creation and one bool per present.

Things to know:

  • EASU is designed for up to twice the display buffer's size on each axis. Larger factors, such as a 1280x720 buffer in a 3840x2160 window, still work but look softer.
  • RCAS normalizes with AMD's approximate reciprocal (APrxMedRcpF1), so it darkens flat areas by a fixed fraction of their value that depends only on the sharpness: 0.17% at the default 0.2 (0.5 → 0.4992), 0.32% at 0.0 and 0.07% at 2.0. That's at most one 8-bit level in SDR and three 10-bit codes in HDR10. Fixing it would mean editing AMD's header, so it's left as is; USAGE says so, and the tests bound it.
  • 2.0 is RCAS's weakest setting, not off. With fsr selected, RCAS always runs.
  • An invalid ANYPS5_FSR_SHARPNESS stops the start even without fsr, like any invalid setting.
  • When the window shrinks from larger than the display buffer to smaller, each presentation slot keeps its upscaled image until EASU runs again or the device is torn down: the window's size at 4 bytes a pixel, so about 33 MB per slot at 3840x2160.

Third-party code: the FSR headers are vendored, not a submodule, which departs from AGENTS.md's submodule rule. A maintainer agreed in the dev chat that vendoring these two headers is fine. 3rdparty/FidelityFX-FSR/ holds ffx-fsr/ffx_a.h, ffx-fsr/ffx_fsr1.h and license.txt (MIT), copied unmodified from tag v1.0.2 (a21ffb8f6c). Its README gives the source, the commit and each file's SHA-256.

  • Why: every FSR 1 release tag carries two submodules for AMD's sample, Cauldron and Cauldron-Media. The project's recursive checkouts (CI, release.yml, BUILD.md) would fetch them: about 337 MB at depth 1 and 1.47 GB with full history, for 243 KB of headers. .gitmodules can't stop recursion into a submodule's own submodules.
  • The three files match tag v1.0.2 byte for byte, and the README's SHA-256 table matches them.
  • If a submodule is wanted after all, commit 1 switches and the include path stays the same.

Commits:

  1. build(agc): the vendored FSR 1.0.2 headers and license, with the README.
  2. feat(agc): PresentationUpscaler, UpscaleMode, the EASU and RCAS shaders, and the hooks into PresentationPass, PresentationScaler and VulkanDevice::present.
    • FSR runs only for presentations it can upscale (50aa233's gate).
    • The stage's render pass ends with a dependency that orders its writes and final layout transition before EASU and RCAS sample it (PresentationPass::ExitDependency, shared with the upscaler's passes).
    • With the performance overlay on, the overlay draws after RCAS, unscaled.
    • The three shader modules are created with Graphics::CreateShaderModule, as main's presentation pass and overlay create theirs.
    • docs/dev/ENVIRONMENT.md gets rows for ANYPS5_UPSCALE and ANYPS5_FSR_SHARPNESS.
    • USAGE gets its "Upscaling" section, after "Storing GPU results at each flip".
  3. test(agc): agc_driver_presentation_fsr, with the exit dependency's three layouts; agc_driver_present_upscale, which presents through VulkanDevice on a headless surface in all four combinations of FSR and the overlay and counts the presentations that ran FSR; and agc_performance_overlay's over-FSR case.
  4. test(agc): the --fsr-cost mode of agc_driver_presentation_pass_tests (30febcf), not registered with ctest.

Tested

  • Planet of Lana (PPSA19450) with platform-ps5-video-out-width=1920 in app0/Media/boot.config, built at this head, on the RTX 3070 Laptop GPU (driver 617.42, Windows 11), maximized on a 2560x1440 panel, with the performance overlay on. Six runs: four in the order bilinear, FSR, FSR, bilinear, then a later pair, FSR then bilinear (ANYPS5_UPSCALE unset or fsr). Clocks weren't held; nvidia-smi logged them every second.

    • The log has guest 1920x1080 presented at 2372x1334, and with fsr the start line [present] ANYPS5_UPSCALE=fsr: FSR 1 EASU and RCAS when the window is larger than the display buffer, the normal scaler otherwise; RCAS sharpness 0.20. The performance overlay reads RES: 1920X1080 / 2560X1334.
    Run Main menu, +90 to +150 s In play, +420 to +500 s
    1, bilinear 26.8 fps (GPU 33%, median 870 MHz; P0 42%, P3 38%, P5 19%) 16.2 fps (GPU 30%, 885 MHz; P0 38%, P3 28%, P5 33%)
    2, FSR 28.2 fps (GPU 32%, 975 MHz; P0 78%) 12.7 fps (GPU 33%, 765 MHz; P5 75%)
    3, FSR 38.0 fps (GPU 36%, 1,185 MHz; P0 83%) not measured (the Controls screen, not play)
    4, bilinear 36.4 fps (GPU 38%, 1,125 MHz; P0 80%) 18.3 fps (GPU 32%, 945 MHz; P0 61%)
    5, FSR 37.1 fps (GPU 44%, 930 MHz; P0 14%, P3 85%) 19.3 fps (GPU 34%, 930 MHz; P0 76%, P3 19%, P5 3%)
    6, bilinear 34.8 fps (GPU 37%, 1,050 MHz; P0 82%, P3 17%) 21.7 fps (GPU 34%, 930 MHz; P0 90%, P3 6%, P5 3%)
    • Main menu: FSR was ahead of bilinear in all three pairs, by 5% (28.2 against 26.8), 4% (38.0 against 36.4) and 7% (37.1 against 34.8). The pairs ran at different clocks from one another, so each comparison is within its pair, and in the third the two arms' clocks differed too (FSR mostly in P3, bilinear mostly in P0).
    • In play, the pair at similar clocks is runs 5 and 6: both at a 930 MHz median, mostly in P0 (FSR 76%, bilinear 90%; clocks weren't locked), and captures at +420 s show both in play. FSR ran at 19.3 fps against bilinear's 21.7, about 11% lower. That's FSR's cost in this scene in that one pair. The first pair's larger gap (12.7 against 16.2) had the FSR run in P5 for 75% of its window, so it mixes in the clock state. Run 3's play window reached the Controls screen instead of play.
    • The 1:1 menu crops above show FSR visibly sharper than bilinear.
  • agc_driver_presentation_fsr (Vulkan; it runs agc_driver_presentation_pass_tests --fsr) covers:

    • upscale-mode parsing;
    • EASU from 960x540 to 1920x1080 on edges, a thin-line grid and a gradient: no NaN or Inf, values in [0, 1], flat regions flat, the gradient monotonic, and a 10-90% edge rise of 1.52 px against 2.20 for bilinear, across vertical and horizontal edges;
    • RCAS at 1:1: at sharpness 2.0 the image changes by at most 0.024; at 0.2 edge contrast goes from 0.2331 to 0.2482; flat areas stay uniform;
    • the default path: with ANYPS5_UPSCALE unset the output is bit-identical, and the stage equals today's fitted image when FSR doesn't upscale;
    • SDR and HDR10 presents: B8G8R8A8 flat greys within one code; a PQ checkerboard into A2B10G10R10 at sharpness 0 gives valid codes, a flat region stays flat, and the letterbox is black.
  • agc_driver_present_upscale presents through VulkanDevice on a VK_EXT_headless_surface swapchain (1084x610) and counts the presentations that ran FSR. With fsr, 3840x2160, 1084x610 and 1920x1080 buffers don't run it and a 960x540 buffer does; with the variable empty, nothing does. With the gate removed it fails: "FSR ran on a 3840x2160 display buffer in a 1084x610 window, where it cannot upscale". It skips where the extension is missing.

  • Linux, CI's Linux job (Ubuntu 24.04, GCC 13.3, CI's configure flags, lavapipe, an unprivileged user), at the head, against main 7e69be6 built the same way:

    • 1,864 of 1,868 tests pass, against 1,862 of 1,866 on main.
    • Per test, every test on main has the same status here. The two new tests, agc_driver_presentation_fsr and agc_driver_present_upscale, pass.
    • The 4 failures are the same on both: that machine's three IPv6 socket tests, and guest_net_buffer_validation, which fails on main there too.
    • check_test_registration.py finds nothing unregistered on either. check_skips.py flags only guest_sce_net on both, as on every branch on that machine.
    • Each of the four commits builds and passes the presentation and overlay tests that exist at it, headless and under Xvfb.
    • agc_driver_presentation_pass, agc_driver_presentation_fsr, agc_driver_present_upscale, agc_performance_overlay and agc_performance_overlay_statistics pass 10 of 10, headless and under Xvfb.
  • Validation with VK_LAYER_KHRONOS_validation and synchronization validation. The layer reports a planted write-after-write hazard on that machine, so validation was on.

    • Setup: Xvfb at 1920x1080. The 18 VideoOut and presentation tests that CTest runs offscreen ran again on X11, in a window larger than their buffers, so EASU runs. For example, video_out_hdr_present's 259x137 buffer is presented at 1152x609.
    • Tests: the presentation, present-upscale, overlay and VideoOut display tests: 43 here and 41 on main, plus the 18 on X11.
    • Configurations: main, then this PR unset, with fsr, with fsr at sharpness 2.0, and with fsr and the performance overlay on (ANYPS5_OVERLAY=1).
    • Messages: the only one in any configuration is VUID-VkDeviceCreateInfo-pNext-pNext, once per device, from a device struct that layer version doesn't know. Every test main has gets the same count here. The 6 extra come from agc_driver_present_upscale, which opens a device per case.
    • No synchronization hazard appears, and no other message of any severity. Before H1's fix, agc_driver_presentation_fsr had 10.
    • Pass and fail are the same in all five.
    • Where FSR ran: with fsr, FSR's start line appears 13 times in each configuration, from video_out_hdr_present, six guest_video_out_* tests, agc_driver_present_upscale and three X11 flip and frame-dump tests. With the overlay on as well, the overlay tests pass, and the screen capture below shows the overlay drawn over an FSR presentation.
  • Off is bit-identical on screen too: X screen captures at the third present of video_out_hdr_present, compared pixel by pixel.

    • With ANYPS5_UPSCALE unset, main and this PR differ in 0 of 2,073,600 pixels, in three capture pairs.
    • With the overlay on and FSR unset, they differ only inside the overlay panel's numbers: 151 and 130 pixels, against 171 and 128 between two runs of the same tree. With the panel painted out, they differ in 0.
    • With fsr, 679,356 pixels differ, all in the presented image: the frame is sharper at the band edges. Adding the overlay to fsr changes only the panel (11,023 pixels).
  • GitHub's runners at 672308b (run): the presentation, present-upscale and overlay tests pass 10 runs in a row on Linux, with none skipped. On Windows they build and pass, with 5 of the 8 skipping: the runner has no Vulkan device, so the RTX 3070 run below covers those. The libc and libkernel suites pass on both, run with APS5_SKIP_TIMING_TESTS=1, which relaxes precise_wait's median bounds on GitHub's hosted runners.

  • Validation, main against this PR, on GitHub's Linux runner (run): VK_LAYER_KHRONOS_validation with ANYPS5_NO_SHADER_CACHE=1 and ANYPS5_REQUIRE_VULKAN=1 on llvmpipe, for the same tests plus agc_driver_image_table_vouched_lookups. The loader inserted the layer 5 times on main and 12 with this PR. Both logs report only VUID-VkDeviceCreateInfo-pNext-pNext, so this PR adds no VUID- message.

  • RTX 3070 Laptop GPU at this head (driver 617.42, Windows 11 10.0.26300), offscreen, no other GPU work: agc_driver_presentation_pass (3.7 s), agc_driver_presentation_fsr (10.9 s) and agc_performance_overlay (2.5 s) pass. agc_driver_present_upscale skips: NVIDIA's Windows driver has no VK_EXT_headless_surface, which it needs. The figures match lavapipe's: EASU's edge rise is 1.52 px against bilinear's 2.20 on both axes, RCAS at sharpness 2.0 changes the image by at most 0.0241, and edge contrast goes 0.2331 → 0.2482 at 0.2. The tests take the first Vulkan device, which on this laptop is the integrated GPU, so the loader was limited to NVIDIA's driver for that run. The cost mode (--fsr-cost) gives the RTX 3070 column above.

  • HDR10 is tested at the component level only: no HDR10 swapchain was available. lavapipe's offers only SRGB_NONLINEAR, and this PC's displays run SDR.

  • 7ed09f9, a merge of main 5b85225 (run), which brings fix(agc): bound the sampled depth-plane copies #7705, fix(agc): recognise the copy kernel as Demon's Souls 01.007.000 compiles it #8552 and milescoviello's fix(agc): place the presentation source in host memory when device memory runs out #10807. fix(agc): place the presentation source in host memory when device memory runs out #10807 adds a test of the presentation source in host memory to tests/PresentationPass.cpp where this PR adds its FSR tests; the merge keeps both, and nothing else conflicted. That test uses PresentationScaler's constructor and source-image calls, which this PR leaves unchanged. This PR's changed lines are the same as before the merge. The present, upscale, FSR, presentation-pass and performance overlay tests pass 10 runs in a row. Linux: 8 run, 8 pass, 0 skip, 0 fail. Windows: 8 run, 3 pass, 5 skip, 0 fail; the device tests skip, since that runner has no Vulkan device. Suites: libc and libkernel pass on Linux (144 and 209), and libc passes on Windows (171). Windows' libkernel suite runs 227 tests and fails guest_timed_join_import_libkernel_sys and guest_timed_join_import_libkernel_web, which this PR doesn't touch; main 88f9967 fails the same two in this verify's Windows job (run), and main's own Windows CI passes them. The suites ran with APS5_SKIP_TIMING_TESTS=1, which relaxes precise_wait's median bounds on GitHub's hosted runners.

  • 711dd2a: 59245df, a merge of main 0cd07dc, and a test commit (sweep run, validation run). main now has orezraey's feat(videoout): composite the overlay bus over the main output #10507, which composites the overlay plane over the main output, our feat(libSceImeDialog): type with the controller on an on-screen keyboard #11207, which draws the system keyboard over the presented frame, and feat(agc): toggle runtime switches in alternating phases of one run #8160, feat(tools): split the periodic reports of an APS5_AB run by phase #8161 and feat(relinker): trace function imports on macOS #9408. The conflicts were in PresentationPass.hpp, PresentationPass.cpp, VulkanDevice.cpp and docs/dev/ENVIRONMENT.md.

    • PresentationPass: this PR's recordInto, which FSR's last pass uses, now draws through main's target, destinationFramebuffer and scissored draw. The pass keeps both main's entry dependency and this PR's exit dependency.
    • VulkanDevice: the plane, keyboard and overlay order after an upscale as in What. The upscaler, the keyboard and the plane pass are all kept in the device and retired with its slots, and this PR's UpscaledPresents and main's PresentCounts both count.
    • ENVIRONMENT.md keeps both rows.
    • The test commit adds a case to agc_driver_present_upscale: a 960x540 display buffer with a 960x540 overlay plane, presented into its 1084x610 headless window with ANYPS5_UPSCALE=fsr, must be upscaled with the plane composited.
    • ×10 sweep over ^agc, ^video_out and ^guest_video_out, with no before arm. Linux: 1121 run, 1022 pass, 99 skip, 0 fail. Windows: 1143 run, 328 pass, 811 skip, 4 fail: agc_driver_pipelined_metadata_pass, agc_driver_pipelined_metadata_pass_draw_pipeline, agc_submit_progress and agc_submit_progress_no_timeline need a Vulkan device and fail creating it on GitHub's device-less runner, as main's do there (run). The libc and libkernel suites run 166 and 264 tests on Linux and 194 and 286 on Windows, with 0 failed. The suites ran with APS5_SKIP_TIMING_TESTS=1, which relaxes precise_wait's median bounds on GitHub's hosted runners.
    • Validation, VK_LAYER_KHRONOS_validation on llvmpipe, main against this head, for the present, upscale, FSR, presentation-pass, overlay and VideoOut tests: the one message is VUID-VkDeviceCreateInfo-pNext-pNext, from agc_driver_present_upscale's devices, a device struct this layer version doesn't know, as in the validation run above. main's tree has no such test, and neither side reports any other VUID- message.
    • Planet of Lana (PPSA19450) at this head, built from it, with the same platform-ps5-video-out-width=1920 boot.config change, maximized on the 2560x1440 panel. Environment: ANYPS5_UPSCALE=fsr, the performance overlay on (ANYPS5_OVERLAY=1), APS5_STORAGE_CACHE_ENTRIES=1024 and APS5_THREAD_PRIORITY=high. APS5_STORAGE_CACHE_ENTRIES is the variable fix(agc): cap the storage-image cache by entry count #14220 adds: neither this PR nor main reads it, so it had no effect in this run.
      • The log has the same FSR start line and guest 1920x1080 presented at 2372x1334, and the overlay reads RES: 1920X1080 / 2560X1334.
      • Main menu, full size (2582x1390 PNG, 6.8 MB), at the title's present 4838: FSR still runs after this merge, with the overlay drawn over the upscaled output.
      • It's one run with no bilinear arm, so it shows the FSR path, not a timing comparison. Clocks weren't held: nvidia-smi over the capture had P0 in 71 of 79 one-second samples and a graphics clock of 810 to 1,170 MHz.
  • 439f672, a merge of main edf6804 (×10 run, validation run). The merge was clean: CMakeLists.txt, VulkanDevice.hpp, VulkanDevice.cpp, tests/PerformanceOverlay.cpp, ENVIRONMENT.md and USAGE.md merged without conflicts. The PR's patch-id is unchanged, so the vendored FidelityFX headers are byte-identical. The Planet of Lana (PPSA19450) screenshot above is from 711dd2a, whose patch this merge doesn't change.

    • ×10: agc_driver_present_upscale, agc_driver_presentation_fsr, ^agc_driver_presentation_pass, ^agc_performance_overlay, ^video_out and ^guest_video_out. Linux: 40 run, 13 pass, 27 skip, 0 fail. Windows: 38 run, 8 pass, 30 skip, 0 fail. The libc and libkernel suites run 191 and 291 tests on Linux and 220 and 314 on Windows, with 0 failed. The suites ran with APS5_SKIP_TIMING_TESTS=1, which relaxes precise_wait's median bounds on GitHub's hosted runners.
    • Validation, VK_LAYER_KHRONOS_validation on llvmpipe, main against this head, for the same tests as the validation run above. One VUID appears only with this PR: VUID-VkDeviceCreateInfo-pNext-pNext, from the devices agc_driver_present_upscale creates, whose device struct this layer version doesn't know. main can't show it, because its tree has no agc_driver_present_upscale. Neither side reports any other VUID- message.
  • c88633c, a merge of main 0afe7a4 (×10 run, validation run), as MarcZX10 asked. main now has Get-fix's feat(libSceAgcDriver): draw PS4 (GCN) command buffers #9431, which adds a GCN check (tile mode, pitch and display height) to ResidentPresentable in VulkanDevice.cpp. This PR changes present() and the device's state setup, not ResidentPresentable. The merge was clean, and this PR's own diff is unchanged.

    • ×10: the tests above plus agc_resident_present, the resident-present tests. Linux: 41 run, 14 pass, 27 skip, 0 fail. Windows: 39 run, 8 pass, 31 skip, 0 fail. The libc and libkernel suites run 193 and 292 tests on Linux and 223 and 315 on Windows, with 0 failed. The suites ran with APS5_SKIP_TIMING_TESTS=1, which relaxes precise_wait's median bounds on GitHub's hosted runners.
    • Validation, as above, with agc_resident_present added. The loader inserted the layer 4 times on main and 12 with this PR. The one VUID that appears only with this PR is again VUID-VkDeviceCreateInfo-pNext-pNext, from the devices agc_driver_present_upscale creates, a test main's tree doesn't have. Neither side reports any other VUID- message.
  • 5165558, a merge of main 1a21775, which brings f0d5ff5, the system dialog drawn in the presentation.

    • The conflict: the keyboard overlay's RecordRects call in VulkanDevice.cpp. The merge keeps main's *systemLayout and this PR's upscaled in the layout condition.
    • This PR's other added and removed lines are unchanged.
    • ×10 (run), the presentation, upscale, FSR, overlay, VideoOut and resident-present tests:
      • Linux: 42 run, 15 pass, 27 skip, 0 fail.
      • Windows: 40 run, 9 pass, 31 skip (no Vulkan device), 0 fail.
      • The libc and libkernel suites run 194 and 294 tests on Linux and 224 and 318 on Windows, with 0 failed. The suites ran with APS5_SKIP_TIMING_TESTS=1, which relaxes precise_wait's median bounds on GitHub's hosted runners.
    • Validation (run), main 1a21775 against this head, the same tests plus agc_driver_sample_multisample_target, a main test that opens a real device:
      • Linux: 43 run, 16 pass, 27 skip, 0 fail. The loader inserted VK_LAYER_KHRONOS_validation 5 times on main and 13 with this PR.
      • The only VUID in either arm is VUID-VkDeviceCreateInfo-pNext-pNext: once on main, 8 times with this PR, all for VkStructureType 1000574000. This PR adds no VUID.
      • That structure is VkPhysicalDeviceMaintenance8FeaturesKHR, which main's VulkanDevice.cpp chains into every device it creates. The runner's vulkan-validationlayers 1.3.275.0-1 doesn't know it.
  • d0bd686, a merge of main 2b1ae87, which brings MarcZX10's feat(overlay): show controller status on demand or on connect, disconnect and battery drop #12702 (the pad status overlay) (run).

    • The conflicts: two hunks in VulkanDevice::present, where this PR adds upscaled (FSR) wherever drawn means "the swapchain image is already in COLOR_ATTACHMENT_OPTIMAL", and feat(overlay): show controller status on demand or on connect, disconnect and battery drop #12702 adds padStatusShown. The merge keeps both:
      • planePass->RecordOverlay: initial layout drawn || upscaled, final overlay || keyboard || padStatusShown;
      • overlay->Record: initial drawn || upscaled || plane != nullptr || keyboard || padStatusShown, and the else if the negation of all five.
    • One line beyond both sides: feat(overlay): show controller status on demand or on connect, disconnect and battery drop #12702's new padStatus->RecordRects gets the same upscaled this PR gives the keyboard overlay's RecordRects, so its initial layout is drawn || upscaled || plane != nullptr. Without it, an upscaled frame that shows the pad status records the wrong initial layout. The merge commit's message names it.
    • This PR's own diff changes only in those combined conditions. main's drawsOver already includes padStatusShown, and this PR's upscaler->RecordPresent uses it.
    • ×10: this PR's present, FSR, presentation-pass and performance-overlay tests, ^video_out, ^guest_video_out, agc_resident_present and agc_driver_sample_multisample_target.
      • Linux: 44 run, 16 pass, 28 skip (they need a display), 0 fail.
      • Windows: 42 run, 9 pass, 33 skip (no display or Vulkan device), 0 fail.
      • The libc and libkernel suites run 199 and 307 tests on Linux and 226 and 329 on Windows, with 0 failed. The suites ran with APS5_SKIP_TIMING_TESTS=1, which relaxes precise_wait's median bounds on GitHub's hosted runners.
    • On a cloud Linux machine (lavapipe): this PR's tests with feat(overlay): show controller status on demand or on connect, disconnect and battery drop #12702's agc_pad_status_overlay, _shared, _events and _invalid, agc_keyboard_overlay, agc_performance_overlay_statistics, agc_resident_present, video_out_flip_overlay and video_out_flip_padstatus pass 10 of 10, 15 tests in all; the two video_out_flip_* tests skip without a display. ctest -R '^(agc|shader)': 1,157 passed, 0 failed.
  • bef1325, jotitadev's fix for VUID-vkCmdBeginRenderPass-initialLayout-00897 (review), with jotitadev as co-author.

    • The cause: the FSR stage pass and the EASU pass end in SHADER_READ_ONLY_OPTIMAL, but PresentationPass::destinationFramebuffer and PresentationUpscaler::transientFramebuffer narrowed their views' usage through VkImageViewUsageCreateInfo to COLOR_ATTACHMENT and transfer bits. The commit adds SAMPLED to the view when the pass uses that layout. Both images were already created with SAMPLED.
    • Layer 1.4.341, red/green (cloud Linux machine, Ubuntu 24.04, lavapipe: Mesa 25.2.8, LLVM 20.1.2). The layer was built from KhronosGroup's vulkan-sdk-1.4.341.0 tag (14de3c0d7b) and loaded through VK_LAYER_PATH. The 44 tests of the ×10 set below ran 3 times per tree, as an unprivileged user, with ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1:
      • d0bd686: 20 00897 messages per run, in all 3 runs: agc_driver_presentation_fsr 10, agc_driver_present_upscale 8, agc_performance_overlay 2.
      • bef1325: 0 validation messages of any kind, in all 3 runs.
      • In every run, 16 pass and 28 skip (they need a display), 0 fail. Under Xvfb, 43 of the 44 run, with the same red/green; guest_video_out_high_frame_rate skips, since Xvfb has no 120 Hz mode.
    • Layer 1.3.275 (Ubuntu 24.04's vulkan-validationlayers, the one GitHub's runner and the NVIDIA bot use): neither tree logs 00897. Both log the same 8 VUID-VkDeviceCreateInfo-pNext-pNext messages, for VkPhysicalDeviceMaintenance8FeaturesKHR, which that layer predates.
    • ×10 on GitHub's runners (run): this PR's present, FSR, presentation-pass and performance-overlay tests, ^video_out, ^guest_video_out, agc_resident_present and agc_driver_sample_multisample_target.
      • Linux: 44 run, 16 pass, 28 skip (they need a display), 0 fail.
      • Windows: 42 run, 9 pass, 33 skip (no display or Vulkan device), 0 fail.
      • The libc and libkernel suites run 199 and 307 tests on Linux and 226 and 329 on Windows, with 0 failed. The suites ran with APS5_SKIP_TIMING_TESTS=1, which relaxes precise_wait's median bounds on GitHub's hosted runners.
    • Validation on GitHub's Linux runner (run), layer 1.3.275, d0bd686 against bef1325, the same tests:
      • Linux: 44 run, 16 pass, 28 skip, 0 fail, in each arm. The loader inserted VK_LAYER_KHRONOS_validation 13 times in each.
      • The only VUID in either arm is VUID-VkDeviceCreateInfo-pNext-pNext, so the fix adds none.
  • affd3b1, a merge of main 0836dfd (run). build(agc): register each AGC test executable in its own CMake fragment #12862 moved libSceAgcDriver's test registrations into tests/cmake/; the conflict in CMakeLists.txt is resolved with tools/agc_test_split.py resolve, which moves this PR's registrations into tests/cmake/agc_driver_presentation_pass_tests.cmake (+6 lines). Nothing else conflicted. Its FSR shader build rules and PresentationUpscaler.cpp stay in CMakeLists.txt, unchanged, since they aren't test registrations. Apart from the move, this PR's diff is unchanged. With -DBUILD_TESTING=ON, ctest -N gives 3077 tests: main's 3075 plus its 2 tests, each listed once. The 54 tests of this PR's verify set pass 10 runs in a row. Linux: 54 run, 18 pass, 36 skip, 0 fail. Windows: 52 run, 11 pass, 41 skip (no Vulkan device), 0 fail. Suites: libc and libkernel pass on Linux (199 and 308) and on Windows (226 and 330). The suites ran with APS5_SKIP_TIMING_TESTS=1, which relaxes precise_wait's median bounds on GitHub's hosted runners.

  • Layer 1.4.341 on this head and current main, as MarcZX10 asked (review): main cbcb37b against affd3b1 on one cloud Linux machine (Ubuntu 24.04.5, lavapipe: Mesa 25.2.8, LLVM 20.1.2), both built with CI's Linux configure.

    • The layer was built from KhronosGroup's vulkan-sdk-1.4.341.0 tag (14de3c0d7b) and loaded through VK_LAYER_PATH. VK_LOADER_DEBUG=layer shows it inserted inside a test process on each tree.
    • The runs: the presentation, FSR, upscale, overlay, VideoOut, resident-present and multisample-target tests, 3 times offscreen and once under Xvfb per tree, as an unprivileged user, with ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1.
    • The result: neither tree logs a validation message of any kind, in any run, so there is no 00897.
    • main: 52 run. Offscreen: 16 pass, 36 skip, 0 fail. Xvfb: 51 pass, 1 skip, 0 fail.
    • This head: 54 run, main's 52 plus this PR's two. Offscreen: 18 pass, 36 skip, 0 fail. Xvfb: 53 pass, 1 skip, 0 fail.
    • The skips: offscreen, 29 tests get no Vulkan surface from SDL's offscreen driver and 7 find no wayland or x11. Under Xvfb, guest_video_out_high_frame_rate skips, since Xvfb has no 120 Hz mode.
    • The red control: this head with only the sampled-usage fix reversed logs 20 00897 messages: agc_driver_presentation_fsr 10, agc_driver_present_upscale 8, agc_performance_overlay 2. Those are d0bd686's counts. With the fix restored, it logs 0.
  • Layer 1.4.341 again, on main cf79276, as MarcZX10 asked (review), since cbcb37b predates fix(shader): run tessellation evaluation stages one lane per invocation on devices without subgroups there #13807's VulkanDevice::buildTarget() line.

    • The trees: main cf79276, affd3b1, and their clean local merge caa72b2703, which brings that line into this PR. They used the same machine, layer, insertion check and command as the bullet above.
    • The result: no tree logs a validation message of any kind, in any run, so there is no 00897.
    • main: 52 run. Offscreen: 16 pass, 36 skip, 0 fail. Xvfb: 51 pass, 1 skip, 0 fail.
    • This head and the merge: 54 run each. Offscreen: 18 pass, 36 skip, 0 fail. Xvfb: 53 pass, 1 skip, 0 fail. The skips are the same as above.
    • The red control, on the merge: with only the sampled-usage fix reversed, it logs 20 00897 messages, the same counts; with the fix restored, 0.
  • NVIDIA RTX 2000 Ada Generation at affd3b1, from TechLevelZero's NVIDIA bot (report): driver 595.99.02, Ubuntu 26.04.1, validation layer 1.3.275.

    • 3,033 passed, 5 failed and 51 skipped. None of the failures is new: 4 also fail on main, and 1 is unstable on main.
    • agc_driver_present_upscale skips there, since that runner has no VK_EXT_headless_surface.
  • 57f34f0, a merge of main 4a58bc2, which brings MarcZX10's feat(videoout): add ANYPS5_FPS_LIMIT to cap the rate the window presents #12536 (ANYPS5_FPS_LIMIT) (×10, validation).

    • The conflicts were VulkanDevice::present and docs/dev/ENVIRONMENT.md. The merge keeps both sides in each, and this PR's other changed lines are the same:
      • in present, the overlay's NotePresent takes main's frame limit argument, and its Record and the else branch keep this PR's upscaled condition;
      • ENVIRONMENT.md keeps both rows.
    • ×10: this PR's verify set. Linux: 55 run, 18 pass, 37 skip, 0 fail. Windows: 53 run, 11 pass, 42 skip (no Vulkan device), 0 fail. Suites: libc and libkernel pass on Linux (199 and 308) and on Windows (226 and 330). The suites ran with APS5_SKIP_TIMING_TESTS=1, which relaxes precise_wait's median bounds on GitHub's hosted runners.
    • Validation (VK_LAYER_KHRONOS_validation on GitHub's Linux runner), main 4a58bc2 against this merge, for the same tests:
      • the layer was inserted in both arms, 5 times on main and 13 with this merge;
      • the only VUID in either arm is VUID-VkDeviceCreateInfo-pNext-pNext, so the merge adds none.
  • NVIDIA RTX 2000 Ada Generation at 57f34f0, from TechLevelZero's NVIDIA bot (report): this head merged onto main e6f5730, driver 595.99.02, Ubuntu 26.04.1.

    • 3,091 passed, 7 failed and 52 skipped. None of the failures is new: 3 also fail on main, and 4 are unstable on main.
    • With VK_LAYER_KHRONOS_validation, no new validation IDs over 1,241 GPU tests. agc_driver_presentation_fsr passed. agc_driver_present_upscale skips again, since that runner's Vulkan loader has no VK_EXT_headless_surface. Neither is in main's baseline, so neither was compared.
  • 03c1bad, a merge of main 88e804b (run). Two conflicts, each a pair of additions at the same place, and the merge keeps both: this PR's VulkanDevice::UpscaledPresents in VulkanDevice.cpp beside main's new FillCompletionSyncCount, and this PR's ANYPS5_UPSCALE row in docs/dev/ENVIRONMENT.md beside main's new ANYPS5_TEST_HOST_IMPORT_ALIGNMENT row. This PR's diff over main is unchanged. agc_driver_present_upscale, agc_driver_presentation_fsr, agc_driver_sample_multisample_target and agc_resident_present, with the presentation-pass, performance-overlay and VideoOut tests, ran 10 times with no failure. Linux: 55 run, 18 pass, 37 skip (the VideoOut flip and guest VideoOut tests, which need a display), 0 fail. Windows: 53 run, 11 pass, 42 skip (the same VideoOut tests, and the AGC presentation and overlay tests, this PR's four among them; no Vulkan device), 0 fail. Suites: libc and libkernel pass on Linux (210 and 310) and on Windows (237 and 331). The suites ran with APS5_SKIP_TIMING_TESTS=1, which relaxes precise_wait's median bounds on GitHub's hosted runners.

  • AMD Radeon RX 6300 (RADV NAVI24) at 03c1bad, from TechLevelZero's AMD bot (report): this head merged onto main 1c8c0ef, Mesa 25.2.8, Ubuntu 26.04.1, the full suite, since this PR changes 3rdparty/FidelityFX-FSR.

    • 3,765 passed, 17 failed and 62 skipped. None of the failures is new: 11 also fail on main, and 6 are unstable on main.
    • With VK_LAYER_KHRONOS_validation, no new validation IDs over 1,367 GPU tests. agc_driver_present_upscale (29.78 s), agc_driver_presentation_pass and the performance-overlay tests passed on the GPU.
    • agc_driver_presentation_fsr printed its passed line and then hit its 30 s timeout in the bot's 4-way parallel run, at 30.03 s. Run alone under VK_LAYER_KHRONOS_validation on the RX 6300, in the bot's retry, it passed in 19.95 s. 933b263, below, gives it 60 s.
  • AMD Radeon RX 9060 XT (RADV GFX1200), by @RNK123 (comment): Mesa 26.2.5, CachyOS, this head 03c1bad merged onto main 1c8c0ef.

    • agc_driver_presentation_pass and agc_performance_overlay pass on main and on the merge. agc_driver_presentation_fsr passes 3 of 3, and agc_driver_present_upscale 3 of 3 with real headless swapchains, the overlay cases included. TechLevelZero's NVIDIA bot skips that test, since its loader has no VK_EXT_headless_surface.
    • No test skipped. With the validation layer loaded, neither arm logs a VUID- or SYNC-HAZARD- message.
    • A sensitivity check (a mutation, not a main comparison): with if (false && upscale.fsr) on the merge, agc_driver_present_upscale fails 3 of 3 at "FSR without the overlay ... was not upscaled".
  • 933b263: agc_driver_presentation_fsr gets 60 s (×10). Its TIMEOUT in tests/cmake/agc_driver_presentation_pass_tests.cmake goes from 30 to 60, and nothing else changes. The test takes 19.95 s alone under VK_LAYER_KHRONOS_validation on the RX 6300, against a 30.03 s timeout in the bot's 4-way parallel run.

    • ×10: this PR's verify set. Linux: 55 run, 18 pass, 37 skip (the VideoOut flip and guest VideoOut tests, which need a display), 0 fail. Windows: 53 run, 11 pass, 42 skip (no Vulkan device), 0 fail. Suites: libc and libkernel pass on Linux (210 and 310) and on Windows (237 and 331). The suites ran with APS5_SKIP_TIMING_TESTS=1, which relaxes precise_wait's median bounds on GitHub's hosted runners.
  • d7a519d, a merge of main 06a9092, which brings SuarezPM's feat(agc): name draws in device-lost fault reports via token ring #14943 (draw names in device-lost fault reports) (×10, validation).

    • The conflict was the includes of VulkanDevice.cpp, where feat(agc): name draws in device-lost fault reports via token ring #14943 adds SubmissionSnapshots.hpp and TraceRevision.hpp and this PR adds UpscaleMode.hpp at the same place. The merge keeps all three. This PR's diff over main is unchanged.
    • ×10: this PR's verify set. Linux: 63 run, 19 pass, 44 skip (the VideoOut flip and guest VideoOut tests, which need a display), 0 fail. Windows: 61 run, 12 pass, 49 skip (the same VideoOut tests, and the AGC presentation and overlay tests, this PR's among them; no Vulkan device), 0 fail. Suites: libc and libkernel pass on Linux (324 and 342) and on Windows (355 and 369). The suites ran with APS5_SKIP_TIMING_TESTS=1, which relaxes precise_wait's median bounds on GitHub's hosted runners.
    • Validation (VK_LAYER_KHRONOS_validation on GitHub's Linux runner), main 06a9092 against this merge, for the same tests:
      • the layer was inserted in both arms, 5 times on main and 13 with this merge;
      • the only VUID in either arm is VUID-VkDeviceCreateInfo-pNext-pNext, so the merge adds none.

Checklist

Overlap:

3rdparty/FidelityFX-FSR holds ffx-fsr/ffx_a.h, ffx-fsr/ffx_fsr1.h and
license.txt, copied unmodified from GPUOpen's FidelityFX-FSR at tag
v1.0.2 (a21ffb8f6c), the MIT-licensed reference of FidelityFX Super
Resolution 1.0. The two headers are compiled into the presentation's
EASU and RCAS shaders. README.md names the source, the tag and each
file's SHA-256.

The files are copied rather than added as a submodule because every
release tag of that repository carries two submodules for AMD's sample
(Cauldron and Cauldron-Media) that a recursive checkout would fetch:
about 337 MB at depth 1 and 1.47 GB with full history, for 243 KB of
headers.
With ANYPS5_UPSCALE=fsr the presentation draws or blits what it would
show into a stage image of the swapchain's format and presents it
through AMD's EASU and RCAS (ffx_fsr1.h, compiled by glslang like the
other presentation shaders). When the fitted image is larger than the
display buffer on either axis, the stage holds the display buffer at its
own size and EASU upscales it into an image of the fitted size;
otherwise the stage holds today's scaled image and only RCAS runs. RCAS
writes the fitted rectangle and black letterbox bands.

The stage holds today's decode of the display buffer (the presentation
pass, or the blit of a resident or uploaded image), so FSR works on the
values the display receives: sRGB-encoded for SDR and PQ code values for
HDR10. RCAS output is clamped to [0, 1], so PQ never exceeds its range.
ANYPS5_FSR_SHARPNESS sets the RCAS sharpness in stops, 0.0 to 2.0,
default 0.2. Without ANYPS5_UPSCALE no upscaler is created and the
presentation records the same commands as before.

FSR runs only for a presentation it can upscale: a fitted image larger
than the display buffer on either axis. Any other presentation is
recorded exactly as without ANYPS5_UPSCALE, since RCAS alone would cost
frame rate there without adding detail. The stage's render pass ends
with a dependency that orders its writes and final layout transition
before EASU and RCAS sample it.
agc_driver_presentation_fsr runs agc_driver_presentation_pass_tests
--fsr on lavapipe. It checks the variables' parsing, the stage size
decision, EASU from 960x540 to 1920x1080 (finite values within [0, 1],
flat regions unchanged, edge transitions narrower than the bilinear
scaler's), RCAS at 1:1 (sharpness 2.0 close to the input, 0.2 raising
edge contrast, flat regions uniform, sharpness 0.0 within [0, 1]), that
the default path's output stays bit-identical next to FSR and matches
the FSR stage inside the image, and SDR and HDR10 presentations through
the presentation pass with letterbox bands.

It also checks the presentation render passes' exit dependencies: one
that ends in SHADER_READ_ONLY_OPTIMAL orders its writes and final layout
transition before a fragment-shader read, one that ends in
TRANSFER_SRC_OPTIMAL before a transfer read, and the one that ends in
PRESENT_SRC_KHR keeps its dependency. The test's drawn FSR presentations
rely on that dependency alone, with no barrier after the render pass.

agc_driver_present_upscale presents through a VK_EXT_headless_surface
swapchain and checks VulkanDevice::UpscaledPresents, the count of
presentations that ran FSR:
- 3840x2160 and 1920x1080 into 1084x610 don't run FSR;
- 1084x610 at 1:1 doesn't run it;
- 960x540 into 1084x610 does;
- with ANYPS5_UPSCALE empty, none do.

The test skips without the extension.

agc_driver_present_upscale also presents in all four combinations of FSR
and the performance overlay, and agc_performance_overlay checks the
overlay drawn over an FSR presentation (960x540 upscaled to 1280x720),
with its FPS digits drawn bit for bit.
agc_driver_presentation_pass_tests --fsr-cost is a cost mode and is not
registered with ctest. It records the production upscaler's passes into
B8G8R8A8 images and brackets each part with Vulkan timestamps:
- the stage write;
- EASU and RCAS together, as RecordPresent records them;
- EASU alone (RecordUpscale);
- RCAS alone (a stage at the fitted size);
- today's bilinear blit.

It prints one line per case with the device name and the median and
95th percentile over 200 frames after 20 warm-up frames. Each line also
gives the CPU time spent recording and releasing the FSR presentation
next to the blit's.

The cases:
- 1920x1080 into 2560x1440 and into 3840x2160;
- 1920x1080 and 3840x2160 at 1:1;
- 1280x720 into 3840x2160;
- 3840x2160 into 2560x1440.

A queue without timestamps exits 77.

@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 the current implementation and reported validation for head 672308b453c902d8434842e8bb8e9779eba33da3. The feature has substantial focused coverage and evidence across lavapipe and the RTX 3070, including default-off bit identity and presentation-path checks. One integration blocker remains: check_main_sync.py shows this head is 4 ahead/209 behind fetched upstream/main at 0db47b263, with four changed paths also modified after the merge base: core/libs/prx/libSceAgcDriver/CMakeLists.txt, Execution/src/VulkanDevice.cpp, and both usage/environment docs. The reported full Linux suite and tests are on base 7e69be679, so they do not establish the combined current-main tree. Please rebase/merge current main, resolve these shared paths, rerun overlap and the focused presentation/upscale/overlay/VideoOut tests on the resulting head, and report any changed failures. This request is for current-main integration evidence required by the repository contribution checklist; it is not about queue size. Local conventions pass; hosted checks currently cover policy only and skip product builds.

@EagleBearerYS
EagleBearerYS marked this pull request as ready for review October 23, 2026 06:15
@github-actions

github-actions Bot commented Oct 23, 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 1368 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 1395 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 1896 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/ENVIRONMENT.md
PR 4040 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 4472 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/ENVIRONMENT.md
PR 5021 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/user/USAGE.md
PR 5371 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5925 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/user/USAGE.md
PR 6186 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/ENVIRONMENT.md
PR 6187 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6188 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6192 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6209 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6280 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6412 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6481 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6804 core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6808 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6924 docs/dev/ENVIRONMENT.md
docs/user/USAGE.md
PR 7085 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7275 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 7449 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/ENVIRONMENT.md
PR 7457 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/ENVIRONMENT.md
PR 7508 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7514 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/ENVIRONMENT.md
PR 7604 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/ENVIRONMENT.md
PR 7689 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 8004 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/ENVIRONMENT.md
PR 8484 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/ENVIRONMENT.md
PR 8592 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9012 docs/dev/ENVIRONMENT.md
PR 9289 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/ENVIRONMENT.md
PR 9345 docs/dev/ENVIRONMENT.md
docs/user/USAGE.md
PR 9356 core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/ENVIRONMENT.md
PR 9387 core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/ENVIRONMENT.md
PR 9508 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/PresentationPass.hpp
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/PresentationPass.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/tests/PresentationPass.cpp
core/libs/prx/libSceAgcDriver/tests/cmake/agc_driver_presentation_pass_tests.cmake
docs/dev/ENVIRONMENT.md
docs/user/USAGE.md
PR 9852 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/ENVIRONMENT.md
PR 10193 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/PresentationPass.hpp
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/PresentationPass.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/tests/PresentationPass.cpp
core/libs/prx/libSceAgcDriver/tests/cmake/agc_driver_presentation_pass_tests.cmake
docs/dev/ENVIRONMENT.md
docs/user/USAGE.md
PR 10233 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10359 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10442 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/ENVIRONMENT.md
PR 10652 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 10678 core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/ENVIRONMENT.md
PR 10757 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/ENVIRONMENT.md
PR 10894 docs/dev/ENVIRONMENT.md
PR 10920 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/PerformanceOverlay.cpp
core/libs/prx/libSceAgcDriver/tests/PresentationPass.cpp
PR 11435 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/ENVIRONMENT.md
PR 11436 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/ENVIRONMENT.md
PR 11483 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 12324 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/ENVIRONMENT.md
PR 12544 docs/dev/ENVIRONMENT.md
PR 12746 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/ENVIRONMENT.md
docs/user/USAGE.md
PR 12828 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 12848 docs/dev/ENVIRONMENT.md
docs/user/USAGE.md
PR 12849 docs/dev/ENVIRONMENT.md
PR 12904 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 12970 docs/dev/ENVIRONMENT.md
docs/user/USAGE.md
PR 13148 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 13486 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/ENVIRONMENT.md
docs/user/USAGE.md
PR 13707 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/ENVIRONMENT.md
docs/user/USAGE.md
PR 13793 docs/dev/ENVIRONMENT.md
PR 13809 docs/dev/ENVIRONMENT.md
PR 13863 core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/ENVIRONMENT.md
PR 13920 core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/ENVIRONMENT.md
PR 13928 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/PresentationPass.hpp
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/PresentationPass.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/tests/PresentationPass.cpp
core/libs/prx/libSceAgcDriver/tests/cmake/agc_driver_presentation_pass_tests.cmake
docs/dev/ENVIRONMENT.md
docs/user/USAGE.md
PR 13929 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/PresentationPass.hpp
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/PresentationPass.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/tests/PresentationPass.cpp
core/libs/prx/libSceAgcDriver/tests/cmake/agc_driver_presentation_pass_tests.cmake
docs/dev/ENVIRONMENT.md
docs/user/USAGE.md
PR 14051 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/ENVIRONMENT.md
PR 14218 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 14344 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/ENVIRONMENT.md
PR 15032 docs/user/USAGE.md
PR 15059 docs/dev/ENVIRONMENT.md
PR 15136 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/ENVIRONMENT.md
PR 15169 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/ENVIRONMENT.md
docs/user/USAGE.md
PR 15529 docs/dev/ENVIRONMENT.md
PR 15548 core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/ENVIRONMENT.md
PR 15570 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/ENVIRONMENT.md

@adriadam10 adriadam10 self-assigned this Oct 24, 2026
@EagleBearerYS

Copy link
Copy Markdown
Contributor Author

@adriadam10 a question about the merge queue, since you wrote on #9790 that MarcZX10's CHANGES_REQUESTED blocks it until it's addressed. On this PR, and on #10159, his latest review asks only for a refresh against main and a rerun, with no defect in the change. Does a review like that still block the queue? If it does, we'll merge main and rerun on both before you get to them; if not, we'll leave the heads as they are until a conflict or your review asks for it.

@milescoviello

Copy link
Copy Markdown
Contributor

@EagleBearerYS one more from #10807's overlap list. Here the only conflict is in tests/PresentationPass.cpp: this PR adds FloatFormat and refused where #10807 adds its allocation-refusing wrappers and sourceImageOutsideDeviceMemoryTests, just before main. I propose #10807 goes first here too, merge order only. Keeping both sets of helpers resolves it.

AI-assisted: yes (Claude Code)

@EagleBearerYS

Copy link
Copy Markdown
Contributor Author

@milescoviello Agreed, #10807 goes first here too, merge order only. The one conflict is in tests/PresentationPass.cpp just before main, where this PR adds FloatFormat and refused and #10807 adds its allocation-refusing wrappers and sourceImageOutsideDeviceMemoryTests, so keeping both sets of helpers resolves it. I'll add #10807 to this PR's Depends on.

@milescoviello

Copy link
Copy Markdown
Contributor

@EagleBearerYS thanks, noted on #10807's checklist.

AI-assisted: yes (Claude Code)

@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Oct 26, 2026
@github-actions github-actions Bot added needs rebase Conflicts with main, rebase needed and removed needs rebase Conflicts with main, rebase needed labels Oct 26, 2026
@tkcm01 tkcm01 mentioned this pull request Oct 28, 2026
12 tasks done
# Conflicts:
#	core/libs/prx/libSceAgcDriver/Execution/include/PresentationPass.hpp
#	core/libs/prx/libSceAgcDriver/Execution/src/PresentationPass.cpp
#	core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
#	docs/dev/ENVIRONMENT.md
@EagleBearerYS

Copy link
Copy Markdown
Contributor Author

@jotitadev thanks for checking on NVIDIA as well. The agc_driver_present_upscale segfault on lavapipe 26.0.3 is in Mesa's headless WSI, not in this PR or its test.

  • Where: vkCreateSwapchainKHR on the VK_EXT_headless_surface swapchain jumps to a NULL function pointer from wsi_create_native_image_mem. Mesa 25.3.0 dropped the headless WSI's null-memory override. Since then, its swapchain images are exportable dma-buf memory, and the WSI fetches their fd through GetMemoryFdKHR, which it never loads for a software device like lavapipe.
  • When: only when lavapipe can export dma-buf memory, which needs /dev/udmabuf. Without it, 26.0.3 returns VK_ERROR_OUT_OF_DEVICE_MEMORY from the same call instead.
  • Fixed upstream: Mesa 26.0.4 has "vulkan/wsi/headless: properly use CPU images for CPU devices".
  • What we ran:
    • Setup: bef1325, lavapipe built from the 26.0.3 and 26.0.8 release tarballs and Ubuntu 24.04's 25.2.8, 3 runs each. That machine's kernel has no udmabuf, so a small LD_PRELOAD shim emulated it.
    • 25.2.8 and 26.0.8: pass, with and without udmabuf.
    • 26.0.3: segfaults with udmabuf, after the same Surface capabilities drawable=1084x610 line, with and without the validation layer. It fails with Vulkan result -2 without udmabuf.
    • A standalone program with no AnyPS5 code, making the same vkCreateSwapchainKHR call, crashes the same way on 26.0.3 and gets its 4 images on 25.2.8 and 26.0.8.
    • Each swapchain parameter the test passes is within VkSwapchainCreateInfoKHR's valid usage. The headless surface reports the same capabilities on 25.2.8 and 26.0.3.

So the PR and its test stay as they are. A lavapipe version check in the test would only work around a Mesa bug that's already fixed.

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

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head affd3b1 merged onto main 0836dfd · tested 2026-10-31 23:26 UTC · 26 min

GPU NVIDIA RTX 2000 Ada Generation, driver 595.99.02, Vulkan 1.4.329
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-38-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ✅ 3,033 passed · 5 failed (0 new, 4 also fail on main, 1 unstable on main) · 51 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
Vulkan validation ✅ no new validation IDs vs main (1223 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_bda_device 67.7 s, ⚠️ agc_driver_pipeline_journal 65.2 s, ⚠️ agc_driver_lookup_log_fits_build 62.9 s, ⚠️ agc_driver_sdwa_move_selectors 33.7 s, ⚠️ agc_driver_graphics 31.3 s
Unstable on main (1, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_submit_progress: failed in 8 of the last 10 main runs
Failing on main too (4, not counted against this PR)
agc_driver_idle_store_yields
agc_driver_image_table
guest_mmap_executable
guest_socket_options_multicast
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 203 other runs in the last 7 days
Validated but not compared (2, not in the main baseline's validation pass)
agc_driver_present_upscale
agc_driver_presentation_fsr
Validation IDs already present on main (5 IDs in 708 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (708 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 700 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
VUID-VkShaderModuleCreateInfo-pCode-08737 (1 test): agc_driver_image_sample_derivatives
Skipped (51)
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_present_upscale: skipped, no Vulkan loader with VK_EXT_headless_surface
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_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 no
Reproduce
git fetch origin affd3b1699a0037511b3781626906969dd06add2 0836dfdf4fecb1e0326100c490476e15d3a74da5
git checkout 0836dfdf4fecb1e0326100c490476e15d3a74da5 && git merge --no-ff affd3b1699a0037511b3781626906969dd06add2
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.

@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.

Re-checked — new head, changes requested

The sampled-view usage fix is present, but the required validation-layer evidence is from the previous head; the current head still needs a focused run with the layer version that reported the error.

What I ran

  • Reviewed PR head affd3b1699a0037511b3781626906969dd06add2, based on 0836dfdf4fecb1e0326100c490476e15d3a74da5.
  • The merge preview onto current main 8a4fc62318a4b73b6895bf20a024c625efeb7c3b is clean.
  • Environment: Debian 12, Linux 6.1 x86_64, Python 3.11.2, GCC 12.2.0. I did not build or run C++/GPU tests locally.
  • Commands:
python3 tools/pr_precheck.py --repo boykopovar/AnyPS5 --pr 10043
python3 tools/pr_stack_check.py 10043 --repo boykopovar/AnyPS5 --output-dir /tmp/anyps5-stack-10043-latest
git diff --check 0836dfdf4fecb1e0326100c490476e15d3a74da5...affd3b1699a0037511b3781626906969dd06add2
git diff --exit-code bef132589ce213bbf5ffa6c1472f415d6ecd4557 affd3b1699a0037511b3781626906969dd06add2 -- core/libs/prx/libSceAgcDriver/Execution/src/PresentationPass.cpp core/libs/prx/libSceAgcDriver/Execution/src/PresentationUpscaler.cpp core/libs/prx/libSceAgcDriver/tests/PresentationPass.cpp core/libs/prx/libSceAgcDriver/tests/execution/PresentUpscale.cpp

Results

Check Result
Diff check Failed on trailing whitespace in the two imported FSR headers.
Conventions and PR template Passed.
Current-main merge preview Clean against 8a4fc62318a4b73b6895bf20a024c625efeb7c3b.
Fix/test files since validation head bef132589ce213bbf5ffa6c1472f415d6ecd4557 Unchanged at affd3b1699a0037511b3781626906969dd06add2.
Hosted CI Windows passed; Linux and specialized jobs were skipped. The NVIDIA report for the current head used validation layer 1.3.275; it lists agc_driver_present_upscale as skipped because the runner lacks VK_EXT_headless_surface.
Build and GPU tests run locally None.
Unedited local check output
All conventions checks passed.

3rdparty/FidelityFX-FSR/ffx-fsr/ffx_a.h:252: trailing whitespace.
+//  - Replace transcendentals with manual versions. 
3rdparty/FidelityFX-FSR/ffx-fsr/ffx_a.h:313: trailing whitespace.
+ // These follow the convention that A integer types don't have signage, until they are operated on. 
3rdparty/FidelityFX-FSR/ffx-fsr/ffx_fsr1.h:38: trailing whitespace.
+// 

Findings

Blocking

  • The reported VUID-vkCmdBeginRenderPass-initialLayout-00897 is fixed in source by adding sampled usage to views used with VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL. The supporting Khronos 1.4.341 run is on bef132589ce213bbf5ffa6c1472f415d6ecd4557, while the current head is affd3b1699a0037511b3781626906969dd06add2. The current-head NVIDIA run uses layer 1.3.275, which the author says does not report this VUID, and it skips agc_driver_present_upscale. Please provide the same focused validation on the current head and current main, with the layer inserted and no new VUIDs. The repository requires paired focused AGC validation on main and the change.

Non-blocking

  • git diff --check reports trailing whitespace in the imported FSR headers. The PR says they are copied byte-for-byte from upstream; stripping whitespace and updating the recorded hashes would make the patch check clean if preserving the exact upstream bytes is not required.

Sources

Not verified

  • No local build, C++ tests, or GPU tests were run. The 1.4.341 validation run was reported by the author on the previous head, not independently reproduced on affd3b1699a0037511b3781626906969dd06add2.
  • Linux and console behavior were not verified in this session.

To get this to a good state

Run the relevant presentation, FSR, overlay, and headless-upscale tests on current main and affd3b1699a0037511b3781626906969dd06add2 on the same machine/GPU with VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation, ANYPS5_NO_SHADER_CACHE=1, and ANYPS5_REQUIRE_VULKAN=1, using a validation layer version that reports 00897. Include the exact commits, GPU/driver/OS, layer insertion check, commands, and logs; I will re-run the same review checks on the new head.

EagleBearerYS added a commit to EagleBearerYS/AnyPS5 that referenced this pull request Nov 1, 2026
@EagleBearerYS

Copy link
Copy Markdown
Contributor Author

@MarcZX10 here's the comparison you asked for: current main cbcb37b against this head, affd3b1, on one machine, with a layer version that reports 00897.

  • The machine: a cloud Linux machine with no GPU. Ubuntu 24.04.5, lavapipe (llvmpipe, Mesa 25.2.8, LLVM 20.1.2, Vulkan 1.4.318), loader 1.3.275. Both trees were built with CI's Linux configure: Release, GCC 13.3, -DANYPS5_ENABLE_SPIRV_TOOLS=ON.
  • The layer: VK_LAYER_KHRONOS_validation 1.4.341, built from KhronosGroup's vulkan-sdk-1.4.341.0 tag (14de3c0d7b). It was loaded through VK_LAYER_PATH, so the system's 1.3.275 manifest is never searched.
    • The insertion check: with VK_LOADER_DEBUG=layer, the loader inserts that library inside a test process on each tree: agc_performance_overlay on main, agc_driver_presentation_fsr here. The line is Insert instance layer "VK_LAYER_KHRONOS_validation" (/home/user/vvl/src/build/layers/./libVkLayer_khronos_validation.so).
    • No log has a "was not found but was requested" line.
  • The command, as an unprivileged user: 3 runs offscreen, then 1 under Xvfb at 1920x1080 with the X11 VideoOut driver, per tree.
    VK_LAYER_PATH=<1.4.341 build> VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 GALLIUM_OVERRIDE_CPU_CAPS=avx ctest --test-dir build -V --timeout 120 -R 'agc_driver_present_upscale|agc_driver_presentation_fsr|^agc_driver_presentation_pass|^agc_performance_overlay|^video_out|^guest_video_out|agc_resident_present|agc_driver_sample_multisample_target'
    
  • The result: neither tree logs a validation message of any kind, in any run. There are 0 VUID- lines, so no 00897, and this head adds none.
    • main: 52 run. Offscreen: 16 pass, 36 skip, 0 fail. Xvfb: 51 pass, 1 skip, 0 fail.
    • This head: 54 run, main's 52 plus agc_driver_present_upscale and agc_driver_presentation_fsr. Offscreen: 18 pass, 36 skip, 0 fail. Xvfb: 53 pass, 1 skip, 0 fail.
    • The skips, the same on both trees:
      • offscreen, 29 tests get no Vulkan surface from SDL's offscreen driver, and 7 find no wayland or x11;
      • under Xvfb, guest_video_out_high_frame_rate skips, since Xvfb has no 120 Hz mode.
  • The red control: this head with only the sampled-usage fix reversed logs 20 VUID-vkCmdBeginRenderPass-initialLayout-00897 messages in one run:
    • agc_driver_presentation_fsr: 10;
    • agc_driver_present_upscale: 8;
    • agc_performance_overlay: 2.
      These are d0bd686's counts. With the fix restored, the count is 0 again. A validation message doesn't fail a test here, so the evidence is the count, not the pass count.
  • main moved during the run, to 029463c. Of the merges since, fix(agc): read the overlay's commit charge without a system-wide scan #13788 (PerformanceOverlay.cpp) and feat(libSceVideoOut): pulse each bound controller with its player number, opt-in with ANYPS5_PAD_IDENTIFY #13803 (VideoOut pad input) touch code these tests run, and none changes PresentationPass.cpp. This head merges cleanly with 029463c.

On the trailing whitespace: it's in AMD's headers as published. ffx_a.h and ffx_fsr1.h are copied unmodified from FidelityFX-FSR v1.0.2 (a21ffb8f6c), and the README records each file's SHA-256. So I've kept the upstream bytes, rather than strip them and record new hashes.

It's in the description's Tested section. Could you take another look?

@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 — changes requested

The new lavapipe comparison is useful, but it uses a main revision older than today’s base and misses a later change in VulkanDevice.cpp, which this PR also modifies.

What I ran

Reviewed PR head affd3b1699a0037511b3781626906969dd06add2 against PR base 0836dfdf4fecb1e0326100c490476e15d3a74da5; the merge preview against current main cf79276fee2f042feb6a7c71d0d6a27e9cfe2592 is clean. Environment: Debian Linux x86-64, Python 3.11.2; no local build or GPU tests.

python3 tools/pr_precheck.py --repo boykopovar/AnyPS5 --pr 10043
git diff --name-only cbcb37b3140db682277a9c51d950b90ce75de784 cf79276fee2f042feb6a7c71d0d6a27e9cfe2592 -- core/libs/prx/libSceAgcDriver/CMakeLists.txt core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp docs/dev/ENVIRONMENT.md docs/user/USAGE.md

Results

Check Result
Conventions and current-main merge preview Passed; preview is clean.
Author’s paired validation report On lavapipe, the author reports zero VUIDs on both cbcb37b314 and this head, and 20 00897 messages in a red control with the usage fix reverted. This is useful evidence, but it does not use the current base.
Current-main changes since the reported baseline Four paths changed, including VulkanDevice.cpp and the AGC CMake file; both are changed by this PR.
git diff --check Reports trailing whitespace in the imported FidelityFX headers; the PR records that these are unmodified upstream files. This is non-blocking.
Hosted checks Windows passed; Linux and specialized product jobs were skipped.
Unedited paths changed on main since the reported baseline
core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/ENVIRONMENT.md
docs/user/USAGE.md

Negative control

Assertion Change to code under test Did the test fail?
The sampled-usage fix removes the reported 00897 validation messages. Author reports reverting that fix on this PR head. Yes; the author reports 20 messages in the red control. I did not run it.

Findings

Blocking

The baseline is not current. The report compares cbcb37b3140db682277a9c51d950b90ce75de784 with this PR head. Current main is cf79276fee2f042feb6a7c71d0d6a27e9cfe2592; since the reported baseline, main changed VulkanDevice.cpp, which this PR also changes. The report therefore does not establish the result with the current integration. Please rerun the paired validation on exact current main and this head, with the same layer and environment, and update the report with both SHAs and layer-insertion evidence.

Non-blocking

The whitespace findings are confined to the imported FidelityFX headers whose upstream bytes and hashes are recorded in the PR.

Sources

Not verified

I did not run a local build, GPU tests, or performance capture. The paired validation and negative control are author-reported and use lavapipe rather than a physical GPU.

To get this to a good state

Repeat the relevant paired validation against current main and this head on the same machine, using the validation layer that reports 00897, and include the exact SHAs and layer insertion evidence. I’ll recheck the same paths and report when the new evidence is available.

@EagleBearerYS

Copy link
Copy Markdown
Contributor Author

@MarcZX10 here's the rerun on exact current main, cf79276, with the same layer and environment.

  • The trees:
  • The machine: the same cloud Linux setup as before: Ubuntu 24.04.5, lavapipe (Mesa 25.2.8, LLVM 20.1.2), and CI's Linux configure on each tree.
  • The layer: VK_LAYER_KHRONOS_validation 1.4.341, from the vulkan-sdk-1.4.341.0 tag (14de3c0d7b), loaded through VK_LAYER_PATH. VK_LOADER_DEBUG=layer shows Insert instance layer "VK_LAYER_KHRONOS_validation" (/home/user/vvl/src/build/layers/./libVkLayer_khronos_validation.so) inside a test process on each of the three trees, and no log has a "was not found" line.
  • The runs: the same command and test regex as last time, as an unprivileged user, with ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1. 3 runs offscreen and 1 under Xvfb per tree.
  • The result: no tree logs a validation message of any kind, in any run. There are 0 VUID- lines, and no 00897.
    • main: 52 run. Offscreen: 16 pass, 36 skip, 0 fail. Xvfb: 51 pass, 1 skip, 0 fail.
    • This head and the merge: 54 run each, main's 52 plus agc_driver_present_upscale and agc_driver_presentation_fsr. Offscreen: 18 pass, 36 skip, 0 fail. Xvfb: 53 pass, 1 skip, 0 fail.
    • The skips are the same on every tree, as before: offscreen, 29 tests get no Vulkan surface from SDL's offscreen driver and 7 find no wayland or x11. Under Xvfb, guest_video_out_high_frame_rate skips, since Xvfb has no 120 Hz mode.
  • The red control, on the merge: with only the sampled-usage fix reversed, one run logs 20 VUID-vkCmdBeginRenderPass-initialLayout-00897 messages: agc_driver_presentation_fsr 10, agc_driver_present_upscale 8, agc_performance_overlay 2. With the fix restored, it logs 0.

It's in the description's Tested section. Could you take another look?

@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.

Re-checked — new head, looks good

The requested paired Vulkan validation is now reported for PR head affd3b1699a0037511b3781626906969dd06add2, and the author’s negative control reproduces the original validation error when the fix is reverted.

What I ran

  • PR head affd3b1699a0037511b3781626906969dd06add2; PR base 0836dfdf4fecb1e0326100c490476e15d3a74da5.
  • Environment: Debian 12, Linux x86-64, Python 3.11.2. No compiler was invoked; I did not build or run C++/GPU tests locally.
  • Commands:
python3 tools/pr_precheck.py --repo boykopovar/AnyPS5 --pr 10043
python3 tools/pr_stack_check.py 10043 --repo boykopovar/AnyPS5 --output-dir /tmp/anyps5-stack-10043-final
gh api repos/boykopovar/AnyPS5/compare/cf79276fee2f042feb6a7c71d0d6a27e9cfe2592...b6bd6e7bf7b97ad00b3315fd26c1d4e76497f452 --jq '[.files[].filename | select(test("Presentation|libSceAgcDriver/CMakeLists|PerformanceOverlay"))]'

The author reports a clean merge of the PR head onto main cf79276fee2f042feb6a7c71d0d6a27e9cfe2592 as merge commit caa72b2703; this is author-provided, not a local merge/build. main has since advanced to b6bd6e7bf7b97ad00b3315fd26c1d4e76497f452. The intervening changes do not touch the FSR presentation implementation, its test registration, or the performance overlay paths.

Results

Check Result
Repository conventions and PR template Passed locally on the exact PR head/base.
git diff --check Reports trailing whitespace in the two vendored FidelityFX headers, which the PR identifies as byte-identical upstream files.
ABI and test-quality helpers Could not run in the isolated precheck worktree because those workspace-local scripts are absent there; no exports are changed.
Current-base merge preview The stack check reported a clean preview, but main advanced while it ran, so the tool marked the report stale. I do not count that preview as verified against the final tip.
Hosted CI Windows and conventions passed. Linux and specialized product jobs were skipped; a labels job was queued at the last snapshot.
Paired Vulkan validation The author reports zero validation messages on main cf79276fee2f042feb6a7c71d0d6a27e9cfe2592, the PR head, and their clean merge, using the same lavapipe host and validation layer. This was not run by me.
Unedited output excerpts
All conventions checks passed.
3rdparty/FidelityFX-FSR/ffx-fsr/ffx_a.h:252: trailing whitespace.
+//  - Replace transcendentals with manual versions. 
3rdparty/FidelityFX-FSR/ffx-fsr/ffx_fsr1.h:38: trailing whitespace.
+// 
Target branch tip: `30989cb45bd8435022d2a39672e3308b60bdd47e`
All heads unchanged: **False**
- PR #10043: **clean** against current base; head `affd3b1699a0037511b3781626906969dd06add2`
- PR #10043: Base advanced during checks (30989cb45bd8435022d2a39672e3308b60bdd47e → 97ca8c87517817ad84b441629d074eea9cf9bfd8); discard merge results.

Negative control

Assertion Change to code under test Did the test fail?
The sampled-image usage fix removes VUID-vkCmdBeginRenderPass-initialLayout-00897. Author reports reverting only that fix on the clean merge. Yes: 20 00897 messages; with the fix restored, zero. Author-reported, not independently run.

Sources

Not verified

I did not build locally or independently run C++ tests, validation-layer tests, GPU tests, Windows runtime, or console behavior. Linux and specialized product CI jobs were skipped. The local current-base merge preview raced with main advancement, so I cannot report a verified merge preview against the final observed tip.

The conflicts with boykopovar#12536 keep both sides. In VulkanDevice::present, the overlay's NotePresent gets main's frame limit argument, and its Record and the else branch keep this PR's upscaled condition. docs/dev/ENVIRONMENT.md keeps both rows.
@github-actions github-actions Bot added needs rebase Conflicts with main, rebase needed and removed needs rebase Conflicts with main, rebase needed labels Nov 1, 2026
@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head 57f34f0 merged onto main e6f5730 · tested 2026-11-01 14:56 UTC · 26 min

GPU NVIDIA RTX 2000 Ada Generation, driver 595.99.02, Vulkan 1.4.329
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-38-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ✅ 3,091 passed · 7 failed (0 new, 3 also fail on main, 4 unstable on main) · 52 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
Vulkan validation ✅ no new validation IDs vs main (1241 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.1 s, ⚠️ agc_driver_bda_device 65.1 s, ⚠️ agc_driver_graphics_maps_fallback 30.5 s
Intermittent validation messages (1, seen once in the parallel run, not reproduced when the test was re-run alone 2 times; not counted against this PR)
agc_driver_depth_clear_hle: VUID-vkCmdCopyBuffer-commonparent (6x)
Unstable on main (4, 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_pipeline_journal: failed in 1 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 8 of the last 10 main runs
Failing on main too (3, not counted against this PR)
agc_driver_image_table
guest_mmap_executable
guest_socket_options_multicast
Validated but not compared (2, not in the main baseline's validation pass)
agc_driver_present_upscale
agc_driver_presentation_fsr
Validation IDs already present on main (5 IDs in 717 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (717 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 709 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
VUID-VkShaderModuleCreateInfo-pCode-08737 (1 test): agc_driver_image_sample_derivatives
Skipped (52)
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_present_upscale: skipped, no Vulkan loader with VK_EXT_headless_surface
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_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 no
Reproduce
git fetch origin 57f34f0692cec187bda8d9b9ba10829808ad6640 e6f57307fa7f47165d7fc1bee945abdb2f6816e7
git checkout e6f57307fa7f47165d7fc1bee945abdb2f6816e7 && git merge --no-ff 57f34f0692cec187bda8d9b9ba10829808ad6640
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 2, 2026
# Conflicts:
#	core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
#	docs/dev/ENVIRONMENT.md
@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head 03c1bad merged onto main 88e804b · tested 2026-11-02 12:38 UTC · 24 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 ✅ 3,177 passed · 6 failed (0 new, 3 also fail on main, 3 unstable on main) · 53 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
Vulkan validation ✅ no new validation IDs vs main (1290 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.3 s, ⚠️ agc_driver_bda_device 62.2 s, ⚠️ agc_driver_graphics_maps_fallback 30.5 s
Unstable on main (3, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_pipeline_journal: failed in 2 of the last 10 main runs
agc_driver_submit_progress: failed in 8 of the last 10 main runs
agc_submit_progress: failed in 8 of the last 10 main runs
Failing on main too (3, not counted against this PR)
agc_driver_image_table
guest_mmap_executable
guest_socket_options_multicast
Validated but not compared (2, not in the main baseline's validation pass)
agc_driver_present_upscale
agc_driver_presentation_fsr
Validation IDs already present on main (5 IDs in 741 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (741 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 733 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
VUID-VkShaderModuleCreateInfo-pCode-08737 (1 test): agc_driver_image_sample_derivatives
Skipped (53)
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_present_upscale: skipped, no Vulkan loader with VK_EXT_headless_surface
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_ou
Reproduce
git fetch origin 03c1bad1f4ab0091d25c7dfc9e0e5d9aa7074d26 88e804b0a7df1f1ac373a9e2f72fb378d925fdd4
git checkout 88e804b0a7df1f1ac373a9e2f72fb378d925fdd4 && git merge --no-ff 03c1bad1f4ab0091d25c7dfc9e0e5d9aa7074d26
git submodule update --init --recursive
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON -DANYPS5_ENABLE_SPIRV_TOOLS=ON
cmake --build build && cmake --build build --target libs
VK_DRIVER_FILES=/nonexistent/icd.json ctest --test-dir build -E '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 32 --output-on-failure
ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation \
  ctest --test-dir build -R '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 4 --output-on-failure
# failures are then re-run alone: --timeout 360 --parallel 2; new validation IDs: the test alone, twice, --parallel 1

Automated build and test on a contributor's NVIDIA machine; it does not replace upstream CI. A new comment is posted for each new push. Full logs.

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

RNK123 commented Nov 4, 2026

Copy link
Copy Markdown

RADV/RX 9060 XT: the FSR offscreen test and the headless presentation test passed, including the latter's FSR/overlay combinations (3 runs each); the NVIDIA CI report says its headless test skipped because VK_EXT_headless_surface was unavailable.

Tested head 03c1bad1f4 merged onto main 1c8c0efc8c. On main, agc_driver_presentation_pass and agc_performance_overlay passed 2/2 in each of three runs. On the merge those two plus agc_driver_presentation_fsr passed 3/3 in each of three runs. The PR-only agc_driver_present_upscale passed three times, creating real headless swapchains on the Radeon, including the overlay and overlay-plane cases. No test or subcase was reported skipped. Khronos validation was inserted, and neither arm had VUID- or SYNC-HAZARD- diagnostics. The loader also reported a pre-existing unrelated LSFG implicit-layer loading failure on both arms; the requested Khronos layer did load.

Sensitivity check: on the merged tree only, disabling upscaler creation (if (false && upscale.fsr)) made agc_driver_present_upscale fail at the expected “FSR without the overlay ... was not upscaled” assertion in 3/3 runs; restoring that line passed 3/3. This is a deliberate mutation, not an unmodified-main comparison. The PR-only test does not exist on main.

Host: CachyOS, Linux 7.3.1-1-cachyos, GCC 16.2.1, Release; RX 9060 XT (RADV GFX1200), Mesa 26.2.5-arch3.1, Vulkan 1.4.354, validation layer 1.4.363.

Reproduction

Build the presentation and overlay test targets on main and on the PR merged onto that same main. On each tree run three times:

export ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1
export VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation VK_LOADER_DEBUG=layer
export VK_LAYER_PATH="$HOME/.local/share/anyps5-tester/vk-layers/usr/share/vulkan/explicit_layer.d"
ctest --test-dir build-main -V -R '^(agc_driver_presentation_pass|agc_performance_overlay)$'

On the merged tree also run three times:

ctest --test-dir build-main -V -R '^(agc_driver_presentation_fsr|agc_driver_present_upscale)$'

Limits: synthetic test inputs, not a game or a visual quality/performance comparison; no PS5 hardware. The counter-test checks FSR selection, not every shader calculation. AI-assisted independent hardware test run (GPT-6.1 Terra).

@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ AMD GPU test: passed

PR head 03c1bad merged onto main 1c8c0ef · tested 2026-11-04 04:36 UTC · 46 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 ✅ 3,765 passed · 17 failed (0 new, 11 also fail on main, 6 unstable on main) · 62 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
Vulkan validation ✅ no new validation IDs vs main (1367 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 121.0 s, ⚠️ agc_driver_graphics_maps_fallback 120.3 s, ⚠️ agc_driver_graphics 120.1 s, ⚠️ agc_driver_lazy_resolved_abi_switch_set 65.3 s, ⚠️ agc_driver_bda_device 54.3 s
Unstable on main (6, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_alpha_to_coverage_sample_mask_export: failed in 3 of the last 10 main runs
agc_driver_graphics: failed in 2 of the last 10 main runs
agc_driver_graphics_maps_fallback: failed in 1 of the last 10 main runs
agc_driver_pipeline_journal: failed in 8 of the last 10 main runs
agc_driver_submit_progress: failed in 8 of the last 10 main runs
agc_driver_two_sample_alpha_to_coverage_sample_mask_export: failed in 2 of the last 10 main runs
Failing on main too (11, not counted against this PR)
agc_driver_guest_memory_lifetime_direct
agc_driver_image_table
agc_driver_job_manager_compute_capacity
agc_driver_native_depth_bda_clear
agc_driver_native_depth_buffer_clear
agc_driver_native_depth_clears
agc_driver_native_multisample_depth
agc_submit_progress
agc_submit_progress_no_timeline
guest_mmap_executable
guest_socket_options_multicast
Passed on retry (1, failed in the parallel run, passed when re-run with a 360 s timeout; not counted against this PR)
agc_driver_presentation_fsr: Timeout in the parallel run
Validated but not compared (2, not in the main baseline's validation pass)
agc_driver_present_upscale
agc_driver_presentation_fsr
Validation IDs already present on main (8 IDs in 783 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (783 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_alpha_to_coverage_sample_mask_export, and 775 more
VUID-vkCmdCopyImage-srcImage-01548 (11 tests): agc_driver_depth_clear_hle, 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_image_copy, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_plane_partially_unmapped_plane, agc_driver_depth_plane_unmapped_plane, and 3 more
VUID-vkCmdCopyImage-srcImage-01551 (11 tests): agc_driver_depth_clear_hle, 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_image_copy, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_plane_partially_unmapped_plane, agc_driver_depth_plane_unmapped_plane, and 3 more
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (2 tests): agc_driver_prepared_exports, agc_driver_srgb8_color_target
VUID-VkSamplerCreateInfo-addressModeU-01079 (1 test): agc_driver_image_gather_volume
VUID-VkSamplerCreateInfo-addressModeU-parameter (1 test): agc_driver_image_gather_volume
VUID-VkSamplerCreateInfo-addressModeV-parameter (1 test): agc_driver_image_gather_volume
VUID-VkSamplerCreateInfo-addressModeW-parameter (1 test): agc_driver_image_gather_volume
Skipped (62)
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_copied_writer_label_order_drain: 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_driver_vertex_elected_atomic_max: skipped, the device runs vertex programs in subgroups, so they keep their cross-lane reductions
agc_host_import_sparse: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_idle_publish_wait: skipped, the device reports 4 of 4 host-imported pages written after a GPU read, so a forced watch of the import reads its submissions as CPU stores
agc_import_settle_initial_dcc: skipped, the device has no deferred settle of host imports: imports under 1 MiB wait for one only on Windows
agc_shadowed_key_stores: skipped, the device imports no watched host memory under a unit shadow
agc_small_tiled_shadow_label: skipped, host imports are unavailable: the test block is not imported and watched
agc_storage_clear_hand_over: skipped, the device imports no watched host memory for the clear-key hand-over
agc_storage_pending_key_refresh: skipped, refreshes over a pending key store are not testable here
agc_unit_shadow: skipped, the device does not import watched host memory for unit shadows
agc_unit_shadow_completion_store: skipped, the device reports watched host memory written when it imports or reads it
guest_http_uri_locale: 
guest_net_ctl: skipped, the host has no IPv4 address
guest_video_out_color_space: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_hdr: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_high_frame_rate: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_output_mode: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_resolution_status: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_wqhd_detection: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
video_out_flip_aftergp
Reproduce
git fetch origin 03c1bad1f4ab0091d25c7dfc9e0e5d9aa7074d26 1c8c0efc8c41314402e6966da5bef6ea3d639d10
git checkout 1c8c0efc8c41314402e6966da5bef6ea3d639d10 && git merge --no-ff 03c1bad1f4ab0091d25c7dfc9e0e5d9aa7074d26
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.

On the AMD GPU bot's RX 6300 (RADV), under VK_LAYER_KHRONOS_validation,
the test takes 19.95 s run alone, and in the bot's 4-way parallel run it
hit its 30 s timeout with its checks already passed. 60 s leaves room
for validation runs under load.
@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ AMD GPU test: passed

PR head 933b263 merged onto main 1c8c0ef · tested 2026-11-04 07:46 UTC · 45 min

GPU AMD Radeon RX 6300 (RADV NAVI24), driver Mesa 25.2.8-0ubuntu0.24.04.4, Vulkan 1.4.318
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-42-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ✅ 3,767 passed · 15 failed (0 new, 11 also fail on main, 4 unstable on main) · 62 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
Vulkan validation ✅ no new validation IDs vs main (1371 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 106.5 s, ⚠️ agc_driver_graphics 106.0 s, ⚠️ public_headers 50.5 s, ⚠️ agc_driver_bda_device 45.1 s
Unstable on main (4, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_alpha_to_coverage_sample_mask_export: failed in 3 of the last 10 main runs
agc_driver_pipeline_journal: failed in 8 of the last 10 main runs
agc_driver_submit_progress: failed in 8 of the last 10 main runs
agc_driver_two_sample_alpha_to_coverage_sample_mask_export: failed in 2 of the last 10 main runs
Failing on main too (11, not counted against this PR)
agc_driver_guest_memory_lifetime_direct
agc_driver_image_table
agc_driver_job_manager_compute_capacity
agc_driver_native_depth_bda_clear
agc_driver_native_depth_buffer_clear
agc_driver_native_depth_clears
agc_driver_native_multisample_depth
agc_submit_progress
agc_submit_progress_no_timeline
guest_mmap_executable
guest_socket_options_multicast
Passed on retry (2, failed in the parallel run, passed when re-run with a 360 s timeout; not counted against this PR)
guest_pthread_start: Timeout in the parallel run; also passed only on retry in 26 other runs in the last 7 days
trace_digest_TraceDigestTests_test_cli_rejects_invalid_event_fields_without_partial_output: Timeout in the parallel run; also passed only on retry in 45 other runs in the last 7 days
Validated but not compared (5, not in the main baseline's validation pass)
agc_driver_present_upscale
agc_driver_presentation_fsr
public_headers
public_headers_compile_16
trace_digest_TraceDigestTests_test_cli_rejects_invalid_event_fields_without_partial_output
Validation IDs already present on main (8 IDs in 783 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (783 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_alpha_to_coverage_sample_mask_export, and 775 more
VUID-vkCmdCopyImage-srcImage-01548 (11 tests): agc_driver_depth_clear_hle, 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_image_copy, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_plane_partially_unmapped_plane, agc_driver_depth_plane_unmapped_plane, and 3 more
VUID-vkCmdCopyImage-srcImage-01551 (11 tests): agc_driver_depth_clear_hle, 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_image_copy, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_plane_partially_unmapped_plane, agc_driver_depth_plane_unmapped_plane, and 3 more
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (2 tests): agc_driver_prepared_exports, agc_driver_srgb8_color_target
VUID-VkSamplerCreateInfo-addressModeU-01079 (1 test): agc_driver_image_gather_volume
VUID-VkSamplerCreateInfo-addressModeU-parameter (1 test): agc_driver_image_gather_volume
VUID-VkSamplerCreateInfo-addressModeV-parameter (1 test): agc_driver_image_gather_volume
VUID-VkSamplerCreateInfo-addressModeW-parameter (1 test): agc_driver_image_gather_volume
Skipped (62)
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_copied_writer_label_order_drain: 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_driver_vertex_elected_atomic_max: skipped, the device runs vertex programs in subgroups, so they keep their cross-lane reductions
agc_host_import_sparse: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_idle_publish_wait: skipped, the device reports 4 of 4 host-imported pages written after a GPU read, so a forced watch of the import reads its submissions as CPU stores
agc_import_settle_initial_dcc: skipped, the device has no deferred settle of host imports: imports under 1 MiB wait for one only on Windows
agc_shadowed_key_stores: skipped, the device imports no watched host memory under a unit shadow
agc_small_tiled_shadow_label: skipped, host imports are unavailable: the test block is not imported and watched
agc_storage_clear_hand_over: skipped, the device imports no watched host memory for the clear-key hand-over
agc_storage_pending_key_refresh: skipped, refreshes over a pending key store are not testable here
agc_unit_shadow: skipped, the device does not import watched host memory for unit shadows
agc_unit_shadow_completion_store: skipped, the device reports watched host memory written when it imports or reads it
guest_http_uri_locale: 
guest_net_ctl: skipped, the host has no IPv4 address
guest_video_out_color_space: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_hdr: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_high_frame_rate: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_output_mode: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_resolution_status: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_wqhd_detection: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
video_out_flip_aftergp
Reproduce
git fetch origin 933b263a6d08b131e4040ac19deb7ff4ae35565b 1c8c0efc8c41314402e6966da5bef6ea3d639d10
git checkout 1c8c0efc8c41314402e6966da5bef6ea3d639d10 && git merge --no-ff 933b263a6d08b131e4040ac19deb7ff4ae35565b
git submodule update --init --recursive
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON -DANYPS5_ENABLE_SPIRV_TOOLS=ON
cmake --build build && cmake --build build --target libs
VK_DRIVER_FILES=/nonexistent/icd.json ctest --test-dir build -E '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 12 --output-on-failure
ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation \
  ctest --test-dir build -R '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 16 --output-on-failure
# failures are then re-run alone: --timeout 360 --parallel 2; new validation IDs: the test alone, twice, --parallel 1

Automated build and test on a contributor's AMD machine; it does not replace upstream CI. A new comment is posted for each new push. Full logs.

@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head 933b263 merged onto main 5b1d381 · tested 2026-11-04 07:47 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 ✅ 3,826 passed · 5 failed (0 new, 3 also fail on main, 2 unstable on main) · 54 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
Vulkan validation ✅ no new validation IDs vs main (1392 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.3 s, ⚠️ agc_driver_bda_device 48.0 s, ⚠️ public_headers 31.3 s, ⚠️ agc_driver_graphics_maps_fallback 30.8 s, ⚠️ agc_driver_graphics 30.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 3 of the last 10 main runs
agc_submit_progress_no_timeline: failed in 3 of the last 10 main runs
Failing on main too (3, not counted against this PR)
agc_driver_image_table
guest_mmap_executable
guest_socket_options_multicast
Validated but not compared (2, not in the main baseline's validation pass)
agc_driver_present_upscale
agc_driver_presentation_fsr
Validation IDs already present on main (13 IDs in 801 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (801 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_alpha_to_coverage_sample_mask_export, and 793 more
VUID-vkCmdCopyImage-srcImage-01548 (15 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_image_copy, agc_driver_depth_plane_partial_store_unimported, and 7 more
VUID-vkCmdCopyImage-srcImage-01551 (15 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_image_copy, agc_driver_depth_plane_partial_store_unimported, and 7 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-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 (54)
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_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_present_upscale: skipped, no Vulkan loader with VK_EXT_headless_surface
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,
Reproduce
git fetch origin 933b263a6d08b131e4040ac19deb7ff4ae35565b 5b1d381d5ad5d9f923326b18479c3bd889cdd588
git checkout 5b1d381d5ad5d9f923326b18479c3bd889cdd588 && git merge --no-ff 933b263a6d08b131e4040ac19deb7ff4ae35565b
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 6, 2026
@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Nov 6, 2026
@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head d7a519d merged onto main 5299939 · tested 2026-11-06 12:17 UTC · 25 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 ✅ 4,145 passed · 5 failed (0 new, 4 also fail on main, 1 unstable on main) · 62 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
Vulkan validation ✅ no new validation IDs vs main (1434 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.1 s, ⚠️ agc_driver_graphics_maps_fallback 30.9 s, ⚠️ agc_graphics_profile_draw 30.4 s, ⚠️ agc_driver_bda_device 30.2 s, ⚠️ agc_driver_graphics 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 1 of the last 10 main runs
Failing on main too (4, not counted against this PR)
agc_driver_image_table
guest_mmap_executable
guest_socket_options_multicast
web_library_assets
Validated but not compared (2, not in the main baseline's validation pass)
agc_driver_present_upscale
agc_driver_presentation_fsr
Validation IDs already present on main (9 IDs in 819 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (819 tests): agc_compute_pipeline_replay, agc_driver, agc_driver_address_draw_space_reuse, agc_driver_address_draw_space_reuse_held, agc_driver_address_draw_space_reuse_off, agc_driver_address_draw_space_reuse_transitions, agc_driver_address_draw_space_reuse_verify, agc_driver_address_passes, and 811 more
VUID-vkCmdCopyImage-srcImage-01548 (15 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_image_copy, agc_driver_depth_plane_partial_store_unimported, and 7 more
VUID-vkCmdCopyImage-srcImage-01551 (15 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_image_copy, agc_driver_depth_plane_partial_store_unimported, and 7 more
VUID-VkShaderModuleCreateInfo-pCode-08737 (14 tests): agc_driver_dpp16_operands, agc_driver_dpp8_pk_fmac, agc_driver_dx10_clamp, agc_driver_f16_fma_denormal_modes, agc_driver_f16_fma_invalid_nan, agc_driver_float16_fma_rounding, agc_driver_float16_modifiers, agc_driver_float16_native, and 6 more
VUID-VkShaderModuleCreateInfo-pCode-08739 (14 tests): agc_driver_dpp16_operands, agc_driver_dpp8_pk_fmac, agc_driver_dx10_clamp, agc_driver_f16_fma_denormal_modes, agc_driver_f16_fma_invalid_nan, agc_driver_float16_fma_rounding, agc_driver_float16_modifiers, agc_driver_float16_native, and 6 more
VUID-VkShaderModuleCreateInfo-pCode-08741 (14 tests): agc_driver_dpp16_operands, agc_driver_dpp8_pk_fmac, agc_driver_dx10_clamp, agc_driver_f16_fma_denormal_modes, agc_driver_f16_fma_invalid_nan, agc_driver_float16_fma_rounding, agc_driver_float16_modifiers, agc_driver_float16_native, and 6 more
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (2 tests): agc_driver_prepared_exports, agc_driver_srgb8_color_target
VUID-VkPipelineShaderStageCreateInfo-module-parameter (1 test): agc_driver_float16_unused_nan_payloads
VUID-VkPipelineShaderStageCreateInfo-pSpecializationInfo-06849 (1 test): agc_driver_float16_unused_nan_payloads
Skipped (62)
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_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_present_upscale: skipped, no Vulkan loader with VK_EXT_headless_surface
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_net_ctl_disconnected: skipped, the host has no IPv4 address
guest_video_out_color_space: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_device_capability: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_hdr: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_high_frame_rate: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_host_resolution_disabled: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_host_resolution_four_k: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_host_resolution_height_only: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_host_resolution_limit: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_host_resolution_malformed: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_host_resolution_width_only: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_output_mode: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_resolution_status: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
g
Reproduce
git fetch origin d7a519d557b0d23113fcf684a0b61de33a6801d7 5299939ecfa9e186e1eb457c6f4bd133bdb087c7
git checkout 5299939ecfa9e186e1eb457c6f4bd133bdb087c7 && git merge --no-ff d7a519d557b0d23113fcf684a0b61de33a6801d7
git submodule update --init --recursive
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON -DANYPS5_ENABLE_SPIRV_TOOLS=ON
cmake --build build && cmake --build build --target libs
VK_DRIVER_FILES=/nonexistent/icd.json ctest --test-dir build -E '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 32 --output-on-failure
ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation \
  ctest --test-dir build -R '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 4 --output-on-failure
# failures are then re-run alone: --timeout 360 --parallel 2; new validation IDs: the test alone, twice, --parallel 1

Automated build and test on a contributor's NVIDIA machine; it does not replace upstream CI. A new comment is posted for each new push. Full logs.

This branch has not been deployed

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants