Skip to content

perf(shader): keep a binding's element flags inline - #6970

Open
meh7an wants to merge 3 commits into
boykopovar:mainfrom
meh7an:perf/shader-binding-element-flags
Open

meh7an wants to merge 3 commits into
boykopovar:mainfrom
meh7an:perf/shader-binding-element-flags

Conversation

@meh7an

@meh7an meh7an commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

What

DescriptorBindingBuilder::Populate turns a stage's binding plan into the bindings of a materialized result, for every draw stage the memos miss and for every dispatch. It copies each planned DescriptorBinding (auto physical = entry.descriptor). A binding keeps 12 per-element flag lists as std::vector<bool>: samplerDepthCompare, imageWritten, imageDepthCompare, imageAtomic, imageAtomic64, bufferAtomic, bufferWritten, samplerUnnormalized, samplerIntegerBorder, imageUnnormalized, imageUnnormalizedBaseLevel and bufferRead. Every copy allocates one block per non-empty list, and releasing the result frees them again.

ElementFlags (in Recompiler.hpp) replaces std::vector<bool> for those lists:

  • Up to 64 flags live in one inline word; a longer list moves to a std::vector<bool>. A binding rarely has more than 64 elements, so a copy allocates nothing.
  • It reads and writes as std::vector<bool> does: size, empty, [] (a reference proxy when written), at, back, iteration, push_back, assign, resize, clear, and == with another list or a std::vector<bool>. The code that fills and reads the lists stays as it is.
    • Two test lambdas take ElementFlags instead of std::vector<bool>.
    • The image table reuse keeps its copy of the depth compare flags as ElementFlags.
  • The shader disk cache writes and reads it as before (a count, then one byte per flag), so the entry format is unchanged. The recompiler's sources change, so the shader cache version changes with them.
  • verifyElementFlags (shader disk cache tests) checks 70 flags, past the inline word. It covers reads, iteration, copies, writes through [] and back(), resize both ways, assign, clear, and a round trip through the disk cache.

On the S2 page of Sonic Origins Plus's main menu, the queue worker spent, per frame (APS5 sampler, 15 s):

  • Populate: 1.28 to 0.91. In a profile of the baseline, 78 of its 151 direct operator new samples were inlined std::vector<bool> copies (8 call sites), and 14 more were in std::vector<bool>'s copy constructor.
  • releasing the results (RecompileResult's disposal): 0.76 to 0.57;
  • operator new 3.38 to 2.88, mi_free 0.68 to 0.59;
  • the whole worker: 32.80 to 31.04 samples.

That is a few percent of the worker's frame at most. On current main, three paired runs below put the frame median about 2% lower.

Tested

Windows 11 (10.0.26300), WinLibs GCC 15.2.0 (UCRT), Release, NVIDIA GeForce RTX 2080 Ti, driver 617.14.

  • ShaderDiskCache.cpp's size asserts compile only on Linux (x86_64, libstdc++), so the Windows build above skips them.
    • ElementFlags is 56 bytes against std::vector<bool>'s 40. Main's DescriptorBinding now has 13 such lists, with samplerCoordinatesIgnored, so it grows from 656 to 864 bytes (+32%), and its assert says 864.
    • Under MinGW's libstdc++, whose layout matches (main reads 656 there, as main's assert says), sizeof(DescriptorBinding) is 864 with this change.
    • The first version, on main 7d728b1, grew it from 592 to 784 bytes (thanks @teepean).
  • Rebased onto main 53a0a27 (a9a338c).
    • The size asserts keep main's ShaderInvocation (216) and RecompileResult (528). DescriptorBinding is 864. All four sizes were checked under MinGW's libstdc++ with a Size<sizeof(...)> probe: 216, 528, 864 and CompiledShaderArtifact 280.
    • On that main, with this change, the full ctest suite passes 1836 of 1837. agc_driver_image_array_window_past_layer_limit is not run: MinGW does not build its alignas(65536).
  • Rebased onto main 1d41645.
    • Main's new samplerCoordinatesIgnored is an ElementFlags as well; main's bufferExtent stays a std::vector<std::uint32_t>.
    • On that main, with this change, the full ctest suite passes 1739 of 1741.
      • agc_driver_image_array_window_past_layer_limit is not run: main does not compile ImageArrayWindowPastLayerLimit.cpp with MinGW (alignas(65536)).
      • agc_driver_pass_input_hazard (added in ba4571a) fails on plain main 1d41645 as well, 0 of 4 runs alone.
  • Sonic Origins Plus, S2 page, re-measured on main 1d41645 in one session: three runs per side, interleaved, each a APS5_TRACE_SECONDS=200:15 capture with warm caches and the title FPS (median of six readings).
Run Main frame p50 (ms) This PR frame p50 (ms) Main Driver.Draw (ms per frame) This PR Driver.Draw (ms per frame) Main title FPS This PR title FPS
1 91.13 84.66 71.05 59.15 12.41 12.40
2 86.83 85.16 61.84 60.79 11.91 12.05
3 86.25 85.88 62.63 61.03 12.22 12.22
  • Every run with this change has a lower frame p50 than every main run. The medians are 86.83 and 85.16 ms (-1.9%), and Driver.Draw 62.63 and 60.79 ms (-2.9%).
  • The title FPS medians are equal (12.22), so the gain is small, below what the title counter resolves.
  • The digests at the end are the median pair, run 2 of each side.

Before this rebase:

  • On main 7d728b1 with this change, the full ctest suite passes 1338 of 1341 tests.
    • agc_driver_gpu_indirect_arguments_misaligned_writer_ahead is not run: main itself does not compile it with MinGW (alignas(65536)).
    • select_tests fails in its setup on Windows without the symlink privilege (WinError 1314 from symlink_to), as on main.
    • build_eligibility timed out once in the parallel run; alone it passes in 1.5 s.
  • Sonic Origins Plus, main menu, S2 page (the 3D background), 1233x694 window.
    • A sampled pair (APS5 sampler, 15 s) took the profile numbers above. The FPS shown in the title went from 10.81 to 10.56 (median of six readings).
    • Captured with APS5_TRACE_SECONDS=200:15 on the same machine in one session, caches warm. Traces attached.
    • Baseline b1909f4, this change 245e355 (the summaries name the commits before them, see the note):
Metric Baseline This PR Change
frame_ms.p50 100.348 100.704 +0.4%
frame_ms.p90 105.573 106.216 +0.6%
mean_frame_ms 102.355 103.202 +0.8%
gpu_busy_ms_per_present 84.431 83.660 -0.9%
Driver.Packet (ms per frame) 100.360 101.155 +0.8%
Driver.Draw (ms per frame) 88.210 89.173 +1.1%

The title FPS during the two captures was 10.78 and 10.82 (median of six readings each).

Note: measuring base. These numbers come from my fork's dev, on main 0a56aaa. The bindings and their copy in Populate are the same on main 7d728b1.

  • The baseline is measure/inline-2026-10-17 (b1909f4).
  • This change is measure/flags-2026-10-17 (245e355). There it converts the same 12 lists. This PR adds the reference proxy, back, resize and the image table's flags, which main's newer code and tests use.
  • Each build was made before its commit, so the summaries name the commit before it, dirty: 11882cc for the baseline and b1909f4 for this change.

Both carry these commits from my fork:

The comparison tool marks the window's first present as a configuration difference: the window opens 200 s into each run. Both summaries set trace_dropped, because the worker filled its event buffer at about 2,700 draws per frame.

The summaries list only their top phases. Driver.Draw.shader_compile_and_link (33.1 ms per frame in the baseline) and the present's render_fence_wait (32.2 in this change) sit at the list's cutoff, so each capture lists only one of them.

Checklist

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

Traces and summary lines (baseline b1909f4, whose summary says 11882cc; this change 245e355, whose summary says b1909f4):
flags-traces.zip

Traces of the six re-measured runs on main 1d41645, one zip per round with that round's main and this-change capture: flags-rebased-round1.zip, flags-rebased-round2.zip, flags-rebased-round3.zip.

The re-measured median pair on main 1d41645, with tools/trace_digest.py for each trace:

Main 1d41645, run 2 (summary commit 1d41645)

seconds 200:15 from present 3075: 170 presents, frame p50 86.8 / p90 92.1 / p99 115.2 / max 117.7 ms, GPU busy 69.1 ms per present
NVIDIA GeForce RTX 2080 Ti, NVIDIA 617.14, Windows 10.0.26300, 3840x2160, commit 1d41645, dropped: yes

{"commit":"1d41645527f5","dirty":false,"env":{"APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"200:15"},"gpu":"NVIDIA GeForce RTX 2080 Ti","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","cpu":"Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz","cpu_threads":16,"memory_mib":32684,"title_id":"PPSA05324","title":"Sonic Origins","content_version":"02.002.000","resolution":"3840x2160","window":{"spec":"seconds 200:15","first_present":3075,"ms":15013.344},"presents":170,"frame_ms":{"p50":86.832,"p90":92.073,"p99":115.234,"max":117.659},"gpu_busy_ms_per_present":69.058,"worker_busy_pct":{"queue worker 0x0":96.848},"top_phases_ms_per_frame":{"Driver.Packet":85.501,"Driver.Packet.draw":63.243,"Driver.Draw":61.837,"Graphics.Draw":58.045,"Graphics.Draw.draw_and_resource_release":48.446,"Driver.Draw.shader_compile_and_link":41.847,"Shader.DrawStage":32.497,"VideoOut.Flip":24.784},"trace_dropped":true,"trace_dropped_threads":{"queue worker 0x0":{"events_full_after_s":6.117,"events_lost":385724,"totals_full":false},"draw committer":{"events_full_after_s":14.471,"events_lost":10071,"totals_full":false}},"trace":"aps5-trace-1d41645527f5-40372.json.gz"}

Slowest frames (largest slices inside each, inclusive)

  • present 3175: 117.7 ms at 8834 ms: batch (gpu) 67.8, Graphics.Draw (draw committer) 61.7, Graphics.Draw.draw_and_resource_release (draw committer) 56.1, VideoOut.Flip (presenter) 24.6
  • present 3113: 115.2 ms at 3355 ms: Driver.Packet (queue worker 0x0) 77.6, batch (gpu) 70.1, Driver.Packet.draw (queue worker 0x0) 63.2, Driver.Draw (queue worker 0x0) 62.1
  • present 3185: 112.0 ms at 9725 ms: batch (gpu) 69.6, Graphics.Draw (draw committer) 58.1, Graphics.Draw.draw_and_resource_release (draw committer) 53.7, VideoOut.Flip (presenter) 25.0
  • present 3209: 112.0 ms at 11854 ms: batch (gpu) 68.2, Graphics.Draw (draw committer) 57.8, Graphics.Draw.draw_and_resource_release (draw committer) 52.3, VideoOut.Flip (presenter) 24.1
  • present 3085: 110.8 ms at 859 ms: Driver.Packet (queue worker 0x0) 74.1, batch (gpu) 65.2, Driver.Packet.draw (queue worker 0x0) 59.7, Driver.Draw (queue worker 0x0) 58.4

Threads (ms per frame)

thread busy wait untraced in slices < 20 us largest
title 1.0 (1 %) 0.0 (0 %) 87.3 0.7 Shader.ResolveGraphicsStagesAbi 0.7, Shader.ResolveAbi 0.3
queue worker 0x0 19.2 (22 %) 0.0 (0 %) 69.0 82.9 Driver.Packet 19.3, Driver.EndSubmission 0.0
draw committer 34.2 (39 %) 0.5 (1 %) 53.6 50.9 Graphics.Draw 32.5, Recorder.Submit 1.0
title 0.4 (0 %) 0.0 (0 %) 88.0 0.1 Shader.ResolveGraphicsStagesAbi 0.2, Shader.ResolveAbi 0.1
title 0.2 (0 %) 0.0 (0 %) 88.1 0.1 Shader.ResolveGraphicsStagesAbi 0.1, Shader.ResolveAbi 0.1
title 0.3 (0 %) 0.0 (0 %) 88.0 0.1 Shader.ResolveGraphicsStagesAbi 0.2, Shader.ResolveAbi 0.1
presenter 0.7 (1 %) 24.1 (27 %) 63.5 0.0 VideoOut.Flip 24.8, Driver.Present 0.0
title 0.3 (0 %) 0.0 (0 %) 88.0 0.1 Shader.ResolveGraphicsStagesAbi 0.2, Shader.ResolveAbi 0.1
title 0.3 (0 %) 0.0 (0 %) 88.0 0.1 Shader.ResolveGraphicsStagesAbi 0.2, Shader.ResolveAbi 0.1
title 0.3 (0 %) 0.0 (0 %) 88.0 0.1 Shader.ResolveGraphicsStagesAbi 0.2, Shader.ResolveAbi 0.1
title 0.3 (0 %) 0.0 (0 %) 88.0 0.1 Shader.ResolveGraphicsStagesAbi 0.2, Shader.ResolveAbi 0.1
title 0.3 (0 %) 0.0 (0 %) 88.0 0.1 Shader.ResolveGraphicsStagesAbi 0.1, Shader.ResolveAbi 0.1
title 0.3 (0 %) 0.0 (0 %) 88.0 0.1 Shader.ResolveGraphicsStagesAbi 0.2, Shader.ResolveAbi 0.1
title 0.4 (0 %) 0.0 (0 %) 88.0 0.1 Shader.ResolveGraphicsStagesAbi 0.2, Shader.ResolveAbi 0.1
title 0.3 (0 %) 0.0 (0 %) 88.0 0.1 Shader.ResolveGraphicsStagesAbi 0.2, Shader.ResolveAbi 0.1
title 0.3 (0 %) 0.0 (0 %) 88.1 0.1 Shader.ResolveGraphicsStagesAbi 0.1, Shader.ResolveAbi 0.1
gpu 68.5 (78 %) 0.0 (0 %) 19.8 0.0 batch 68.5

Largest slices (ms per frame, inclusive, all threads): batch 68.5, Graphics.Draw 32.5, Graphics.Draw.draw_and_resource_release 28.0, VideoOut.Flip 24.8, Driver.Present 24.7, VideoOut.Flip.present 24.7, Driver.Present.render_fence_wait 24.0, Vulkan.Retire 24.0, Vulkan.Retire.wait 24.0, Driver.Packet 19.3

Longest waits

  • Driver.Present.render_fence_wait (presenter) 28.8 ms at 14313 ms, present 3237
  • Driver.Present.render_fence_wait (presenter) 27.9 ms at 4884 ms, present 3130
  • Driver.Present.render_fence_wait (presenter) 27.8 ms at 10543 ms, present 3194
  • Driver.Present.render_fence_wait (presenter) 27.6 ms at 8233 ms, present 3168
  • Driver.Present.render_fence_wait (presenter) 27.6 ms at 8497 ms, present 3171
  • Driver.Present.render_fence_wait (presenter) 27.5 ms at 14399 ms, present 3238
  • Driver.Present.render_fence_wait (presenter) 27.4 ms at 4440 ms, present 3125
  • Driver.Present.render_fence_wait (presenter) 27.3 ms at 7431 ms, present 3159
  • Driver.Present.render_fence_wait (presenter) 27.2 ms at 13003 ms, present 3222
  • Driver.Present.render_fence_wait (presenter) 27.1 ms at 11252 ms, present 3202

Largest GPU batches (GPU ranges inside, and the CPU slices that recorded each, inclusive)

  • batch 12254: 12.5 ms at 14483 ms, present 3238: GPU no ranges; recorded by no CPU slices
  • batch 8207: 12.4 ms at 9720 ms, present 3184: GPU no ranges; recorded by no CPU slices
  • batch 10519: 11.2 ms at 12466 ms, present 3215: GPU no ranges; recorded by Graphics.Draw (draw committer) 3.8, Graphics.Draw.draw_and_resource_release (draw committer) 3.6, Resources.Prepare (draw committer) 0.5, Recorder.Submit (draw committer) 0.2
  • batch 4533: 10.9 ms at 5398 ms, present 3135: GPU no ranges; recorded by Graphics.Draw (draw committer) 3.3, Graphics.Draw.draw_and_resource_release (draw committer) 3.1, Resources.Prepare (draw committer) 0.4, Recorder.Submit (draw committer) 0.1
  • batch 10219: 10.9 ms at 12122 ms, present 3211: GPU no ranges; recorded by Graphics.Draw (draw committer) 3.7, Graphics.Draw.draw_and_resource_release (draw committer) 3.4, Resources.Prepare (draw committer) 0.3, Recorder.Submit (draw committer) 0.2
This change 25f8843, run 2 (summary commit 25f8843)

seconds 200:15 from present 3035: 171 presents, frame p50 85.2 / p90 98.0 / p99 116.4 / max 116.6 ms, GPU busy 70.6 ms per present
NVIDIA GeForce RTX 2080 Ti, NVIDIA 617.14, Windows 10.0.26300, 3840x2160, commit 25f8843, dropped: yes

{"commit":"25f8843b15fe","dirty":false,"env":{"APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"200:15"},"gpu":"NVIDIA GeForce RTX 2080 Ti","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","cpu":"Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz","cpu_threads":16,"memory_mib":32684,"title_id":"PPSA05324","title":"Sonic Origins","content_version":"02.002.000","resolution":"3840x2160","window":{"spec":"seconds 200:15","first_present":3035,"ms":15056.684},"presents":171,"frame_ms":{"p50":85.159,"p90":98.001,"p99":116.412,"max":116.584},"gpu_busy_ms_per_present":70.598,"worker_busy_pct":{"queue worker 0x0":96.969},"top_phases_ms_per_frame":{"Driver.Packet":85.357,"Driver.Packet.draw":62.166,"Driver.Draw":60.792,"Graphics.Draw":57.97,"Graphics.Draw.draw_and_resource_release":48.128,"Driver.Draw.shader_compile_and_link":39.635,"Shader.DrawStage":30.398,"Driver.Present":26.857},"trace_dropped":true,"trace_dropped_threads":{"queue worker 0x0":{"events_full_after_s":6.419,"events_lost":354558,"totals_full":false},"draw committer":{"events_full_after_s":14.387,"events_lost":11435,"totals_full":false}},"trace":"aps5-trace-25f8843b15fe-45124.json.gz"}

Slowest frames (largest slices inside each, inclusive)

  • present 3199: 116.6 ms at 14403 ms: batch (gpu) 71.9, VideoOut.Flip (presenter) 28.7, VideoOut.Flip.present (presenter) 28.6, Driver.Present (presenter) 28.6
  • present 3197: 116.4 ms at 14200 ms: batch (gpu) 74.2, Graphics.Draw (draw committer) 62.3, Graphics.Draw.draw_and_resource_release (draw committer) 57.8, VideoOut.Flip (presenter) 29.1
  • present 3200: 115.3 ms at 14520 ms: batch (gpu) 72.9, VideoOut.Flip (presenter) 32.8, VideoOut.Flip.present (presenter) 32.6, Driver.Present (presenter) 32.6
  • present 3124: 114.1 ms at 7855 ms: batch (gpu) 70.5, Graphics.Draw (draw committer) 45.5, Graphics.Draw.draw_and_resource_release (draw committer) 36.6, VideoOut.Flip (presenter) 19.1
  • present 3058: 113.0 ms at 1980 ms: batch (gpu) 72.1, Driver.Packet (queue worker 0x0) 71.3, Graphics.Draw (draw committer) 60.3, Driver.Packet.draw (queue worker 0x0) 56.0

Threads (ms per frame)

thread busy wait untraced in slices < 20 us largest
title 1.0 (1 %) 0.0 (0 %) 87.0 0.7 Shader.ResolveGraphicsStagesAbi 0.7, Shader.ResolveAbi 0.3
queue worker 0x0 20.2 (23 %) 0.0 (0 %) 67.9 86.5 Driver.Packet 20.2, Driver.EndSubmission 0.0
draw committer 34.5 (39 %) 0.5 (1 %) 53.1 49.2 Graphics.Draw 32.7, Recorder.Submit 1.1
title 0.3 (0 %) 0.0 (0 %) 87.8 0.1 Shader.ResolveGraphicsStagesAbi 0.2, Shader.ResolveAbi 0.1
title 0.3 (0 %) 0.0 (0 %) 87.8 0.1 Shader.ResolveGraphicsStagesAbi 0.2, Shader.ResolveAbi 0.1
title 0.3 (0 %) 0.0 (0 %) 87.7 0.1 Shader.ResolveGraphicsStagesAbi 0.2, Shader.ResolveAbi 0.1
presenter 0.8 (1 %) 26.2 (30 %) 61.0 0.0 VideoOut.Flip 26.9, Driver.Present 0.2
title 0.2 (0 %) 0.0 (0 %) 87.8 0.1 Shader.ResolveGraphicsStagesAbi 0.1, Shader.ResolveAbi 0.1
title 0.3 (0 %) 0.0 (0 %) 87.8 0.1 Shader.ResolveGraphicsStagesAbi 0.2, Shader.ResolveAbi 0.1
title 0.2 (0 %) 0.0 (0 %) 87.8 0.1 Shader.ResolveGraphicsStagesAbi 0.1, Shader.ResolveAbi 0.1
title 0.3 (0 %) 0.0 (0 %) 87.7 0.1 Shader.ResolveGraphicsStagesAbi 0.2, Shader.ResolveAbi 0.1
title 0.3 (0 %) 0.0 (0 %) 87.7 0.1 Shader.ResolveGraphicsStagesAbi 0.2, Shader.ResolveAbi 0.1
title 0.3 (0 %) 0.0 (0 %) 87.7 0.1 Shader.ResolveGraphicsStagesAbi 0.2, Shader.ResolveAbi 0.1
title 0.3 (0 %) 0.0 (0 %) 87.7 0.1 Shader.ResolveGraphicsStagesAbi 0.2, Shader.ResolveAbi 0.1
title 0.4 (0 %) 0.0 (0 %) 87.7 0.1 Shader.ResolveGraphicsStagesAbi 0.2, Shader.ResolveAbi 0.1
title 0.4 (0 %) 0.0 (0 %) 87.7 0.1 Shader.ResolveGraphicsStagesAbi 0.2, Shader.ResolveAbi 0.2
gpu 70.5 (80 %) 0.0 (0 %) 17.5 0.0 batch 70.5

Largest slices (ms per frame, inclusive, all threads): batch 70.5, Graphics.Draw 32.7, Graphics.Draw.draw_and_resource_release 28.2, Driver.Present 26.9, VideoOut.Flip 26.9, VideoOut.Flip.present 26.7, Driver.Present.render_fence_wait 26.1, Vulkan.Retire 26.1, Vulkan.Retire.wait 26.1, Driver.Packet 20.2

Longest waits

  • Driver.Present.render_fence_wait (presenter) 32.1 ms at 12300 ms, present 3175
  • Driver.Present.render_fence_wait (presenter) 32.0 ms at 14521 ms, present 3200
  • Driver.Present.render_fence_wait (presenter) 31.5 ms at 9105 ms, present 3138
  • Driver.Present.render_fence_wait (presenter) 31.2 ms at 12737 ms, present 3180
  • Driver.Present.render_fence_wait (presenter) 31.1 ms at 3706 ms, present 3077
  • Driver.Present.render_fence_wait (presenter) 31.0 ms at 6428 ms, present 3108
  • Driver.Present.render_fence_wait (presenter) 30.7 ms at 13515 ms, present 3189
  • Driver.Present.render_fence_wait (presenter) 30.3 ms at 13005 ms, present 3183
  • Driver.Present.render_fence_wait (presenter) 30.0 ms at 13431 ms, present 3188
  • Driver.Present.render_fence_wait (presenter) 29.7 ms at 9371 ms, present 3141

Largest GPU batches (GPU ranges inside, and the CPU slices that recorded each, inclusive)

  • batch 10373: 12.9 ms at 12193 ms, present 3173: GPU no ranges; recorded by Graphics.Draw (draw committer) 1.4, Graphics.Draw.draw_and_resource_release (draw committer) 1.3, Recorder.Submit (draw committer) 0.0, Vulkan.DrawFromRecipe (draw committer) 0.0
  • batch 8658: 12.4 ms at 10190 ms, present 3150: GPU no ranges; recorded by Graphics.Draw (draw committer) 1.3, Graphics.Draw.draw_and_resource_release (draw committer) 1.2, Recorder.Submit (draw committer) 0.1
  • batch 10448: 12.0 ms at 12284 ms, present 3174: GPU no ranges; recorded by Graphics.Draw (draw committer) 4.4, Graphics.Draw.draw_and_resource_release (draw committer) 4.0, Resources.Prepare (draw committer) 0.5, Recorder.Submit (draw committer) 0.2
  • batch 6188: 11.9 ms at 7311 ms, present 3117: GPU no ranges; recorded by Graphics.Draw (draw committer) 3.9, Graphics.Draw.draw_and_resource_release (draw committer) 3.6, Resources.Prepare (draw committer) 0.5, Recorder.Submit (draw committer) 0.2
  • batch 3724: 11.6 ms at 4410 ms, present 3084: GPU no ranges; recorded by Graphics.Draw (draw committer) 3.4, Graphics.Draw.draw_and_resource_release (draw committer) 3.2, Resources.Prepare (draw committer) 0.4, Recorder.Submit (draw committer) 0.2

@github-actions

github-actions Bot commented Oct 16, 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 862 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 1368 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 1395 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 4040 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 5021 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 5315 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
PR 5609 core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 5925 core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 6146 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6185 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6186 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6187 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6188 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/shader/recompiler/Recompiler.hpp
PR 6192 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6194 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6209 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6223 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6235 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
PR 6280 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 6340 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6412 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 6481 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6488 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 6548 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6804 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6808 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6858 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 6905 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6924 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 6973 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6987 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6989 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6995 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7002 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7085 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 7223 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 7256 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 7275 core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
PR 7395 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 7410 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/shader/recompiler/Recompiler.hpp
PR 7457 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7604 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7622 core/shader/recompiler/ShaderDiskCache.cpp
PR 7642 core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 7668 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 7684 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 7689 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 8004 core/shader/recompiler/Recompiler.hpp
PR 8212 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 8246 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 8484 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 8707 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 8939 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 8963 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 9012 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 9020 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/shader/recompiler/Recompiler.hpp
PR 9183 core/shader/recompiler/ShaderDiskCache.cpp
PR 9289 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 9318 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 9335 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/shader/recompiler/Recompiler.hpp
PR 9356 core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 9387 core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 9457 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 9489 core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9508 core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 9592 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 9604 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9633 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 9674 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 9675 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9700 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9712 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 9748 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/shader/recompiler/Recompiler.hpp
PR 9749 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 9790 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 9852 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 9875 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 9884 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 9889 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 9895 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9897 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 9898 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 9915 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9969 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 9999 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 10000 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 10049 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 10064 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 10141 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 10159 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 10193 core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 10256 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 10351 core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 10359 core/shader/recompiler/Recompiler.hpp
PR 10442 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 10443 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 10472 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 10489 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 10492 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 10497 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 10556 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 10652 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
PR 10743 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 10779 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 10894 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 10920 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 11351 core/shader/recompiler/Recompiler.hpp
PR 11444 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 11483 core/shader/recompiler/Recompiler.hpp
PR 11485 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 11551 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 11557 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 11566 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 11825 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 11847 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 11901 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 11914 core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
PR 11998 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 12066 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 12158 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 12575 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 12619 core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
PR 12662 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/shader/recompiler/Recompiler.hpp
PR 12745 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 12764 core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 12828 core/shader/recompiler/Recompiler.hpp
PR 12840 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 12855 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 12921 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 12944 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 12980 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/shader/recompiler/Recompiler.hpp
PR 13044 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 13248 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 13251 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 13257 core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
PR 13263 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 13517 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 13793 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 13796 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 13809 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 13858 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 13863 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 13920 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 13928 core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 13929 core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 13942 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 13963 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 13991 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 14032 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 14076 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 14217 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
PR 14218 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
PR 14219 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 14220 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 14243 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/shader/recompiler/Recompiler.hpp
PR 14261 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 14262 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 14266 core/shader/recompiler/Recompiler.hpp
PR 14302 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 14330 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 14367 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 14473 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 14561 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/shader/recompiler/Recompiler.hpp
PR 14621 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 14838 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 14853 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 14868 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 14871 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 14880 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 14891 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 14904 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
PR 14914 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 14944 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 15059 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp

@github-actions github-actions Bot added shader core/shader agc libSceAgc* labels Oct 16, 2026
@teepean

teepean commented Oct 17, 2026

Copy link
Copy Markdown
Contributor

On Linux (GCC 16.2.1, Release) the head doesn't compile. Merged onto main 6a32550, ShaderDiskCache.cpp stops at:

core/shader/recompiler/ShaderDiskCache.cpp:90:41: error: static assertion failed: DescriptorBinding changed: update the binding encoder
   90 | static_assert(sizeof(DescriptorBinding) == 592, "DescriptorBinding changed: update the binding encoder");
  • the comparison reduces to '(784 == 592)'

ElementFlags holds a std::uint64_t, a std::size_t and a std::vector<bool>: 56 bytes against the 40 of the std::vector<bool> it replaces. Twelve lists in DescriptorBinding make that 12 × 16 = 192 bytes more, 784 in all. The PR's Linux job was skipped, so CI didn't catch it. The encoder writes the lists element by element, as the description says, so only the size in the assertion needs updating. With it set to 784 locally, the build runs Stray (PPSA02100), in a batch together with five other open perf PRs, without visible problems.

AI-assisted: yes (analysis and text written with Claude Code; the build is from my machine).

@meh7an
meh7an force-pushed the perf/shader-binding-element-flags branch from a2a74aa to 15bc218 Compare October 17, 2026 09:02
@meh7an

meh7an commented Oct 17, 2026

Copy link
Copy Markdown
Contributor Author

Thanks for catching it. Fixed in 15bc218: the assert now says 784 (12 lists x 16 bytes more, as you worked out). I also compiled that Linux-only block under MinGW's libstdc++, whose layouts match: all 31 asserts hold with the change, and the old 592 fails exactly as you reported.

@keravyn-ops

Copy link
Copy Markdown
Contributor

AMD / Windows run of this PR at 15bc218: Radeon 780M (RDNA 3, 0x15bf), AMD driver 25.10.20.01 (32.0.21020.1007), Windows 11 Home 10.0.26100, WinLibs GCC 15.2.0 r7, Release.

Every ctest entry built from the test targets this PR changes passes (57):

agc_pipeline_cache, agc_pipeline_cache_file, agc_pipeline_library, agc_pipeline_library_off, agc_pipeline_library_fast_only, agc_import_watch, agc_import_watch_other_family, agc_unchanged_cpu_stamps, agc_storage_kept_unit_settle, agc_storage_baseline_settled, agc_storage_integer_clear, agc_storage_upload_lifetime, agc_storage_upload_failure, agc_storage_written_buffer_order, agc_storage_split_writeback, agc_copied_direct_ordering, agc_recorder_read_list, agc_space_pending_writes, agc_host_import_unmap, agc_parked_import_unmap, agc_host_import_retirement, agc_sparse_run_import, agc_sparse_run_import_copied, agc_unit_shadow, agc_storage_cpu_snapshot, agc_descriptor_pool_recycling, agc_draw_snapshot_cap, agc_draw_snapshot_epoch, agc_multisample_guest_access, agc_draw_inputs_in_place, agc_pending_write_snapshot, agc_resident_present, agc_queued_write_groups, agc_tiled_resolve, agc_slice_dirty, agc_metadata_pass, agc_host_import_second_mapping, agc_pending_key_stores, agc_shadowed_key_stores, agc_sample_dumps, agc_driver_vertex_target_range_copied, agc_driver_vertex_target_range_imported, agc_driver_undithered_alpha_to_coverage_state, agc_driver_alpha_to_coverage_state, agc_driver_prepared_graphics_prebuild_unset, agc_driver_prepared_graphics_prebuild_0, agc_driver_prepared_graphics_prebuild_1, agc_shader_disk_cache, agc_driver_graphics, agc_driver_prepared_graphics, agc_driver_prepared_unregistered_graphics, agc_sparse_buffer_holes, agc_pipeline_journal, agc_descriptor_pool_reset_failure, agc_driver_address_space_teardown, agc_compute_descriptor_layout_flags, agc_driver_covered_centroid_state

AI-assisted: yes (runs made on the device above).

@github-actions github-actions Bot added needs rebase Conflicts with main, rebase needed perf Performance change perf numbers missing perf pull request without a before and after summary line labels Oct 18, 2026
@adriadam10 adriadam10 self-assigned this Oct 19, 2026

@adriadam10 adriadam10 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Thanks, the implementation reads correctly (the 64/65 boundary in push_back/set/operator[], resize shrinking back to inline, and the disk cache format are all consistent, and verifyElementFlags covers the spilled case). Two things before this can go in:

  • The numbers don't show a gain. The frame table moves the wrong way (frame_ms.p50 +0.4%, mean_frame_ms +0.8%, Driver.Draw +1.1%, FPS 10.81 → 10.56), and the profile gain (Populate 1.28 → 0.91, worker 32.80 → 31.04 samples) comes from one sampled pair. The cost is DescriptorBinding growing 592 → 784 bytes (+32%) for every binding held in results and caches. Please post repeated paired runs (several captures per side, with the spread) where the worker or frame time improves outside the noise, or drop this change.
  • It conflicts with main: DescriptorBinding gained samplerCoordinatesIgnored and bufferExtent, and the sizeof asserts in ShaderDiskCache.cpp changed (DescriptorBinding is 656 there now). After rebasing, the new samplerCoordinatesIgnored list should be an ElementFlags too (and its users checked), and the asserts recomputed.

@meh7an
meh7an force-pushed the perf/shader-binding-element-flags branch from 15bc218 to 25f8843 Compare October 20, 2026 13:11
@github-actions

Copy link
Copy Markdown

This pull request is labeled perf, so it needs the summary line of a capture on main and one with the change, from the same title, scene and machine, as the Performance report form asks. Please paste both aps5-summary.jsonl lines, attach the two traces and add the output of tools/trace_digest.py.

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

meh7an commented Oct 20, 2026

Copy link
Copy Markdown
Contributor Author

Thanks. Rebased onto main 1d41645 and re-measured.

  • samplerCoordinatesIgnored is an ElementFlags too. Its users compile and pass unchanged:
    • the builder's push_back;
    • the resource key's packBits and its flag list;
    • the element reads in ShaderResources.cpp;
    • the disk cache's Flags;
    • the tests that assign it a braced list or compare it with a std::vector<bool>.
  • DescriptorBinding now holds 13 flag lists and grows from 656 to 864 bytes (+32%). The assert says 864.
    • Under MinGW's libstdc++, where main reads 656 as its assert says, the size is 864 with this change.
  • The full suite passes 1739 of 1741; the two that don't also fail on plain main.
  • Sonic Origins Plus, S2 page, on main 1d41645: three interleaved runs per side, each a 200:15 trace with warm caches, plus the title FPS (median of six readings).
Run Main frame p50 (ms) This PR frame p50 (ms) Main Driver.Draw This PR Driver.Draw Main FPS This PR FPS
1 91.13 84.66 71.05 59.15 12.41 12.40
2 86.83 85.16 61.84 60.79 11.91 12.05
3 86.25 85.88 62.63 61.03 12.22 12.22
  • Every run with the change has a lower frame p50 than every main run.
    • Medians: 86.83 to 85.16 ms (-1.9%), and Driver.Draw 62.63 to 60.79 ms (-2.9%).
    • The title FPS medians are equal (12.22), so the gain is small.
  • The description now carries the table and the digests of the median pair.

@github-actions github-actions Bot removed the perf numbers missing perf pull request without a before and after summary line label Oct 20, 2026
@teepean

teepean commented Oct 20, 2026

Copy link
Copy Markdown
Contributor

@meh7an a Linux follow-up on the rebased head 25f8843. Merged with main 5f7e302, it compiles with GCC 16.2.1 (Release). agc_shader_disk_cache_tests and agc_driver_graphics_tests pass with the validation layer, with no VUIDs.

I also tried the commit on Stray (PPSA02100), on my local stack (showcase/stray-stack, main 64e2a81 plus 84 commits). There every stage-instance hit copies a whole RecompileResult with its bindings. The setup: the start of the Dead City chapter, stock engine.ini, Linux, Ryzen 9 9950X, RTX 3090, tcmalloc preloaded. Four rounds in alternating order, FPS from the title bar (48 readings per run):

round stack stack + this PR
1 16.7 16.9
2 16.5 16.9
3 16.2 16.6
4 16.4 16.5
mean 16.45 16.73 (+1.7 %)

The PR's run was faster in every round. I didn't measure main in the PR's form: one pair of runs there spreads more than the ~2 % you saw on Sonic.

AI-assisted: yes (text with Claude Code; the runs are from my machine).

@mrfelek

mrfelek commented Oct 21, 2026

Copy link
Copy Markdown
Contributor

@adriadam10 you asked for repeated paired runs where the worker or frame time improves outside the noise. Here are two titles, three alternating pairs each.

Repeated paired runs on two titles: this change is faster outside the noise on both. Linux (Ubuntu 26.10, kernel 7.3), Ryzen 9 5950X, RTX 3080 Ti (NVIDIA 615.71.09), Release. Base main 7e95bde; candidate = that main with this head 25f8843 merged (5df59fe43, one conflict: the three sizeof asserts, main's values kept and DescriptorBinding set to 864, which compiles). Each build relinked with its own relinker into a fresh runtime (shader cache empty for pair 1, warm after, the same on both sides), runs alternating main, PR, main, PR, …, presents per 10 s from APS5_PROFILE_DRAW.

Sonic Origins Plus (PPSA05325, 02.002.000), main menu, Sonic 2 page. Scripted: X on the autosave notice, X on the title, Right twice, 30 s to settle, then 60 s measured with no input. Every run's last screenshot is on the Sonic 2 page.

Pair main this PR [draw] driver phases recompile
1 131–139 (avg 135.3) 145–147 (145.7) 5.8 → 3.9 µs
2 132–139 (135.3) 142–147 (143.9) 6.2 → 4.2 µs
3 130–137 (133.3) 144–149 (147.3) 5.8 → 4.1 µs

About +8%, and no PR window is as low as any main window.

Castlevania: Belmont's Curse (PPSA35399, 01.000.000), the boat scene, rendered by the engine and waiting on a dialogue line, no input (about 2,800 draws per frame, CPU-bound). Last 4 windows of 70 s, APS5_HOST_IMPORT_MIB=16384 on both sides:

Pair main this PR recompile
1 61–68 (avg 65.0) 73–80 (77.3) 21.7 → 11.6 µs
2 63–68 (65.8) 73–81 (77.5) 21.5 → 12.3 µs
3 62–66 (63.5) 76–81 (78.5) 22.7 → 11.8 µs

About +20%. Capture and the committer stay the same (~12 µs and ~29–31 µs per draw), so the time comes out of the recompile phase, where Populate copies the bindings.

  • The gain scales with draws per frame, which may be why the Sonic menu shows 2% on your machine and 8% here.
  • With a local variant of the same idea (128 flags inline, not this head), two GPU-bound scenes didn't move either way (one run each): Diablo II: Resurrected in town and ASTRO BOT's Crash Site.
One aps5-summary.jsonl row (10 s) per side, pair 2 of each title

Sonic Origins Plus, main then this PR:

{"commit":"7e95bde794ae","dirty":false,"env":{"APS5_PAD_INPUT_FILE":"<path>","APS5_PROFILE_DRAW":"1","APS5_PROFILE_GPU":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 3080 Ti","driver":"NVIDIA 615.71.09","os":"Linux 7.3.0-9-generic","cpu":"AMD Ryzen 9 5950X 16-Core Processor","cpu_threads":32,"memory_mib":32003,"title_id":"PPSA05325","title":"Sonic Origins","content_version":"02.002.000","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":4019,"ms":10060.191},"interval_start_s":140.358,"interval_end_s":150.418,"presents":135,"frame_ms":{"p50":72.726,"p90":84.376,"p99":93.785,"max":97.149},"gpu_busy_ms_per_present":45.323,"worker_busy_pct":{"queue worker 0x0":97.460},"top_phases_ms_per_frame":{"Driver.Packet":72.603,"Driver.Packet.draw":59.211,"Driver.Draw":58.275,"Graphics.Draw":47.942,"Graphics.Draw.draw_and_resource_release":39.474,"Driver.Draw.shader_compile_and_link":36.951,"Shader.DrawStage":29.256,"VideoOut.Flip":20.841},"trace_dropped":false,"trace":""}
{"commit":"5df59fe43bac","dirty":false,"env":{"APS5_PAD_INPUT_FILE":"<path>","APS5_PROFILE_DRAW":"1","APS5_PROFILE_GPU":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 3080 Ti","driver":"NVIDIA 615.71.09","os":"Linux 7.3.0-9-generic","cpu":"AMD Ryzen 9 5950X 16-Core Processor","cpu_threads":32,"memory_mib":32003,"title_id":"PPSA05325","title":"Sonic Origins","content_version":"02.002.000","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":4077,"ms":10031.033},"interval_start_s":140.273,"interval_end_s":150.304,"presents":142,"frame_ms":{"p50":67.036,"p90":87.445,"p99":95.318,"max":97.451},"gpu_busy_ms_per_present":45.373,"worker_busy_pct":{"queue worker 0x0":96.976},"top_phases_ms_per_frame":{"Driver.Packet":68.479,"Driver.Packet.draw":55.188,"Driver.Draw":54.217,"Graphics.Draw":45.574,"Graphics.Draw.draw_and_resource_release":37.521,"Driver.Draw.shader_compile_and_link":32.619,"Shader.DrawStage":25.305,"VideoOut.Flip":21.288},"trace_dropped":false,"trace":""}

Castlevania, main then this PR:

{"commit":"7e95bde794ae","dirty":false,"env":{"APS5_HOST_IMPORT_MIB":"16384","APS5_PAD_INPUT_FILE":"<path>","APS5_PROFILE_DRAW":"1","APS5_PROFILE_GPU":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 3080 Ti","driver":"NVIDIA 615.71.09","os":"Linux 7.3.0-9-generic","cpu":"AMD Ryzen 9 5950X 16-Core Processor","cpu_threads":32,"memory_mib":32003,"title_id":"PPSA35399","title":"Castlevania: Belmont's Curse","content_version":"01.000.000","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":8239,"ms":10112.341},"interval_start_s":210.626,"interval_end_s":220.738,"presents":68,"frame_ms":{"p50":148.162,"p90":154.131,"p99":158.655,"max":158.655},"gpu_busy_ms_per_present":48.046,"worker_busy_pct":{"queue worker 0x0":90.510},"top_phases_ms_per_frame":{"Driver.Packet":134.147,"Driver.Packet.draw":125.540,"Driver.Draw":124.340,"Driver.Draw.shader_compile_and_link":105.502,"Shader.DrawStage":93.293,"Graphics.Draw":87.506,"Graphics.Draw.draw_and_resource_release":74.461,"Shader.DrawStage.materialize":58.900},"trace_dropped":false,"trace":""}
{"commit":"5df59fe43bac","dirty":false,"env":{"APS5_HOST_IMPORT_MIB":"16384","APS5_PAD_INPUT_FILE":"<path>","APS5_PROFILE_DRAW":"1","APS5_PROFILE_GPU":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 3080 Ti","driver":"NVIDIA 615.71.09","os":"Linux 7.3.0-9-generic","cpu":"AMD Ryzen 9 5950X 16-Core Processor","cpu_threads":32,"memory_mib":32003,"title_id":"PPSA35399","title":"Castlevania: Belmont's Curse","content_version":"01.000.000","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":8375,"ms":10044.415},"interval_start_s":210.816,"interval_end_s":220.861,"presents":81,"frame_ms":{"p50":123.522,"p90":128.179,"p99":133.216,"max":133.216},"gpu_busy_ms_per_present":40.417,"worker_busy_pct":{"queue worker 0x0":90.611},"top_phases_ms_per_frame":{"Driver.Packet":111.658,"Driver.Packet.draw":102.731,"Driver.Draw":101.658,"Graphics.Draw":83.382,"Driver.Draw.shader_compile_and_link":80.116,"Graphics.Draw.draw_and_resource_release":70.212,"Shader.DrawStage":67.897,"Shader.ResolveAbi":43.610},"trace_dropped":false,"trace":""}

AI-assisted; the runs are from my machine(s).

@meh7an
meh7an force-pushed the perf/shader-binding-element-flags branch from 25f8843 to a9a338c Compare October 21, 2026 08:01
@meh7an

meh7an commented Oct 21, 2026

Copy link
Copy Markdown
Contributor Author

@adriadam10 Rebased onto main 53a0a27 (a9a338c). The only conflict was the size asserts: main's ShaderInvocation 216 and RecompileResult 528 stay, and DescriptorBinding is 864, checked under MinGW's libstdc++.

Since your review, two independent sets of runs came in:

  • @teepean: builds on Linux (GCC 16.2.1) with no VUIDs under the validation layer, and +1.7% on Stray over four rounds.
  • @mrfelek: three alternating pairs per title. About +8% on Sonic Origins' Sonic 2 page and about +20% on Castlevania's boat scene. Every PR window was above every main window, and the time comes out of the recompile phase, where Populate copies the bindings.

Thanks @teepean and @mrfelek for the runs. Could you take another look?

@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Oct 23, 2026
@meh7an
meh7an force-pushed the perf/shader-binding-element-flags branch from a9a338c to 438978e Compare October 23, 2026 21:25
@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 23, 2026
TheBlenDed pushed a commit to TheBlenDed/AnyPS5 that referenced this pull request Oct 25, 2026
boykopovar#6970 turns the binding flag lists into ElementFlags; ResultHeapBytes
(our memo cap, 6700440) still called the std::vector overload on them
and no longer compiled. A flag list's heap is its spill past the inline
word, (capacity + 7) / 8 bytes as for vector<bool> before.
@thuanquang

Copy link
Copy Markdown
Contributor

A memory data point from Persona 5 Royal (PPSA05110, own dump): Windows 11 26200, RX 6700 XT, WinLibs GCC 15.2.0 r7, Release. The base is main 61fc572cee plus #7844, #10614 and a local equivalent of #10887 (the title needs those to load and run). This PR's 438978e2a4 merges onto it cleanly. Both runs follow the same scripted route (boot, title, New Game, opening) for 330 s.

To attribute heap memory, both builds carried a local diagnostic that is not part of any PR: a HeapWalk over the process heaps every 60 s, plus a census of the driver's live operator new blocks of 1 KiB and up by call site.

heap blocks (60 / 120 / 180 s) committed heap (MiB) live DescriptorBindingBuilder::Populate arrays
base 6.27 M / 9.96 M / 10.08 M 905 / 1707 / 1745 36,634, 302 MiB (~8.4 KiB each)
base + this PR 5.97 M / 7.46 M / 7.57 M 836 / 1722 / 1754 36,665, 399 MiB (~11.1 KiB each)

So in this title the change does what it says for allocations: about 2.5 million fewer heap blocks at 120 and 180 s. Memory stays about the same, though. The larger DescriptorBinding grows the bindings arrays that the cached results keep alive by about 97 MiB, which offsets the freed flag blocks. Peak private bytes were 17.92 GiB with this PR against 18.04 GiB on the base. The GPU was shared, so these runs make no speed claim.

@fogydes

fogydes commented Nov 1, 2026

Copy link
Copy Markdown
Contributor

Review of PR #6970: perf(shader): keep a binding's element flags inline

Verdict: stale+rebase

Findings

  1. [verified] Freshness & merge conflicts: Branch head #8978e2a4dcfffbbfdd2a26023f1969520f13a6\ is 9,736 commits behind \origin/main\ (\�a627802e2210187d417deb64c8f2fed8e33011f). \git merge-tree --write-tree origin/main refs/heads/pull/6970\ fails with exit code 1 due to 2 content conflicts:
    • \core/shader/recompiler/Recompiler.hpp - \core/shader/recompiler/ShaderDiskCache.cpp2. [verified] Conventions: \python tools/check_conventions.py --base 11e8ad2\ passes cleanly with 0 errors and 0 warnings against its merge base.
  2. [read-only] Commit history: Single linear conventional commit matching PR title.
  3. [read-only] PR template checklist: The checklist is missing the required - [ ] Fixes: none\ (or #N) line.
  4. [author-reported] Perf & trace evidence: Exemplary performance verification adhering strictly to AGENTS.md, including paired Sonic Origins Plus trace captures, json summary lines, full \ ools/trace_digest.py\ digests, and memory allocation profiling for \DescriptorBindingBuilder::Populate.

Freshness Envelope

  • Head SHA: #8978e2a4dcfffbbfdd2a26023f1969520f13a6- Merge base: e8ad293422aad5e30e6c8f5c85048d4dc56649- Commits behind main: 9,736
  • Merge-tree exit code: 1 (conflicts in \Recompiler.hpp, \ShaderDiskCache.cpp)

Cross-PR Ledger

# Conflicts:
#	core/shader/recompiler/Recompiler.hpp
#	core/shader/recompiler/ShaderDiskCache.cpp

Also adds vectorBytes(const ElementFlags&) to Recompiler.cpp for main's memo accounting (8868e09): the PR turns the DescriptorBinding flag vectors into ElementFlags, which main's descriptorBindingBytes counted as std::vector<bool>; flags held inline cost no heap, spilled flags cost (size+7)/8 bytes.
@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Nov 3, 2026
@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head ebc082c merged onto main f6232fc · tested 2026-11-03 08:12 UTC · 30 min

GPU NVIDIA RTX 2000 Ada Generation, driver 595.99.02, Vulkan 1.4.329
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-38-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ✅ 2,683 passed · 5 failed (0 new, 3 also fail on main, 2 unstable on main) · 49 skipped (ANYPS5_REQUIRE_VULKAN=1)
Test setup CPU-only tests without a GPU; GPU tests (and any CPU-only test that failed or skipped without one) once on the GPU with VK_LAYER_KHRONOS_validation and ANYPS5_NO_SHADER_CACHE=1; main ran the same way
Test selection 2,737 of 3,743 tests run: the ones this change can reach, chosen by tools/select_tests.py from main's build graph
Vulkan validation ✅ no new validation IDs vs main (935 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.1 s
Unstable on main (2, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_pipeline_journal: failed in 4 of the last 10 main runs
agc_submit_progress: failed in 6 of the last 10 main runs
Failing on main too (3, not counted against this PR)
agc_driver_image_table
guest_mmap_executable
guest_socket_options_multicast
Validation IDs already present on main (4 IDs in 525 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (525 tests): agc_driver, agc_driver_address_passes, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, agc_driver_bc_block_copy, agc_driver_bda_anchor_reads, agc_driver_bda_span_reads, and 517 more
VUID-vkCmdCopyImage-srcImage-01548 (8 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth, agc_driver_stencil_null_feedback
VUID-vkCmdCopyImage-srcImage-01551 (8 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth, agc_driver_stencil_null_feedback
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (1 test): agc_driver_srgb8_color_target
Skipped (49)
agc_driver_bda_reads_shadowed_results: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_bda_reads_shadowed_results_per_build: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_sample_order_grid_reference: skipped, the device does not keep depth drawn at custom sample locations at those locations, even after a transition that names them: the composite of uniform renders holds the guest's depth in 0 of 3005 sloped samples, so no path can be compared with it bit for bit
agc_driver_scattered_runs: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_sparse_dma_buf_import: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_stencil_ref_export: skipped, the device lacks VK_EXT_shader_stencil_export
agc_driver_vertex_elected_atomic_max: skipped, the device runs vertex programs in subgroups, so they keep their cross-lane reductions
agc_host_import_sparse: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_import_settle_initial_dcc: skipped, the device has no deferred settle of host imports: imports under 1 MiB wait for one only on Windows
agc_unit_shadow_completion_store: skipped, the device reports watched host memory written when it imports or reads it
guest_http_uri_locale: 
guest_net_ctl: skipped, the host has no IPv4 address
guest_video_out_color_space: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_hdr: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_high_frame_rate: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_output_mode: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_resolution_status: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_wqhd_detection: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
video_out_flip_aftergpu: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_backtoback: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_controls: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip_in_order: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_dcc: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_deferred: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_eop: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_eop_aftergpu: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver
Reproduce
git fetch origin ebc082c6cd4c4551a6f54608b1373437ca3de35e f6232fcfda70644495273f6b8dd88cf0603463d6
git checkout f6232fcfda70644495273f6b8dd88cf0603463d6 && git merge --no-ff ebc082c6cd4c4551a6f54608b1373437ca3de35e
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.

# Conflicts:
#	core/shader/recompiler/Recompiler.hpp
@github-actions github-actions Bot added needs rebase Conflicts with main, rebase needed and removed needs rebase Conflicts with main, rebase needed labels Nov 3, 2026
@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ AMD GPU test: passed

PR head dd1c2d5 merged onto main 4f41f4c · tested 2026-11-03 11:17 UTC · 43 min

GPU AMD Radeon RX 6300 (RADV NAVI24), driver Mesa 25.2.8-0ubuntu0.24.04.4, Vulkan 1.4.318
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-42-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ✅ 2,695 passed · 8 failed (0 new, 7 also fail on main, 1 unstable on main) · 58 skipped (ANYPS5_REQUIRE_VULKAN=1)
Test setup CPU-only tests without a GPU; GPU tests (and any CPU-only test that failed or skipped without one) once on the GPU with VK_LAYER_KHRONOS_validation and ANYPS5_NO_SHADER_CACHE=1; main ran the same way
Test selection 2,761 of 3,811 tests run: the ones this change can reach, chosen by tools/select_tests.py from main's build graph
Vulkan validation ✅ no new validation IDs vs main (930 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.1 s, ⚠️ public_headers 59.3 s, ⚠️ agc_driver_image_sample_unnormalized 41.6 s, ⚠️ agc_driver_lazy_resolved_abi 31.0 s
Unstable on main (1, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_pipeline_journal: failed in 7 of the last 9 main runs
Failing on main too (7, not counted against this PR)
agc_driver_image_table
agc_driver_native_depth_bda_clear
agc_driver_native_multisample_depth
agc_driver_submit_progress
agc_submit_progress
agc_submit_progress_no_timeline
guest_socket_options_multicast
Validation IDs already present on main (4 IDs in 517 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (517 tests): agc_driver, agc_driver_address_passes, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, agc_driver_bc_block_copy, agc_driver_bda_anchor_reads, agc_driver_bda_span_reads, and 509 more
VUID-vkCmdCopyImage-srcImage-01548 (8 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth, agc_driver_stencil_null_feedback, agc_driver_stencil_plane_memory
VUID-vkCmdCopyImage-srcImage-01551 (8 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth, agc_driver_stencil_null_feedback, agc_driver_stencil_plane_memory
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (1 test): agc_driver_srgb8_color_target
Skipped (58)
agc_driver_bda_reads_shadowed_results: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_bda_reads_shadowed_results_per_build: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_copied_writer_label_order: skipped, the device reports a minStorageBufferOffsetAlignment of 4, so the dispatch binds its record at +0x1004 in place and nothing is written back; the test needs an alignment above 4
agc_driver_float16_unused_nan_payloads: skipped, the device has no native f16 conversions with RTE rounding and kept f16 denormals
agc_driver_image_table_vouched_lookups: skipped, the device reports 4 of 4 host-imported pages written after a GPU read, so a watched imported table cannot be vouched for
agc_driver_linear_target_direct_write_completion: skipped, the device does not keep host imports write-watched, so no completion stamp over the target is tracked
agc_driver_ngg_vertex_wave_reduction: skipped, s3 describes a 32-lane wave only on 32-lane subgroups, and the device has 64 lanes
agc_driver_scattered_runs: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_sparse_dma_buf_import: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_unit_shadow: skipped, the device does not import watched host memory for unit shadows
agc_driver_unit_shadow_budget: skipped, the device does not import watched host memory for unit shadows
agc_host_import_sparse: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_idle_publish_wait: skipped, the device reports 4 of 4 host-imported pages written after a GPU read, so a forced watch of the import reads its submissions as CPU stores
agc_import_settle_initial_dcc: skipped, the device has no deferred settle of host imports: imports under 1 MiB wait for one only on Windows
agc_shadowed_key_stores: skipped, the device imports no watched host memory under a unit shadow
agc_small_tiled_shadow_label: skipped, host imports are unavailable: the test block is not imported and watched
agc_storage_clear_hand_over: skipped, the device imports no watched host memory for the clear-key hand-over
agc_unit_shadow: skipped, the device does not import watched host memory for unit shadows
agc_unit_shadow_completion_store: skipped, the device reports watched host memory written when it imports or reads it
guest_http_uri_locale: 
guest_net_ctl: skipped, the host has no IPv4 address
guest_video_out_color_space: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_hdr: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_high_frame_rate: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_output_mode: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_resolution_status: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_wqhd_detection: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
video_out_flip_aftergpu: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_backtoback: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_controls: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip: skipped, no display or Vulkan device: DisplayW
Reproduce
git fetch origin dd1c2d58d4c5cb3a6375346817a98257a35641a3 4f41f4c375f5abb487dbd184fbc150f31994d762
git checkout 4f41f4c375f5abb487dbd184fbc150f31994d762 && git merge --no-ff dd1c2d58d4c5cb3a6375346817a98257a35641a3
git submodule update --init --recursive
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON -DANYPS5_ENABLE_SPIRV_TOOLS=ON
cmake --build build && cmake --build build --target libs
VK_DRIVER_FILES=/nonexistent/icd.json ctest --test-dir build -E '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 12 --output-on-failure
ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation \
  ctest --test-dir build -R '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 16 --output-on-failure
# failures are then re-run alone: --timeout 360 --parallel 2; new validation IDs: the test alone, twice, --parallel 1

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

@JJenkx

JJenkx commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

Independent repeated paired runs on AMD, for the review's request for "several captures per side, with the spread".

Setup: Windows 11 22621, Ryzen 9 5950X, Radeon RX 6700 XT, AMD driver 26.10.1, MinGW GCC 15.2 UCRT, Release.

  • Main arm: main 086c0686c8.
  • PR arm: a local merge of this PR's head dd1c2d58d4 onto that commit (24f462ce48). Its library set differs from main's only in libSceAgcDriver.prx.
  • Scene: Darkest Dungeon II (PPSA19591) 01.015.000 at 3840x2160, scripted to the party screen.
  • Capture: APS5_TRACE_SECONDS=100:15 only; the summaries' env shows nothing else besides the pad file and trace directory.
  • Each arm had its own warm shader cache (0 misses in every traced run except the first PR run, 4).
  • Five interleaved pairs, main run first in each pair. All summaries report dirty: false.
Pair Driver.Packet ms/frame, main → PR worker busy %, main → PR frame p50 ms, main → PR
1 9.261 → 9.088 (−1.9%) 38.96 → 38.26 (−1.8%) 24.872 → 24.823
2 9.928 → 9.501 (−4.3%) 41.50 → 39.72 (−4.3%) 25.026 → 25.016
3 10.350 → 9.567 (−7.6%) 43.16 → 40.13 (−7.0%) 25.009 → 24.970
4 9.670 → 9.310 (−3.7%) 40.46 → 38.86 (−4.0%) 25.005 → 25.068
5 9.271 → 8.969 (−3.3%) 38.68 → 37.38 (−3.4%) 25.058 → 25.185
  • CPU side: the PR is lower in 5/5 pairs on both Driver.Packet (median −3.7%, range −1.9% to −7.6%) and queue-worker busy time (median −4.0%). A one-sided sign test gives p = 1/32.
  • Frame time: unchanged. This scene is GPU-bound (gpu_busy_ms_per_present about 23.4 against a 25.0 ms frame), so the CPU saving does not reach FPS here. Same ~39.9–40.2 FPS in both arms.
  • Caveats: run-to-run spread within an arm is about as large as the effect (main Driver.Packet 9.27–10.35). The traces report trace_dropped: true, so phase totals may undercount, though equally in both arms as far as I can tell. I did not measure the larger DescriptorBinding size's effect on memory.

Evidence (summaries, traces, stderr, run records, the pair script and its output): release pr6970-dd2-20261103, SHA-256 d683587a6102aa21aa844c0e6fd5435286101022e4b67d0e1b7853b1255b7fc4.

AI-assisted: yes.

@JJenkx

JJenkx commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

Addendum to my A/B above. Two controls on the same machine, scene and window, run after it, check whether the PR runs' position (always second in each pair) could explain the result.

A/A control: three pairs of main 086c0686c8 against itself, in the same order.

Pair Driver.Packet, first → second run worker busy %
1 9.441 → 9.990 (+5.8%) +5.8%
2 9.160 → 10.118 (+10.5%) +10.4%
3 9.096 → 8.976 (−1.3%) −1.1%

The second of two identical runs is not systematically lower: it was higher in 2 of 3. So the PR's 5/5 lower pairs are not an order artifact. If anything, the second slot tends to read higher.

Unrelated candidate in the second slot: a separate one-line allocator change, also always run second, came out lower in only 2 of 5 pairs (−5.0% to +4.0%).

The caveat this adds: identical builds differ by up to about 10% between back-to-back runs here. So the direction (5/5 pairs, sign-test p = 1/32) is the meaningful part of my result, not the size of each delta.

Evidence for both controls is with the earlier logs; I can add it to the release if useful.

AI-assisted: yes.

@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head dd1c2d5 merged onto main 1e65852 · tested 2026-11-03 21:25 UTC · 34 min

GPU NVIDIA RTX 2000 Ada Generation, driver 595.99.02, Vulkan 1.4.329
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-38-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ✅ 2,713 passed · 6 failed (0 new, 3 also fail on main, 3 unstable on main) · 48 skipped (ANYPS5_REQUIRE_VULKAN=1)
Test setup CPU-only tests without a GPU; GPU tests (and any CPU-only test that failed or skipped without one) once on the GPU with VK_LAYER_KHRONOS_validation and ANYPS5_NO_SHADER_CACHE=1; main ran the same way
Test selection 2,767 of 3,818 tests run: the ones this change can reach, chosen by tools/select_tests.py from main's build graph
Vulkan validation ✅ no new validation IDs vs main (936 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.1 s, ⚠️ agc_driver_interpolation_modes 30.3 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 4 of the last 10 main runs
agc_submit_progress: failed in 6 of the last 10 main runs
agc_submit_progress_no_timeline: failed in 5 of the last 10 main runs
Failing on main too (3, not counted against this PR)
agc_driver_image_table
guest_mmap_executable
guest_socket_options_multicast
Validation IDs already present on main (4 IDs in 517 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (517 tests): agc_driver, agc_driver_address_passes, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, agc_driver_bc_block_copy, agc_driver_bda_anchor_reads, agc_driver_bda_span_reads, and 509 more
VUID-vkCmdCopyImage-srcImage-01548 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-vkCmdCopyImage-srcImage-01551 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (1 test): agc_driver_srgb8_color_target
Skipped (48)
agc_driver_bda_reads_shadowed_results: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_bda_reads_shadowed_results_per_build: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_sample_order_grid_reference: skipped, the device does not keep depth drawn at custom sample locations at those locations, even after a transition that names them: the composite of uniform renders holds the guest's depth in 0 of 3005 sloped samples, so no path can be compared with it bit for bit
agc_driver_scattered_runs: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_sparse_dma_buf_import: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_stencil_ref_export: skipped, the device lacks VK_EXT_shader_stencil_export
agc_host_import_sparse: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_import_settle_initial_dcc: skipped, the device has no deferred settle of host imports: imports under 1 MiB wait for one only on Windows
agc_unit_shadow_completion_store: skipped, the device reports watched host memory written when it imports or reads it
guest_http_uri_locale: 
guest_net_ctl: skipped, the host has no IPv4 address
guest_video_out_color_space: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_hdr: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_high_frame_rate: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_output_mode: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_resolution_status: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_wqhd_detection: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
video_out_flip_aftergpu: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_backtoback: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_controls: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip_in_order: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_dcc: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_deferred: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_eop: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_eop_aftergpu: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_eop_main: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not co
Reproduce
git fetch origin dd1c2d58d4c5cb3a6375346817a98257a35641a3 1e658521a0a599872612bb91949311e2956b5283
git checkout 1e658521a0a599872612bb91949311e2956b5283 && git merge --no-ff dd1c2d58d4c5cb3a6375346817a98257a35641a3
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

agc libSceAgc* perf Performance change shader core/shader

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants