Skip to content

perf(shader): specialize direct image modes in registration modules - #11952

Merged
adriadam10 merged 2390 commits into
boykopovar:mainfrom
Filip722:perf/shader-registration-image-mode-combat
Nov 1, 2026
Merged

adriadam10 merged 2390 commits into
boykopovar:mainfrom
Filip722:perf/shader-registration-image-mode-combat

Conversation

@Filip722

@Filip722 Filip722 commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

What

Registration modules currently dispatch each direct image operation across runtime image modes even though descriptor preparation already knows the selected mode. This keeps unused sampling paths and their control flow in native shaders.

  • Supply the resolved direct mode through the existing image specialization constant and use it in the image emitter. Dynamic image-table selection remains runtime.
  • Reuse the existing cached volume-bias fixture to check volume, plane, forced-sRGB numeric mode and volume-again pixels against one registration artifact.

This deliberately trades cross-mode prepared-module reuse for smaller native code. It complements #8716’s equivalent-switch-target deduplication and does not require that PR.

Tested

Fresh matched integration on 2026-10-31: exact head 19375d89c474e5dd8df739f6a9a76fc021afc618 incorporates pinned main c21eb9a4d0748c11d3061cf402737eda2a30d00f with a history-preserving merge. No other open shader optimization is combined here. This head also removes the duplicate macOS write-watch fault-test registration loop (the same five-line CI correction verified in #12299); it changes no measured runtime behavior. Earlier standalone cohorts remain below with their original revisions and unfavorable results, and are not pooled with this comparison.

At publication, live main had advanced nine commits to f776fddcffd1cfece220ecdd894371988b164f6a. The actual pinned-main → live-main comparison changes HTTP2, WebRTC, NKWebKitRequirements, their tests/debt and job-manager reference tooling; none of this PR's shader/fixture paths changes. The live-main merge preview is clean. That does not establish whole-runtime equivalence: the measurements and hardware tests below remain pinned to the named baseline/head.

On this main and exact head, the same nine focused fixtures run with required Vulkan, disabled shader cache, VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation, verbose CTest and the physical Radeon 760M: agc_shader_memory, agc_driver_depth_plane_sampling, agc_driver_image_address_dimension, agc_driver_image_plane_bias_on_single_level_volume, agc_driver_image_sample_unnormalized, agc_driver_image_table, agc_driver_pixel_implicit_derivatives, agc_driver_prepared_graphics, agc_driver_runtime_images. 8/9 pass on each side; the same existing image-table descriptor-allocation failure (-1000069000) remains. Eight actual Radeon selections and eight Khronos instance/device insertions per side; zero VUIDs, missing-layer messages or skips. The baseline receives only the corresponding volume-fixture assertions, without production changes. Release native libraries and focused targets build; conventions and whitespace checks pass. The final hook-free build matches all 51 frozen clean candidate libraries.

Four predeclared warmed pairs: mean run frame time 45.986243 → 45.634142 ms, mean paired reduction 0.766008%, two-sided 95% Student-t interval [0.431763%, 1.100254%], df=3. Mean run FPS is separately 21.746382 → 21.914396; mean GPU work 42.619500 → 42.309000 ms/present. All four pairs improve for frame time and GPU work. This is a small observed effect for the measured title/scene/machine/session, not a universal or cold-compilation claim.

Pair Order Main mean ms PR mean ms Frame-time reduction
1 AB 45.880847328 45.399403774 1.049334%
2 BA 46.451733591 46.155084291 0.638618%
3 BA 45.815541985 45.550196970 0.579159%
4 AB 45.796847909 45.431883019 0.796921%

Main/candidate run ranges: 0.654885682/0.755680518 ms; sample standard deviations 0.312409494/0.353288536 ms. Individual frames are not independent repetitions. Fixed order: warm A, warm B, A1, B1, B2, A2, B3, A3, A4, B4. All ten attempts valid; eight timed captures; no exclusions, replacements or appended runs.

PPSA28997 v01.008.001 stationary saved camp after Continue; identical saves, 1920×1080 guest output, focused1152×648 Wayland client, mailbox. AMD Ryzen5 7640HS / Radeon760M integrated GPU with shared system memory, RADV Mesa25.0.7-2+deb13u1, Debian13.7 / Linux7.2.12-x64v3-xanmod1. Independent per-arm warmed caches cloned for each run; shader/driver manifests stay unchanged across each window. Every process verifies the actual RADV ICD, 51 unique native and nine unique guest libraries; native binary hashes differ only for AGC and VideoOut, whose build also embeds revision metadata. The implementation deliberately trades cross-mode prepared-module reuse for smaller specialized native shaders; cold compilation and the wider pipeline-variant tradeoff remain unmeasured.

Timing uses only APS5_TRACE_SECONDS=30:12 and APS5_TRACE_DIR, default buffer, no validation or diagnostic profiling, game stdout/stderr on a PTY. Camp is checked twice with all input released before28s and after timing; no screenshots/input near the timed window. The identical uncommitted readiness hook supplies only the first-present clock and pre/post-window screenshot requests. Dirty=null reflects verified dependency symlinks, with exact source/patch/library provenance retained. No game files, saves, shaders, ISA, screenshots, native libraries, hardware captures or console logs are published.

All eight original lossless traces, original summaries, complete trace digests, paired calculations, protocol, source/library hashes, dependencies and parsed validation audit are public. All31files were downloaded and byte-verified, including the SHA256 of all eight decoded original compressed traces. This report measures the two named revisions; it does not claim timing validation of later main revisions or other open-PR compositions. AI-assisted:yes(Codex).

Fresh original main/PR summary lines

A1:

{"commit":"c21eb9a4d074","dirty":null,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"30:12"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 30:12","first_present":696,"ms":12020.782},"presents":262,"frame_ms":{"p50":45.729,"p90":46.67,"p99":48.462,"max":48.883},"gpu_busy_ms_per_present":42.607,"worker_busy_pct":{"queue worker 0x0":78.378},"top_phases_ms_per_frame":{"Driver.Packet":35.816,"Driver.Packet.draw":33.208,"Driver.Draw":33.167,"Driver.Draw.draw_enqueued":29.27,"Recorder.Sync":27.986,"VideoOut.Flip":9.033,"Driver.Present":9.02,"VideoOut.Flip.present":8.994},"trace_dropped":false,"trace":"aps5-trace-c21eb9a4d074-583591.json.gz"}

B1:

{"commit":"19375d89c474","dirty":null,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"30:12"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 30:12","first_present":660,"ms":12030.842},"presents":265,"frame_ms":{"p50":45.36,"p90":45.817,"p99":46.9,"max":47.127},"gpu_busy_ms_per_present":42.193,"worker_busy_pct":{"queue worker 0x0":78.15},"top_phases_ms_per_frame":{"Driver.Packet":35.36,"Driver.Packet.draw":32.911,"Driver.Draw":32.871,"Driver.Draw.draw_enqueued":29.416,"Recorder.Sync":28.392,"VideoOut.Flip":9.019,"Driver.Present":9.004,"VideoOut.Flip.present":8.978},"trace_dropped":false,"trace":"aps5-trace-19375d89c474-584443.json.gz"}

B2:

{"commit":"19375d89c474","dirty":null,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"30:12"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 30:12","first_present":699,"ms":12046.477},"presents":261,"frame_ms":{"p50":46.049,"p90":46.781,"p99":48.119,"max":49.387},"gpu_busy_ms_per_present":42.428,"worker_busy_pct":{"queue worker 0x0":78.408},"top_phases_ms_per_frame":{"Driver.Packet":36.05,"Driver.Packet.draw":33.243,"Driver.Draw":33.198,"Driver.Draw.draw_enqueued":29.308,"Recorder.Sync":27.965,"VideoOut.Flip":8.984,"Driver.Present":8.965,"VideoOut.Flip.present":8.939},"trace_dropped":false,"trace":"aps5-trace-19375d89c474-585266.json.gz"}

A2:

{"commit":"c21eb9a4d074","dirty":null,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"30:12"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 30:12","first_present":653,"ms":12030.999},"presents":259,"frame_ms":{"p50":46.385,"p90":47.001,"p99":47.635,"max":47.755},"gpu_busy_ms_per_present":42.714,"worker_busy_pct":{"queue worker 0x0":78.496},"top_phases_ms_per_frame":{"Driver.Packet":36.316,"Driver.Packet.draw":33.441,"Driver.Draw":33.396,"Driver.Draw.draw_enqueued":29.077,"Recorder.Sync":27.624,"VideoOut.Flip":9.04,"Driver.Present":9.023,"VideoOut.Flip.present":8.996},"trace_dropped":false,"trace":"aps5-trace-c21eb9a4d074-586048.json.gz"}

B3:

{"commit":"19375d89c474","dirty":null,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"30:12"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 30:12","first_present":630,"ms":12025.252},"presents":264,"frame_ms":{"p50":45.434,"p90":46.055,"p99":48.653,"max":52.167},"gpu_busy_ms_per_present":42.286,"worker_busy_pct":{"queue worker 0x0":78.287},"top_phases_ms_per_frame":{"Driver.Packet":35.532,"Driver.Packet.draw":32.994,"Driver.Draw":32.953,"Driver.Draw.draw_enqueued":29.333,"Recorder.Sync":28.084,"VideoOut.Flip":8.983,"Driver.Present":8.968,"VideoOut.Flip.present":8.942},"trace_dropped":false,"trace":"aps5-trace-19375d89c474-586864.json.gz"}

A3:

{"commit":"c21eb9a4d074","dirty":null,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"30:12"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 30:12","first_present":685,"ms":12003.672},"presents":262,"frame_ms":{"p50":45.778,"p90":46.276,"p99":47.426,"max":48.0},"gpu_busy_ms_per_present":42.616,"worker_busy_pct":{"queue worker 0x0":78.395},"top_phases_ms_per_frame":{"Driver.Packet":35.786,"Driver.Packet.draw":33.292,"Driver.Draw":33.254,"Driver.Draw.draw_enqueued":29.419,"Recorder.Sync":27.955,"VideoOut.Flip":9.087,"Driver.Present":9.071,"VideoOut.Flip.present":9.044},"trace_dropped":false,"trace":"aps5-trace-c21eb9a4d074-587725.json.gz"}

A4:

{"commit":"c21eb9a4d074","dirty":null,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"30:12"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 30:12","first_present":616,"ms":12044.571},"presents":263,"frame_ms":{"p50":45.745,"p90":46.32,"p99":47.098,"max":48.074},"gpu_busy_ms_per_present":42.541,"worker_busy_pct":{"queue worker 0x0":78.316},"top_phases_ms_per_frame":{"Driver.Packet":35.737,"Driver.Packet.draw":33.267,"Driver.Draw":33.225,"Driver.Draw.draw_enqueued":29.34,"Recorder.Sync":28.29,"VideoOut.Flip":9.055,"Driver.Present":9.044,"VideoOut.Flip.present":9.017},"trace_dropped":false,"trace":"aps5-trace-c21eb9a4d074-588553.json.gz"}

B4:

{"commit":"19375d89c474","dirty":null,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"30:12"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 30:12","first_present":689,"ms":12039.449},"presents":265,"frame_ms":{"p50":45.349,"p90":45.935,"p99":47.294,"max":47.99},"gpu_busy_ms_per_present":42.329,"worker_busy_pct":{"queue worker 0x0":78.255},"top_phases_ms_per_frame":{"Driver.Packet":35.43,"Driver.Packet.draw":32.985,"Driver.Draw":32.945,"Driver.Draw.draw_enqueued":29.359,"Recorder.Sync":28.224,"VideoOut.Flip":9.034,"Driver.Present":9.022,"VideoOut.Flip.present":8.996},"trace_dropped":false,"trace":"aps5-trace-19375d89c474-589375.json.gz"}
Historical reports — original revisions and limitations retained

Integrated main 52f212ec053f917455f2f87674ddb708dcc545d8 into head 7e669ad577304d31e7de5659477ba5318af433b6. Main advanced from c40cef843681 during the performance batch; the traces below measure the earlier candidate ea86e2fd6cee, not the newer head. The intervening delta includes AGC test changes, a libc time-name fix, exports and tests.

On main 52f212ec053f and head 7e669ad57730, the same 15 selected tests were run on AMD Radeon 760M, RADV Mesa 25.0.7-2+deb13u1, Debian 13, with required Vulkan, shader cache disabled and Khronos validation. Thirteen passed on each. agc_driver_image_table and agc_driver_recorder both failed on each with vkAllocateDescriptorSets result -1000069000; no VUIDs, missing layers or skips. The selection covers the prior six shader checks plus upstream recorder, indirect-draw, libc time and NP tests. The baseline uses its own volume fixture version. Local conventions and diff checks passed.

Three predeclared warmed pairs compare main c40cef843681 with PR ea86e2fd6cee in the same stationary PPSA28997 camp scene, machine and session. Mean FPS 19.92263 → 20.08934 (+0.837%); pair changes −0.258%, +1.905%, +0.874%. GPU work averages 46.814 → 46.349 ms/present. The FPS direction is mixed; these samples do not establish a consistently positive FPS change. All six captures passed the scene, focus, cache, loaded-library and trace-drop audits; no timed exclusions or added runs.

Six lossless traces, summaries, digests, protocol and provenance were downloaded and hash-verified. The bundle is timing-only. Both measured arms use the same disclosed private observer, reflected in the dirty flags. The newer main delta was tested as described above; no gameplay measurement of 52f212 or 7e669a is claimed.

A1

{"commit":"c40cef843681","dirty":true,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"90:12"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 90:12","first_present":2389,"ms":12007.248},"presents":240,"frame_ms":{"p50":50.021,"p90":50.501,"p99":50.883,"max":51.191},"gpu_busy_ms_per_present":46.681,"worker_busy_pct":{"queue worker 0x0":77.710},"top_phases_ms_per_frame":{"Driver.Packet":38.710,"Driver.Packet.draw":35.485,"Driver.Draw":35.419,"Driver.Draw.draw_enqueued":31.028,"Recorder.Sync":29.592,"VideoOut.Flip":10.209,"Driver.Present":10.192,"VideoOut.Flip.present":10.161},"trace_dropped":false,"trace":"aps5-trace-c40cef843681-3138093.json.gz"}

seconds 90:12 from present 2389: 240 presents, frame p50 50.0 / p90 50.5 / p99 50.9 / max 51.2 ms, GPU busy 46.7 ms per present
AMD Radeon 760M (RADV PHOENIX), radv Mesa 25.0.7-2+deb13u1, Linux 7.2.12-x64v3-xanmod1, 1920x1080, commit c40cef8 (dirty), dropped: no

{"commit":"c40cef843681","dirty":true,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"90:12"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 90:12","first_present":2389,"ms":12007.248},"presents":240,"frame_ms":{"p50":50.021,"p90":50.501,"p99":50.883,"max":51.191},"gpu_busy_ms_per_present":46.681,"worker_busy_pct":{"queue worker 0x0":77.71},"top_phases_ms_per_frame":{"Driver.Packet":38.71,"Driver.Packet.draw":35.485,"Driver.Draw":35.419,"Driver.Draw.draw_enqueued":31.028,"Recorder.Sync":29.592,"VideoOut.Flip":10.209,"Driver.Present":10.192,"VideoOut.Flip.present":10.161},"trace_dropped":false,"trace":"aps5-trace-c40cef843681-3138093.json.gz"}

Slowest frames (largest slices inside each, inclusive)

  • present 2522: 51.2 ms at 6651 ms: batch (gpu) 47.6, Driver.Packet (queue worker 0x0) 37.9, Driver.Packet.draw (queue worker 0x0) 36.0, Driver.Draw (queue worker 0x0) 36.0
  • present 2528: 50.9 ms at 6953 ms: batch (gpu) 46.6, Driver.Packet (queue worker 0x0) 37.1, Driver.Packet.draw (queue worker 0x0) 35.3, Driver.Draw (queue worker 0x0) 35.2
  • present 2546: 50.9 ms at 7852 ms: batch (gpu) 46.8, Driver.Packet (queue worker 0x0) 37.3, Driver.Packet.draw (queue worker 0x0) 34.9, Driver.Draw (queue worker 0x0) 34.9
  • present 2457: 50.8 ms at 3396 ms: batch (gpu) 47.2, Driver.Packet (queue worker 0x0) 37.3, Driver.Packet.draw (queue worker 0x0) 35.1, Driver.Draw (queue worker 0x0) 35.0
  • present 2616: 50.8 ms at 11356 ms: batch (gpu) 46.6, Driver.Packet (queue worker 0x0) 37.3, Driver.Packet.draw (queue worker 0x0) 35.4, Driver.Draw (queue worker 0x0) 35.3

Threads (ms per frame)

thread busy wait untraced in slices < 20 us largest
queue worker 0x0 36.7 (73 %) 10.8 (22 %) 2.6 9.7 Driver.Packet 36.6, Driver.EndSubmission 0.1
draw committer 36.5 (73 %) 0.0 (0 %) 13.5 3.1 Recorder.Sync 29.6, Graphics.Draw 5.0
presenter 0.4 (1 %) 9.8 (20 %) 39.8 0.1 VideoOut.Flip 10.2, Driver.Present 0.0
title 0.1 (0 %) 0.0 (0 %) 49.9 0.6 Shader.ResolveGraphicsStagesAbi 0.1, Shader.ResolveGraphicsAbi 0.0
title 0.1 (0 %) 0.0 (0 %) 50.0 0.5 Shader.ResolveGraphicsAbi 0.0, Shader.ResolveAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.0 0.1 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveGraphicsAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.0 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveGraphicsAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.0 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.0 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.0 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.0 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.0 0.0 Shader.ResolveGraphicsStagesAbi 0.0
gpu 46.6 (93 %) 0.0 (0 %) 3.4 0.0 batch 46.6

Largest slices (ms per frame, inclusive, all threads): batch 46.6, Driver.Packet 36.6, Driver.Packet.draw 34.7, Driver.Draw 34.6, Driver.Draw.draw_enqueued 30.3, Recorder.Sync 29.6, Driver.WorkerWait 10.8, Driver.WorkerWait.idle_and_completion_poll 10.8, VideoOut.Flip 10.2, Driver.Present 10.2

Longest waits

  • Driver.WorkerWait (queue worker 0x0) 11.2 ms at 11808 ms, present 2624
  • Driver.WorkerWait (queue worker 0x0) 11.0 ms at 8203 ms, present 2552
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 4099 ms, present 2470
  • Driver.WorkerWait (queue worker 0x0) 10.8 ms at 10310 ms, present 2594
  • Driver.WorkerWait (queue worker 0x0) 10.8 ms at 2204 ms, present 2432
  • Driver.WorkerWait (queue worker 0x0) 10.8 ms at 6702 ms, present 2523
  • Driver.WorkerWait (queue worker 0x0) 10.8 ms at 5150 ms, present 2492
  • Driver.WorkerWait (queue worker 0x0) 10.7 ms at 7204 ms, present 2532
  • Driver.WorkerWait (queue worker 0x0) 10.7 ms at 2600 ms, present 2440
  • Driver.WorkerWait (queue worker 0x0) 10.7 ms at 8052 ms, present 2549

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

  • batch 2001: 14.7 ms at 6674 ms, present 2522: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.4, Graphics.Draw.draw_and_resource_release (draw committer) 0.2, Recorder.Submit (draw committer) 0.1, Graphics.Draw.validate (draw committer) 0.0
  • batch 3278: 14.5 ms at 10932 ms, present 2607: GPU no ranges; recorded by Graphics.Draw (draw committer) 1.1, Graphics.Draw.draw_and_resource_release (draw committer) 0.7, Recorder.Submit (draw committer) 0.2
  • batch 3503: 14.5 ms at 11681 ms, present 2622: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.9, Graphics.Draw.draw_and_resource_release (draw committer) 0.4, Recorder.Submit (draw committer) 0.3, Graphics.Draw.validate (draw committer) 0.2
  • batch 3173: 14.5 ms at 10583 ms, present 2600: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.8, Graphics.Draw.draw_and_resource_release (draw committer) 0.5, Recorder.Submit (draw committer) 0.2
  • batch 1070: 14.5 ms at 3571 ms, present 2460: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.5, Graphics.Draw.draw_and_resource_release (draw committer) 0.2, Recorder.Submit (draw committer) 0.1, Graphics.Draw.validate (draw committer) 0.0

B1

{"commit":"ea86e2fd6cee","dirty":true,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"90:12"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 90:12","first_present":2376,"ms":12038.292},"presents":240,"frame_ms":{"p50":50.100,"p90":51.077,"p99":52.573,"max":57.040},"gpu_busy_ms_per_present":46.518,"worker_busy_pct":{"queue worker 0x0":77.723},"top_phases_ms_per_frame":{"Driver.Packet":38.828,"Driver.Packet.draw":35.483,"Driver.Draw":35.412,"Driver.Draw.draw_enqueued":30.771,"Recorder.Sync":29.027,"VideoOut.Flip":10.107,"Driver.Present":10.078,"VideoOut.Flip.present":10.048},"trace_dropped":false,"trace":"aps5-trace-ea86e2fd6cee-3139725.json.gz"}

seconds 90:12 from present 2376: 240 presents, frame p50 50.1 / p90 51.1 / p99 52.6 / max 57.0 ms, GPU busy 46.5 ms per present
AMD Radeon 760M (RADV PHOENIX), radv Mesa 25.0.7-2+deb13u1, Linux 7.2.12-x64v3-xanmod1, 1920x1080, commit ea86e2f (dirty), dropped: no

{"commit":"ea86e2fd6cee","dirty":true,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"90:12"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 90:12","first_present":2376,"ms":12038.292},"presents":240,"frame_ms":{"p50":50.1,"p90":51.077,"p99":52.573,"max":57.04},"gpu_busy_ms_per_present":46.518,"worker_busy_pct":{"queue worker 0x0":77.723},"top_phases_ms_per_frame":{"Driver.Packet":38.828,"Driver.Packet.draw":35.483,"Driver.Draw":35.412,"Driver.Draw.draw_enqueued":30.771,"Recorder.Sync":29.027,"VideoOut.Flip":10.107,"Driver.Present":10.078,"VideoOut.Flip.present":10.048},"trace_dropped":false,"trace":"aps5-trace-ea86e2fd6cee-3139725.json.gz"}

Slowest frames (largest slices inside each, inclusive)

  • present 2410: 57.0 ms at 1685 ms: batch (gpu) 52.9, Driver.Packet (queue worker 0x0) 37.3, Driver.Packet.draw (queue worker 0x0) 35.2, Driver.Draw (queue worker 0x0) 35.1
  • present 2405: 55.2 ms at 1432 ms: batch (gpu) 52.1, Driver.Packet (queue worker 0x0) 36.3, Driver.Packet.draw (queue worker 0x0) 35.0, Driver.Draw (queue worker 0x0) 34.9
  • present 2565: 52.6 ms at 9483 ms: batch (gpu) 47.1, Driver.Packet (queue worker 0x0) 37.8, Driver.Packet.draw (queue worker 0x0) 33.2, Driver.Draw (queue worker 0x0) 33.1
  • present 2539: 51.8 ms at 8174 ms: batch (gpu) 47.2, Driver.Packet (queue worker 0x0) 38.5, Driver.Packet.draw (queue worker 0x0) 36.0, Driver.Draw (queue worker 0x0) 35.9
  • present 2544: 51.7 ms at 8429 ms: batch (gpu) 47.4, Driver.Packet (queue worker 0x0) 38.3, Driver.Packet.draw (queue worker 0x0) 35.8, Driver.Draw (queue worker 0x0) 35.7

Threads (ms per frame)

thread busy wait untraced in slices < 20 us largest
queue worker 0x0 36.9 (74 %) 10.8 (21 %) 2.5 10.0 Driver.Packet 36.8, Driver.EndSubmission 0.1
draw committer 35.9 (71 %) 0.0 (0 %) 14.3 3.3 Recorder.Sync 29.0, Graphics.Draw 4.7
presenter 0.4 (1 %) 9.7 (19 %) 40.0 0.1 VideoOut.Flip 10.1, Driver.Present 0.0
title 0.1 (0 %) 0.0 (0 %) 50.0 0.6 Shader.ResolveGraphicsStagesAbi 0.1, Shader.ResolveGraphicsAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.1 0.1 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveGraphicsAbi 0.0
title 0.1 (0 %) 0.0 (0 %) 50.1 0.4 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.1 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveGraphicsAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.2 0.0 Shader.ResolveGraphicsAbi 0.0, Shader.ResolveGraphicsStagesAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.2 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.2 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.2 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveGraphicsAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.2 0.0 Shader.ResolveGraphicsStagesAbi 0.0
gpu 46.5 (93 %) 0.0 (0 %) 3.7 0.0 batch 46.5

Largest slices (ms per frame, inclusive, all threads): batch 46.5, Driver.Packet 36.8, Driver.Packet.draw 34.8, Driver.Draw 34.7, Driver.Draw.draw_enqueued 30.0, Recorder.Sync 29.0, Driver.WorkerWait 10.8, Driver.WorkerWait.idle_and_completion_poll 10.8, VideoOut.Flip 10.1, Driver.Present 10.1

Longest waits

  • Driver.WorkerWait (queue worker 0x0) 11.2 ms at 8021 ms, present 2535
  • Driver.WorkerWait (queue worker 0x0) 11.1 ms at 6371 ms, present 2502
  • Driver.WorkerWait (queue worker 0x0) 11.0 ms at 11340 ms, present 2601
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 11688 ms, present 2608
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 1787 ms, present 2411
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 295 ms, present 2381
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 5217 ms, present 2479
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 1332 ms, present 2402
  • Driver.WorkerWait (queue worker 0x0) 10.8 ms at 7822 ms, present 2531
  • Driver.WorkerWait (queue worker 0x0) 10.8 ms at 3300 ms, present 2441

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

  • batch 2430: 14.6 ms at 8095 ms, present 2537: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.3, Graphics.Draw.draw_and_resource_release (draw committer) 0.2, Recorder.Submit (draw committer) 0.1
  • batch 484: 14.6 ms at 1606 ms, present 2408: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.7, Graphics.Draw.draw_and_resource_release (draw committer) 0.2, Recorder.Submit (draw committer) 0.2, Graphics.Draw.validate (draw committer) 0.0
  • batch 2520: 14.6 ms at 8402 ms, present 2543: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.6, Graphics.Draw.draw_and_resource_release (draw committer) 0.4, Recorder.Submit (draw committer) 0.2, Graphics.Draw.validate (draw committer) 0.0
  • batch 2885: 14.6 ms at 9610 ms, present 2567: GPU no ranges; recorded by Graphics.Draw (draw committer) 1.0, Graphics.Draw.draw_and_resource_release (draw committer) 0.6, Recorder.Submit (draw committer) 0.3, Recorder.Reap (draw committer) 0.0
  • batch 937: 14.6 ms at 3120 ms, present 2438: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.7, Graphics.Draw.draw_and_resource_release (draw committer) 0.4, Recorder.Submit (draw committer) 0.2, Graphics.Draw.validate (draw committer) 0.0

B2

{"commit":"ea86e2fd6cee","dirty":true,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"90:12"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 90:12","first_present":2379,"ms":12046.682},"presents":243,"frame_ms":{"p50":49.540,"p90":49.977,"p99":50.305,"max":51.906},"gpu_busy_ms_per_present":46.312,"worker_busy_pct":{"queue worker 0x0":77.501},"top_phases_ms_per_frame":{"Driver.Packet":38.264,"Driver.Packet.draw":35.034,"Driver.Draw":34.966,"Driver.Draw.draw_enqueued":30.803,"Recorder.Sync":29.402,"VideoOut.Flip":10.174,"Driver.Present":10.158,"VideoOut.Flip.present":10.127},"trace_dropped":false,"trace":"aps5-trace-ea86e2fd6cee-3141378.json.gz"}

seconds 90:12 from present 2379: 243 presents, frame p50 49.5 / p90 50.0 / p99 50.3 / max 51.9 ms, GPU busy 46.3 ms per present
AMD Radeon 760M (RADV PHOENIX), radv Mesa 25.0.7-2+deb13u1, Linux 7.2.12-x64v3-xanmod1, 1920x1080, commit ea86e2f (dirty), dropped: no

{"commit":"ea86e2fd6cee","dirty":true,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"90:12"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 90:12","first_present":2379,"ms":12046.682},"presents":243,"frame_ms":{"p50":49.54,"p90":49.977,"p99":50.305,"max":51.906},"gpu_busy_ms_per_present":46.312,"worker_busy_pct":{"queue worker 0x0":77.501},"top_phases_ms_per_frame":{"Driver.Packet":38.264,"Driver.Packet.draw":35.034,"Driver.Draw":34.966,"Driver.Draw.draw_enqueued":30.803,"Recorder.Sync":29.402,"VideoOut.Flip":10.174,"Driver.Present":10.158,"VideoOut.Flip.present":10.127},"trace_dropped":false,"trace":"aps5-trace-ea86e2fd6cee-3141378.json.gz"}

Slowest frames (largest slices inside each, inclusive)

  • present 2601: 51.9 ms at 11006 ms: batch (gpu) 46.8, Driver.Packet (queue worker 0x0) 37.6, Driver.Packet.draw (queue worker 0x0) 33.3, Driver.Draw (queue worker 0x0) 33.2
  • present 2528: 50.7 ms at 7385 ms: batch (gpu) 46.7, Driver.Packet (queue worker 0x0) 37.0, Driver.Packet.draw (queue worker 0x0) 34.8, Driver.Draw (queue worker 0x0) 34.7
  • present 2482: 50.3 ms at 5103 ms: batch (gpu) 46.3, Driver.Packet (queue worker 0x0) 36.9, Driver.Packet.draw (queue worker 0x0) 34.9, Driver.Draw (queue worker 0x0) 34.9
  • present 2567: 50.3 ms at 9318 ms: batch (gpu) 46.5, Driver.Packet (queue worker 0x0) 36.8, Driver.Packet.draw (queue worker 0x0) 34.3, Driver.Draw (queue worker 0x0) 34.2
  • present 2410: 50.2 ms at 1535 ms: batch (gpu) 46.2, Driver.Packet (queue worker 0x0) 36.6, Driver.Packet.draw (queue worker 0x0) 34.9, Driver.Draw (queue worker 0x0) 34.8

Threads (ms per frame)

thread busy wait untraced in slices < 20 us largest
queue worker 0x0 36.2 (73 %) 10.8 (22 %) 2.6 9.9 Driver.Packet 36.1, Driver.EndSubmission 0.1
draw committer 35.9 (72 %) 0.0 (0 %) 13.7 3.4 Recorder.Sync 29.4, Graphics.Draw 4.5
presenter 0.4 (1 %) 9.8 (20 %) 39.4 0.1 VideoOut.Flip 10.2, Driver.Present 0.0
title 0.1 (0 %) 0.0 (0 %) 49.5 0.6 Shader.ResolveGraphicsStagesAbi 0.1, Shader.ResolveGraphicsAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 49.5 0.1 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveAbi 0.0
title 0.1 (0 %) 0.0 (0 %) 49.5 0.5 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveGraphicsAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 49.6 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 49.6 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 49.6 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 49.6 0.0 Shader.ResolveAbi 0.0, Shader.ResolveGraphicsStagesAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 49.6 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveGraphicsAbi 0.0
gpu 46.3 (93 %) 0.0 (0 %) 3.3 0.0 batch 46.3

Largest slices (ms per frame, inclusive, all threads): batch 46.3, Driver.Packet 36.1, Driver.Packet.draw 34.3, Driver.Draw 34.2, Driver.Draw.draw_enqueued 30.1, Recorder.Sync 29.4, Driver.WorkerWait 10.8, Driver.WorkerWait.idle_and_completion_poll 10.8, VideoOut.Flip 10.2, Driver.Present 10.2

Longest waits

  • Driver.WorkerWait (queue worker 0x0) 11.0 ms at 7633 ms, present 2532
  • Driver.WorkerWait (queue worker 0x0) 11.0 ms at 11158 ms, present 2603
  • Driver.WorkerWait (queue worker 0x0) 11.0 ms at 1386 ms, present 2406
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 4111 ms, present 2461
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 6890 ms, present 2517
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 10213 ms, present 2584
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 544 ms, present 2389
  • Driver.WorkerWait (queue worker 0x0) 10.8 ms at 4161 ms, present 2462
  • Driver.WorkerWait (queue worker 0x0) 10.8 ms at 11306 ms, present 2606
  • Driver.WorkerWait (queue worker 0x0) 10.8 ms at 7138 ms, present 2522

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

  • batch 3341: 14.6 ms at 11031 ms, present 2601: GPU no ranges; recorded by Graphics.Draw (draw committer) 2.3, Graphics.Draw.draw_and_resource_release (draw committer) 1.5, Graphics.Draw.validate (draw committer) 0.3, Recorder.Submit (draw committer) 0.3
  • batch 3251: 14.5 ms at 10731 ms, present 2595: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.4, Graphics.Draw.draw_and_resource_release (draw committer) 0.2, Recorder.Submit (draw committer) 0.1
  • batch 651: 14.5 ms at 2153 ms, present 2422: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.4, Graphics.Draw.draw_and_resource_release (draw committer) 0.2, Recorder.Submit (draw committer) 0.1
  • batch 3026: 14.5 ms at 9989 ms, present 2580: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.4, Graphics.Draw.draw_and_resource_release (draw committer) 0.1, Recorder.Submit (draw committer) 0.1
  • batch 34: 14.5 ms at 122 ms, present 2381: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.9, Graphics.Draw.draw_and_resource_release (draw committer) 0.5, Recorder.Submit (draw committer) 0.2, Graphics.Draw.validate (draw committer) 0.1

A2

{"commit":"c40cef843681","dirty":true,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"90:12"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 90:12","first_present":2400,"ms":12023.566},"presents":238,"frame_ms":{"p50":50.478,"p90":50.971,"p99":51.862,"max":52.049},"gpu_busy_ms_per_present":47.095,"worker_busy_pct":{"queue worker 0x0":77.899},"top_phases_ms_per_frame":{"Driver.Packet":39.184,"Driver.Packet.draw":35.839,"Driver.Draw":35.772,"Driver.Draw.draw_enqueued":31.189,"Recorder.Sync":29.575,"VideoOut.Flip":10.203,"Driver.Present":10.176,"VideoOut.Flip.present":10.145},"trace_dropped":false,"trace":"aps5-trace-c40cef843681-3142850.json.gz"}

seconds 90:12 from present 2400: 238 presents, frame p50 50.5 / p90 51.0 / p99 51.9 / max 52.0 ms, GPU busy 47.1 ms per present
AMD Radeon 760M (RADV PHOENIX), radv Mesa 25.0.7-2+deb13u1, Linux 7.2.12-x64v3-xanmod1, 1920x1080, commit c40cef8 (dirty), dropped: no

{"commit":"c40cef843681","dirty":true,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"90:12"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 90:12","first_present":2400,"ms":12023.566},"presents":238,"frame_ms":{"p50":50.478,"p90":50.971,"p99":51.862,"max":52.049},"gpu_busy_ms_per_present":47.095,"worker_busy_pct":{"queue worker 0x0":77.899},"top_phases_ms_per_frame":{"Driver.Packet":39.184,"Driver.Packet.draw":35.839,"Driver.Draw":35.772,"Driver.Draw.draw_enqueued":31.189,"Recorder.Sync":29.575,"VideoOut.Flip":10.203,"Driver.Present":10.176,"VideoOut.Flip.present":10.145},"trace_dropped":false,"trace":"aps5-trace-c40cef843681-3142850.json.gz"}

Slowest frames (largest slices inside each, inclusive)

  • present 2491: 52.0 ms at 4601 ms: batch (gpu) 47.0, Driver.Packet (queue worker 0x0) 38.6, Driver.Packet.draw (queue worker 0x0) 36.3, Driver.Draw (queue worker 0x0) 36.2
  • present 2533: 52.0 ms at 6720 ms: batch (gpu) 47.2, Driver.Packet (queue worker 0x0) 38.7, Driver.Packet.draw (queue worker 0x0) 36.4, Driver.Draw (queue worker 0x0) 36.3
  • present 2421: 51.9 ms at 1061 ms: batch (gpu) 47.4, Driver.Packet (queue worker 0x0) 37.8, Driver.Packet.draw (queue worker 0x0) 35.6, Driver.Draw (queue worker 0x0) 35.5
  • present 2604: 51.7 ms at 10305 ms: batch (gpu) 47.0, Driver.Packet (queue worker 0x0) 38.4, Driver.Packet.draw (queue worker 0x0) 36.5, Driver.Draw (queue worker 0x0) 36.4
  • present 2608: 51.4 ms at 10509 ms: batch (gpu) 47.2, Driver.Packet (queue worker 0x0) 37.7, Driver.Packet.draw (queue worker 0x0) 35.6, Driver.Draw (queue worker 0x0) 35.5

Threads (ms per frame)

thread busy wait untraced in slices < 20 us largest
queue worker 0x0 37.2 (74 %) 10.8 (21 %) 2.5 9.8 Driver.Packet 37.1, Driver.EndSubmission 0.1
draw committer 36.9 (73 %) 0.0 (0 %) 13.7 3.1 Recorder.Sync 29.6, Graphics.Draw 5.3
presenter 0.5 (1 %) 9.8 (19 %) 40.3 0.1 VideoOut.Flip 10.2, Driver.Present 0.0
title 0.1 (0 %) 0.0 (0 %) 50.4 0.6 Shader.ResolveGraphicsStagesAbi 0.1, Shader.ResolveGraphicsAbi 0.0
title 0.1 (0 %) 0.0 (0 %) 50.5 0.5 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.5 0.1 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveGraphicsAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.5 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.5 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.5 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveGraphicsAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.5 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.5 0.0 Shader.ResolveGraphicsStagesAbi 0.0
gpu 47.1 (93 %) 0.0 (0 %) 3.5 0.0 batch 47.1

Largest slices (ms per frame, inclusive, all threads): batch 47.1, Driver.Packet 37.1, Driver.Packet.draw 35.1, Driver.Draw 35.1, Driver.Draw.draw_enqueued 30.4, Recorder.Sync 29.6, Driver.WorkerWait 10.8, Driver.WorkerWait.idle_and_completion_poll 10.8, VideoOut.Flip 10.2, Driver.Present 10.2

Longest waits

  • Driver.WorkerWait (queue worker 0x0) 11.4 ms at 1061 ms, present 2420
  • Driver.WorkerWait (queue worker 0x0) 11.1 ms at 1671 ms, present 2432
  • Driver.WorkerWait (queue worker 0x0) 11.1 ms at 11722 ms, present 2631
  • Driver.WorkerWait (queue worker 0x0) 11.1 ms at 11772 ms, present 2632
  • Driver.WorkerWait (queue worker 0x0) 11.0 ms at 10509 ms, present 2607
  • Driver.WorkerWait (queue worker 0x0) 11.0 ms at 3390 ms, present 2466
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 3339 ms, present 2465
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 1874 ms, present 2436
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 6823 ms, present 2534
  • Driver.WorkerWait (queue worker 0x0) 10.8 ms at 9597 ms, present 2589

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

  • batch 3256: 14.5 ms at 10938 ms, present 2616: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.5, Graphics.Draw.draw_and_resource_release (draw committer) 0.3, Recorder.Submit (draw committer) 0.1
  • batch 1961: 14.5 ms at 6593 ms, present 2530: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.6, Graphics.Draw.draw_and_resource_release (draw committer) 0.4, Recorder.Submit (draw committer) 0.1, Graphics.Draw.validate (draw committer) 0.0
  • batch 1645: 14.5 ms at 5532 ms, present 2509: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.5, Graphics.Draw.draw_and_resource_release (draw committer) 0.2, Recorder.Submit (draw committer) 0.1
  • batch 1240: 14.5 ms at 4171 ms, present 2482: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.7, Graphics.Draw.draw_and_resource_release (draw committer) 0.4, Recorder.Submit (draw committer) 0.2
  • batch 2007: 14.5 ms at 6745 ms, present 2533: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.7, Graphics.Draw.draw_and_resource_release (draw committer) 0.4, Recorder.Submit (draw committer) 0.1

A3

{"commit":"c40cef843681","dirty":true,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"90:12"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 90:12","first_present":2415,"ms":12008.709},"presents":240,"frame_ms":{"p50":50.060,"p90":50.453,"p99":51.557,"max":52.448},"gpu_busy_ms_per_present":46.666,"worker_busy_pct":{"queue worker 0x0":77.755},"top_phases_ms_per_frame":{"Driver.Packet":38.739,"Driver.Packet.draw":35.542,"Driver.Draw":35.477,"Driver.Draw.draw_enqueued":30.805,"Recorder.Sync":29.433,"VideoOut.Flip":10.156,"Driver.Present":10.142,"VideoOut.Flip.present":10.108},"trace_dropped":false,"trace":"aps5-trace-c40cef843681-3144380.json.gz"}

seconds 90:12 from present 2415: 240 presents, frame p50 50.1 / p90 50.5 / p99 51.6 / max 52.4 ms, GPU busy 46.7 ms per present
AMD Radeon 760M (RADV PHOENIX), radv Mesa 25.0.7-2+deb13u1, Linux 7.2.12-x64v3-xanmod1, 1920x1080, commit c40cef8 (dirty), dropped: no

{"commit":"c40cef843681","dirty":true,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"90:12"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 90:12","first_present":2415,"ms":12008.709},"presents":240,"frame_ms":{"p50":50.06,"p90":50.453,"p99":51.557,"max":52.448},"gpu_busy_ms_per_present":46.666,"worker_busy_pct":{"queue worker 0x0":77.755},"top_phases_ms_per_frame":{"Driver.Packet":38.739,"Driver.Packet.draw":35.542,"Driver.Draw":35.477,"Driver.Draw.draw_enqueued":30.805,"Recorder.Sync":29.433,"VideoOut.Flip":10.156,"Driver.Present":10.142,"VideoOut.Flip.present":10.108},"trace_dropped":false,"trace":"aps5-trace-c40cef843681-3144380.json.gz"}

Slowest frames (largest slices inside each, inclusive)

  • present 2484: 52.4 ms at 3457 ms: batch (gpu) 48.7, Driver.Packet (queue worker 0x0) 39.0, Driver.Packet.draw (queue worker 0x0) 35.0, Driver.Draw (queue worker 0x0) 34.9
  • present 2485: 51.6 ms at 3509 ms: batch (gpu) 45.3, Driver.Packet (queue worker 0x0) 39.3, Driver.Packet.draw (queue worker 0x0) 36.4, Driver.Draw (queue worker 0x0) 36.3
  • present 2533: 51.6 ms at 5912 ms: batch (gpu) 47.0, Driver.Packet (queue worker 0x0) 37.9, Driver.Packet.draw (queue worker 0x0) 35.8, Driver.Draw (queue worker 0x0) 35.7
  • present 2424: 51.1 ms at 451 ms: batch (gpu) 47.3, Driver.Packet (queue worker 0x0) 37.6, Driver.Packet.draw (queue worker 0x0) 35.3, Driver.Draw (queue worker 0x0) 35.2
  • present 2644: 51.1 ms at 11456 ms: batch (gpu) 47.6, Driver.Packet (queue worker 0x0) 37.5, Driver.Packet.draw (queue worker 0x0) 35.4, Driver.Draw (queue worker 0x0) 35.3

Threads (ms per frame)

thread busy wait untraced in slices < 20 us largest
queue worker 0x0 36.8 (74 %) 10.8 (21 %) 2.5 9.7 Driver.Packet 36.7, Driver.EndSubmission 0.1
draw committer 36.5 (73 %) 0.0 (0 %) 13.6 3.1 Recorder.Sync 29.4, Graphics.Draw 5.0
presenter 0.4 (1 %) 9.8 (20 %) 39.8 0.1 VideoOut.Flip 10.2, Driver.Present 0.0
title 0.1 (0 %) 0.0 (0 %) 49.9 0.6 Shader.ResolveGraphicsStagesAbi 0.1, Shader.ResolveGraphicsAbi 0.0
title 0.1 (0 %) 0.0 (0 %) 50.0 0.5 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.0 0.1 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.0 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.0 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.0 0.0 Shader.ResolveAbi 0.0, Shader.ResolveGraphicsStagesAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.0 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveGraphicsAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.0 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 50.0 0.0 Shader.ResolveGraphicsStagesAbi 0.0
gpu 46.6 (93 %) 0.0 (0 %) 3.4 0.0 batch 46.6

Largest slices (ms per frame, inclusive, all threads): batch 46.6, Driver.Packet 36.7, Driver.Packet.draw 34.8, Driver.Draw 34.8, Driver.Draw.draw_enqueued 30.1, Recorder.Sync 29.4, Driver.WorkerWait 10.8, Driver.WorkerWait.idle_and_completion_poll 10.7, VideoOut.Flip 10.2, Driver.Present 10.1

Longest waits

  • Driver.WorkerWait (queue worker 0x0) 11.3 ms at 3561 ms, present 2485
  • Driver.WorkerWait (queue worker 0x0) 11.0 ms at 5912 ms, present 2532
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 4062 ms, present 2495
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 11656 ms, present 2647
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 6064 ms, present 2535
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 1104 ms, present 2436
  • Driver.WorkerWait (queue worker 0x0) 10.8 ms at 11456 ms, present 2643
  • Driver.WorkerWait (queue worker 0x0) 10.7 ms at 5012 ms, present 2514
  • Driver.WorkerWait (queue worker 0x0) 10.7 ms at 451 ms, present 2423
  • Driver.WorkerWait (queue worker 0x0) 10.7 ms at 201 ms, present 2418

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

  • batch 3581: 14.5 ms at 11932 ms, present 2653: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.9, Graphics.Draw.draw_and_resource_release (draw committer) 0.4, Recorder.Submit (draw committer) 0.2, Graphics.Draw.validate (draw committer) 0.0
  • batch 589: 14.5 ms at 1977 ms, present 2454: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.6, Graphics.Draw.draw_and_resource_release (draw committer) 0.2, Recorder.Submit (draw committer) 0.2
  • batch 1175: 14.5 ms at 3935 ms, present 2493: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.6, Graphics.Draw.draw_and_resource_release (draw committer) 0.3, Recorder.Submit (draw committer) 0.1, Graphics.Draw.validate (draw committer) 0.0
  • batch 3399: 14.5 ms at 11328 ms, present 2641: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.7, Graphics.Draw.draw_and_resource_release (draw committer) 0.4, Recorder.Submit (draw committer) 0.1
  • batch 3415: 14.5 ms at 11379 ms, present 2642: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.5, Graphics.Draw.draw_and_resource_release (draw committer) 0.2, Recorder.Submit (draw committer) 0.2

B3

{"commit":"ea86e2fd6cee","dirty":true,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"90:12"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 90:12","first_present":2424,"ms":12003.896},"presents":242,"frame_ms":{"p50":49.535,"p90":50.083,"p99":51.241,"max":51.424},"gpu_busy_ms_per_present":46.218,"worker_busy_pct":{"queue worker 0x0":77.468},"top_phases_ms_per_frame":{"Driver.Packet":38.270,"Driver.Packet.draw":35.008,"Driver.Draw":34.939,"Driver.Draw.draw_enqueued":30.730,"Recorder.Sync":29.296,"VideoOut.Flip":10.153,"Driver.Present":10.134,"VideoOut.Flip.present":10.103},"trace_dropped":false,"trace":"aps5-trace-ea86e2fd6cee-3145923.json.gz"}

seconds 90:12 from present 2424: 242 presents, frame p50 49.5 / p90 50.1 / p99 51.2 / max 51.4 ms, GPU busy 46.2 ms per present
AMD Radeon 760M (RADV PHOENIX), radv Mesa 25.0.7-2+deb13u1, Linux 7.2.12-x64v3-xanmod1, 1920x1080, commit ea86e2f (dirty), dropped: no

{"commit":"ea86e2fd6cee","dirty":true,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"90:12"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 90:12","first_present":2424,"ms":12003.896},"presents":242,"frame_ms":{"p50":49.535,"p90":50.083,"p99":51.241,"max":51.424},"gpu_busy_ms_per_present":46.218,"worker_busy_pct":{"queue worker 0x0":77.468},"top_phases_ms_per_frame":{"Driver.Packet":38.27,"Driver.Packet.draw":35.008,"Driver.Draw":34.939,"Driver.Draw.draw_enqueued":30.73,"Recorder.Sync":29.296,"VideoOut.Flip":10.153,"Driver.Present":10.134,"VideoOut.Flip.present":10.103},"trace_dropped":false,"trace":"aps5-trace-ea86e2fd6cee-3145923.json.gz"}

Slowest frames (largest slices inside each, inclusive)

  • present 2479: 51.4 ms at 2722 ms: batch (gpu) 46.8, Driver.Packet (queue worker 0x0) 37.1, Driver.Packet.draw (queue worker 0x0) 34.9, Driver.Draw (queue worker 0x0) 34.8
  • present 2482: 51.4 ms at 2875 ms: batch (gpu) 46.5, Driver.Packet (queue worker 0x0) 37.5, Driver.Packet.draw (queue worker 0x0) 35.3, Driver.Draw (queue worker 0x0) 35.2
  • present 2480: 51.2 ms at 2773 ms: batch (gpu) 46.9, Driver.Packet (queue worker 0x0) 37.5, Driver.Packet.draw (queue worker 0x0) 35.4, Driver.Draw (queue worker 0x0) 35.2
  • present 2481: 51.0 ms at 2824 ms: batch (gpu) 47.0, Driver.Packet (queue worker 0x0) 37.3, Driver.Packet.draw (queue worker 0x0) 34.6, Driver.Draw (queue worker 0x0) 34.5
  • present 2656: 50.7 ms at 11506 ms: batch (gpu) 46.2, Driver.Packet (queue worker 0x0) 36.6, Driver.Packet.draw (queue worker 0x0) 33.1, Driver.Draw (queue worker 0x0) 33.1

Threads (ms per frame)

thread busy wait untraced in slices < 20 us largest
queue worker 0x0 36.2 (73 %) 10.8 (22 %) 2.6 10.0 Driver.Packet 36.1, Driver.EndSubmission 0.1
draw committer 35.7 (72 %) 0.0 (0 %) 13.9 3.4 Recorder.Sync 29.3, Graphics.Draw 4.4
presenter 0.4 (1 %) 9.8 (20 %) 39.4 0.1 VideoOut.Flip 10.2, Driver.Present 0.0
title 0.1 (0 %) 0.0 (0 %) 49.5 0.6 Shader.ResolveGraphicsStagesAbi 0.1, Shader.ResolveGraphicsAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 49.6 0.1 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveGraphicsAbi 0.0
title 0.1 (0 %) 0.0 (0 %) 49.5 0.5 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 49.6 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveGraphicsAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 49.6 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveGraphicsAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 49.6 0.1 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveGraphicsAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 49.6 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveGraphicsAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 49.6 0.0 Shader.ResolveGraphicsStagesAbi 0.0, Shader.ResolveGraphicsAbi 0.0
title 0.0 (0 %) 0.0 (0 %) 49.6 0.0 Shader.ResolveGraphicsStagesAbi 0.0
gpu 46.2 (93 %) 0.0 (0 %) 3.4 0.0 batch 46.2

Largest slices (ms per frame, inclusive, all threads): batch 46.2, Driver.Packet 36.1, Driver.Packet.draw 34.2, Driver.Draw 34.2, Driver.Draw.draw_enqueued 30.0, Recorder.Sync 29.3, Driver.WorkerWait 10.8, Driver.WorkerWait.idle_and_completion_poll 10.8, VideoOut.Flip 10.2, Driver.Present 10.1

Longest waits

  • Driver.WorkerWait (queue worker 0x0) 11.6 ms at 2722 ms, present 2478
  • Driver.WorkerWait (queue worker 0x0) 11.1 ms at 10515 ms, present 2635
  • Driver.WorkerWait (queue worker 0x0) 11.0 ms at 3226 ms, present 2488
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 11506 ms, present 2655
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 1287 ms, present 2449
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 1583 ms, present 2455
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 10120 ms, present 2627
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 1730 ms, present 2458
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 10861 ms, present 2642
  • Driver.WorkerWait (queue worker 0x0) 10.9 ms at 9528 ms, present 2615

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

  • batch 2050: 14.5 ms at 6773 ms, present 2560: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.7, Graphics.Draw.draw_and_resource_release (draw committer) 0.3, Recorder.Submit (draw committer) 0.2, Graphics.Draw.validate (draw committer) 0.0
  • batch 1043: 14.5 ms at 3449 ms, present 2493: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.3, Recorder.Submit (draw committer) 0.1, Graphics.Draw.draw_and_resource_release (draw committer) 0.1
  • batch 3326: 14.5 ms at 10984 ms, present 2645: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.6, Graphics.Draw.draw_and_resource_release (draw committer) 0.4, Recorder.Submit (draw committer) 0.2, Graphics.Draw.validate (draw committer) 0.0
  • batch 1103: 14.5 ms at 3648 ms, present 2497: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.5, Recorder.Submit (draw committer) 0.1, Graphics.Draw.draw_and_resource_release (draw committer) 0.1
  • batch 1720: 14.5 ms at 5682 ms, present 2538: GPU no ranges; recorded by Graphics.Draw (draw committer) 0.5, Graphics.Draw.draw_and_resource_release (draw committer) 0.2, Recorder.Submit (draw committer) 0.2

Checklist

  • Based on current main; no other open PR implements the same functions
  • One topic per PR; follow-ups go in a new PR
  • No comments in code except technical debt
  • Unimplemented paths throw (NotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file
  • No notes, investigation .md files or images added to the repository (attach them to this PR)
  • New third-party code is a submodule built from source
  • Generic behaviour, not specific to one title
  • Depends on: none
  • Fixes: none
  • Unblocks: none
  • GPUs tested: AMD Radeon760M (vendor AMD), RADV Mesa25.0.7-2+deb13u1, Debian13 / Linux7.2.12-x64v3-xanmod1; historical peer compositions below
  • AI-assisted: yes (Codex)

@github-actions github-actions Bot added perf Performance change perf numbers missing perf pull request without a before and after summary line labels Oct 27, 2026
@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 commented Oct 27, 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 907 core/shader/recompiler/SpirvBackend/src/SpirvImageEmitter.cpp
PR 5021 core/shader/recompiler/SpirvBackend/src/SpirvImageEmitter.cpp
PR 5371 core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/SpirvBackend/src/SpirvImageEmitter.cpp
PR 5609 core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
PR 6280 core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/SpirvBackend/src/SpirvImageEmitter.cpp
PR 6412 core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
PR 6488 core/shader/recompiler/SpirvBackend/src/SpirvImageEmitter.cpp
PR 7223 core/shader/recompiler/SpirvBackend/src/SpirvImageEmitter.cpp
PR 7642 core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/SpirvBackend/src/SpirvImageEmitter.cpp
PR 7689 core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
PR 8939 core/shader/recompiler/SpirvBackend/src/SpirvImageEmitter.cpp
PR 9183 core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/SpirvBackend/src/SpirvImageEmitter.cpp
PR 9633 core/shader/recompiler/SpirvBackend/src/SpirvImageEmitter.cpp
PR 9749 core/shader/recompiler/SpirvBackend/src/SpirvImageEmitter.cpp
PR 9790 core/shader/recompiler/SpirvBackend/src/SpirvImageEmitter.cpp
PR 9852 core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
PR 9969 core/shader/recompiler/SpirvBackend/src/SpirvImageEmitter.cpp
PR 10193 core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/SpirvBackend/src/SpirvImageEmitter.cpp
PR 10652 core/shader/recompiler/SpirvBackend/src/SpirvImageEmitter.cpp
PR 10867 core/shader/recompiler/SpirvBackend/src/SpirvImageEmitter.cpp
PR 11126 core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/SpirvBackend/src/SpirvImageEmitter.cpp
PR 12662 core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/SpirvBackend/src/SpirvImageEmitter.cpp
PR 12980 core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/SpirvBackend/src/SpirvImageEmitter.cpp
PR 13928 core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/SpirvBackend/src/SpirvImageEmitter.cpp
PR 13929 core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/SpirvBackend/src/SpirvImageEmitter.cpp

@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 exact head 6edeae6. I traced the new path: only direct registration-module images with multiple runtime modes receive the selected mode specialization; table selection remains dynamic, and single-mode images use the existing single-mode path. The updated test checks that mode changes reuse the same artifact and validates the rendered results.

Local checks: the exact Release target built successfully (894 Ninja steps); conventions, diff check and current-main merge preview pass. The focused image-plane-bias test passed under QEMU Haswell with lavapipe (llvmpipe). A native CTest attempt is blocked by this host's CPU guard (Intel Xeon E5-1620 v2 lacks required guest instruction-set features); the emulated run is not a native CPU/GPU result. I manually checked the overlap scan's uncomparable shared files: the pairwise conflict with #10193 is in atomic-image metadata, outside this PR's mode-specialization hunk. Hosted Windows, Ubuntu relinker, ASan and policy checks pass; Linux product tests are skipped and the two macOS relinker jobs remain pending.

I am requesting changes because this PR is titled perf and currently carries the perf numbers missing label. The contribution rules require two valid APS5 summary lines from main and the change for the same title, scene and machine, with both traces attached. The body explicitly says no matched timed pair was accepted and includes no such summary lines or traces; instruction counts and native code-size measurements do not satisfy that required report. Please add the required capture report before approval. I found no code defect in the reviewed changes.

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

Copy link
Copy Markdown
Contributor Author

@MarcZX10 Added the requested baseline/PR summary lines and complete tools/trace_digest.py output to the description, plus the results of all three prospective warmed pairs on the same Radeon 760M and Cyclops scene.

  • Baseline 75f3702aed32: 12.54 FPS overall; median frame times 77.712–78.843 ms.
  • Exact PR head 6edeae61a331: 18.84 FPS overall; median frame times 51.742–51.848 ms.
  • GPU time: 75.627 → 49.404 ms/present, about 34.7% lower. Every pair improves both median frame time and GPU time.

All six accepted captures passed the scene, focus, resolution, loaded-library, warmed-cache and zero-drop audits. The common observation hooks and full run protocol are disclosed in the description. The perf numbers missing label has cleared. All six original traces are retained; I’ll add the lossless trace-bundle link separately once published.

The source head is unchanged from the one you reviewed. Thanks for the detailed code review.

@Astronaut10

Copy link
Copy Markdown
Contributor

Supplementary data from another title and GPU: Astro Bot (PPSA21564), Aerial Garden, RX 9070 XT, RADV Mesa 26.2.5. This is an offline native-code comparison, not the main/change capture the perf report asks for.

In this scene five fragment programs account for 76 % of the GPU time registration form costs over specialized modules (serialized per-draw timing). I dumped their modules as built on main 27ad7244d2 and compiled three variants of each with RADV, reading VK_KHR_pipeline_executable_properties and the ACO assembly: the registration module as is (R), R with each direct image-mode selector set to the mode the scene uses (R0, a model of this PR, not its code), and the specialized module (S).

  • Each direct image read is a 15-way mode switch. RADV lowers it to 15 sequential ifs, each loading its own descriptors and waiting (s_wait_kmcnt 0) before its sample, so the 8–13 samples per pixel are issued one at a time.
  • R0 removes 64–79 % of the R–S difference in instructions on the executed path (largest program: 4,418 → 3,805, S 3,497), branches 139 → 13 (S 12) and VMEM clauses 111 → 12 (S 12).
  • VGPRs are the same in all three (60 or 72), so here the gain comes from dispatch and exposed latency, not occupancy.
  • ACO's cycle estimates put R0 within 1–4 % of S.

I haven't measured this PR's frame time on this scene.

@Filip722
Filip722 requested a review from MarcZX10 October 27, 2026 21:06
@github-actions github-actions Bot added shader core/shader agc libSceAgc* labels Oct 27, 2026
@adriadam10 adriadam10 self-assigned this Oct 28, 2026
@Filip722

Copy link
Copy Markdown
Contributor Author

@MarcZX10 The remaining trace attachment is now published: all six original timing traces, summaries, full trace digests, paired comparisons and provenance. All 30 files and all six decoded trace hashes were verified after download; the description now links the bundle.

The head remains 6edeae61a3317444fc6eefde2ca1fbd721a126db, exactly the revision you reviewed. The previously supplied report measures 12.54 → 18.84 FPS across three prospective pairs on one Radeon 760M/Cyclops scene. Please re-review the completed evidence requirement. This adds no cross-title or cross-GPU performance claim.

@boykopovar Could you trigger full Linux/Windows CI for this head, or link an already queued run that identifies this PR and revision? The attached automatic run passes the relinker matrix/ASan, but skips Linux product tests; its successful Windows job only links host tests. I do not have upstream write permission.

gh workflow run build.yml --repo boykopovar/AnyPS5 --ref main --field pr=11952

@JulesB40

Copy link
Copy Markdown
Contributor

Note

🤖 Claude Opus 5.5 responding on behalf of JulesB40

On Windows + NVIDIA (Ada), head 6edeae61a3 merged onto main 750cf6cf48 matches that main exactly across all 1,123 agc_ tests: same passes, same skips, same VUID- lines.

Setup: Windows 11 Home 10.0.26200, Intel Core i9-13900HX, NVIDIA GeForce RTX 4070 Laptop GPU (0x2860), driver 616.92, Vulkan SDK 1.4.335 (VK_LAYER_KHRONOS_validation), WinLibs GCC 15.2.0 r7, Release, BUILD_TESTING=ON. Both sides were built in the same tree; the merge (e90b3f278, local only) applied cleanly.

Command, the same on both sides:

ANYPS5_GPU=4070 ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation \
  ctest --test-dir build -R '^agc_' -j 6
Passed Failed Skipped VUID- lines Missing-layer lines
main 750cf6cf48 1115 0 8 18 0
this PR merged 1115 0 8 18 0
  • Every GPU test that opened a device selected NVIDIA GeForce RTX 4070 Laptop GPU.
  • Per test, the VUID- messages are identical on both sides. All 18 are the same message, VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605, in agc_driver_prepared_exports (14) and agc_driver_srgb8_color_target (4), and both already have it on main. Seeing them also confirms the layer was active.
  • The 8 skips are the same on both sides, for reasons unrelated to this PR: Linux-only imports and comparison modes, optimize_on_fiber, no VK_EXT_shader_stencil_export, and sample_order_grid_reference.
  • agc_driver_image_plane_bias_on_single_level_volume, which this PR extends, passes. agc_driver_image_table, which the description says fails at vkAllocateDescriptorSets on the Radeon 760M, passes on both sides here.

No title was run.

@Oscar45397

Copy link
Copy Markdown
Contributor

Windows + NVIDIA run of head 6edeae61a3, merged onto main 750cf6cf48 (clean merge, local only), compared with that main, so the direct image mode specialisation also has a non-RADV run.

Setup: Windows 11 Home 26200, AMD Ryzen 9 5900X, NVIDIA GeForce RTX 3080, driver 610.88, Vulkan SDK 1.4.363 (VK_LAYER_KHRONOS_validation), WinLibs GCC 15.2.0 r7, Release, BUILD_TESTING=ON.

Command: the fixtures the Tested section names, as I mapped them to test names, 3 runs on each side, with ANYPS5_REQUIRE_VULKAN=1, ANYPS5_NO_SHADER_CACHE=1, VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation and VK_LOADER_DEBUG=layer:

ctest --test-dir build -R '^agc_driver_(image_plane_bias_on_single_level_volume|pixel_implicit_derivatives|image_sample_unnormalized|prepared_shaders_indirect|emulated_color_compare|image_table|image_table_cache)$' -V
Runs Passed Failed VUID- lines Missing-layer lines Layer inserted
main 750cf6cf48 3 7 of 7 each none 0 0 every Vulkan process
this PR on that main 3 7 of 7 each none 0 0 every Vulkan process
  • agc_driver_image_plane_bias_on_single_level_volume, with this PR's volume, plane, forced-sRGB and volume-again checks, passes in all 3 runs.
  • agc_driver_image_table passes on both sides here, so the vkAllocateDescriptorSets -1000069000 failure from the Radeon 760M run does not reproduce on this GPU. Its deferred write-back failed lines are the fixture's refused cases and are the same on both sides.
  • No title or performance run.

GPUs tested: NVIDIA GeForce RTX 3080, driver 610.88, Windows 11.

AI-assisted: yes (Claude Code)

@JJenkx

JJenkx commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Independent RX6650XT/RADV Linux focused result for exact head 6edeae61a331: all 22 selected checks pass on both sources, with 18 actual Khronos layer insertions per side, no VUIDs, missing-layer warnings or skips.

Composition: main 750cf6cf487f plus the same open #6782 (4433a62b3bf6), #6913 (d89f7050b7de) and #11692 (771dbdfec22d) on both sides. Baseline 0db8e930724d; candidate exact source 71eedc1c112c adds this PR by a clean merge, preserving authorship. The source delta is this PR's three files. This is not unmodified-main qualification.

Setup: Arch Linux7.2.9-arch1-1, Ryzen9 7950X, GCC16.2.1 20260810, Radeon RX6650XT, RADV Mesa26.2.4-arch1.1, Ninja Release, BUILD_TESTING=ON. Separate frozen builds; GPU execution serialized. ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation VK_LOADER_DEBUG=layer; actual layer insertion checked. Production GPL/registration budget retained.

The three direct-image checks are:

  • agc_driver_image_plane_bias_on_single_level_volume
  • agc_driver_image_plane_address_on_line_implicit_lod
  • agc_driver_image_sample_unnormalized

They pass on both sides; the candidate volume-bias test includes this PR's cached volume/plane/numeric-mode transition assertions. The other19 depth/MSAA/graphics checks also pass. Baseline qualification is two runs on the same source (19 checks in its earlier build, then the three image checks in a fresh build); candidate22 ran together in a fresh independent full build. This does not claim coverage of the broader image-table fixture or a full-project suite.

Exact composition/delta, selections and complete focused logs/results, SHA256 8854f98a7f541cfe3f71f99ac361190401b357ea70697991245c9360fa44b30b (download verified). No game files or shader requests included.

Native follow-up: Bendy PPSA27624 v01.000.003 loaded the same Office Hallway slot2 save with coherent rendering on the candidate and fresh unchanged baseline. Both closed normally180s with native0, restored ordinary/memory saves/config/kernel64 and no leftover process. The fresh baseline also passed all22 focused checks together,18 actualKHR insertions/zeroVUID/no skips.

Same RX6650XT machine, GPL/normal pipeline/production registration budget, both disk caches disabled; static same-save camera, registered output3840×2160, X11 window1016×864. Native validation/profiling dumps disabled. Official130:5 traces,1M events/thread, no drops:

capture source presents frame p50(ms) GPU(ms/present)
A0 earlier static baseline 0db8e930724d 121 37.896 38.371
B1 candidate 71eedc1c112c 124 39.423 37.801
A2 fresh unchanged baseline 0db8e930724d 116 40.878 38.588

No clear/repeatable gain is established for this Bendy scene. The candidate median lies between the two baseline observations and the GPU difference is small. There is only one candidate capture; A0 predates the prospective B1/A2 plan, each timing window is5s, and backgroundCPU load is uncontrolled. These results do not contradict the author's other-title/GPU measurements. Direct X11 captures were reviewed and match the same hallway/camera; no long-play stability or fix for historical intermittent faults is claimed.

All3 official traces/summary lines/digests, native receipts, reviewed images, focused results and source provenance, SHA256 d894a43f3f4094bbe800f222ef199b79543b86c1739ecd1d804228f72e298afc (download verified). No game files, shader requests, saves, raw register/mapping captures or RGP files included.

AI-assisted: yes (Codex).

@adriadam10

Copy link
Copy Markdown
Collaborator

@MarcZX10 your request on this exact head asked for the main/change aps5-summary.jsonl lines, the traces and the trace_digest.py output. The description now has both summary lines, the digests, three A/B pairs (12.54 → 18.84 FPS, GPU 75.6 → 49.4 ms/present) and the linked trace bundle, and you found no code defect. Could you re-review or dismiss the request so the merge queue can take it? Nothing else is pending from our side.

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

macOS / MoltenVK data point. Apple M4 Pro, macOS 27.2, MoltenVK 1.4.2, x86_64 Release under Rosetta. main doesn't run titles on macOS yet, so the base is a support branch, not main: main 750cf6cf48 + only the macOS boot PRs #7631 #10552 #11249 #11447 #11554 #10669 #7804, + #12529 (the revert of #10337, which roughly doubles the GPU time on this GPU and would hide smaller changes). Change: that base + eight open shader performance PRs merged together (#12287 #11952 #12299 #12280 #11368 #11265 #8716 #8958, all clean merges). I did not measure each PR alone.

Two alternated runs per side, warm shader cache, APS5_TRACE_SUMMARY_EVERY=10:

base with the eight PRs
God of War Sons of Sparta (PPSA28997), fps from 30 s 51.5 / 51.8 51.6 / 51.8
GoW GPU ms/present, gameplay before the fight / in the fight 13.6 / 19.6 13.5 / 19.5
Planet of Lana (PPSA19450), fps from 85 s 32.2 / 32.7 32.5 / 32.6

Together they don't raise the GPU time on MoltenVK. I'm checking open shader performance PRs on this GPU because #10337 was measured on RADV and doubled it here.

Focused tests below ran with ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation on the same two trees; the layer was found and both logs have the same VUID- lines (12 VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605, 20 VUID-vkCreateDescriptorSetLayout-support-09582, from tests that fail the same way on the base).

This PR on MoltenVK: the fixture it extends, agc_driver_image_plane_bias_on_single_level_volume, fails on the base and with the change at the same point, before the new checks: guest sampler descriptor uses a min or max reduction which the device does not support (MoltenVK has no samplerFilterMinmax). So I can't confirm the shared-artifact checks on Apple's GPU. agc_driver_image_sample_unnormalized and agc_driver_prepared_shaders_indirect pass on both, and agc_driver_pixel_implicit_derivatives is skipped on both. No GPU regression in the group. I didn't count pipeline variants, so I can't say what the lost cross-mode reuse costs in compile time here; pipeline creation is slow on MoltenVK, so that is the one thing worth watching on macOS.

AI-assisted: yes (Claude Code ran the builds, runs and tests and drafted this review)

@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 paired traces and digests now address the earlier missing-report request, but the PR is still based on an older main, and its performance baseline is not the current main.

What I ran

Reviewed PR head 6edeae61a3317444fc6eefde2ca1fbd721a126db (PR base commit 75f3702aed32762d0efcde60e998e7edb93c8ae2) and preview-merged that head onto current main 3a2b91981651569163768854a1fcdc7193b6667b; the merge preview was clean. Environment: Linux x86-64, Git and GitHub CLI. I did not build or run tests locally.

git fetch https://github.com/boykopovar/AnyPS5.git main:refs/review/main-20261029 refs/pull/11952/head:refs/review/pr-11952-20261029
git merge-tree --write-tree refs/review/main-20261029 refs/review/pr-11952-20261029
gh api repos/boykopovar/AnyPS5/compare/75f3702aed32762d0efcde60e998e7edb93c8ae2...3a2b91981651569163768854a1fcdc7193b6667b --jq '.files[].filename'
gh api repos/boykopovar/AnyPS5/commits/6edeae61a3317444fc6eefde2ca1fbd721a126db/check-runs --jq '[.check_runs[]|{name:.name,status:.status,conclusion:.conclusion}]'

Results

Check Result
Current-main merge preview Pass; clean
Files changed on main since the PR base No overlap with this PR's changed paths
Hosted PR checks Windows, relinker matrix, ASan, conventions and policy checks pass; Linux product, register-context and write-watch jobs are skipped
Focused Vulkan tests and performance captures Present in the PR description and author/reviewer reports; not independently rerun here
Local build/tests Not run
Command output
git merge-tree --write-tree: d0c921c1a3ab12d9eb402be916c16a79b08aff9d
exit=0
current main: 3a2b91981651569163768854a1fcdc7193b6667b
PR head: 6edeae61a3317444fc6eefde2ca1fbd721a126db
changed-path intersection: (empty)

The check-run query reports success for Windows, Linux/Windows/macOS relinker, relinker-asan, conventions, eligibility, labels and report; it reports skipped for Linux product, write-watch and register-context. These are hosted results, not local test output.

Negative control

Assertion Change to code under test Outcome
PR-specific tests fail without the implementation change None performed by me Not independently exercised; the author/reviewer reports are not a negative-control run by me

Findings

Blocking

  • The PR's recorded base is 75f3702aed32, while current main is 3a2b91981651. The repository requires branches to be based on, and kept up to date with, current main. Although the current-main merge preview is clean and no changed paths overlap, the branch does not satisfy that integration rule.
  • The performance comparison uses 75f3702aed32 as its baseline. After rebasing, the report should compare the rebased change with current main using the same title, scene, machine and session, as required by the performance report instructions.

Non-blocking

  • The PR now includes summary lines, trace digests, linked captures, and detailed Linux/NVIDIA focused results. I found no new code defect in this re-check.

Sources

Not verified

  • I did not independently build or run the Vulkan fixtures, capture gameplay, or run tools/trace_digest.py.
  • I did not run on Linux product CI, a console, or another GPU. The PR's Linux/NVIDIA measurements are author/reviewer-provided evidence.

To get this to a good state

Rebase onto current main, then rerun the same-scene, same-machine baseline/change capture on that base and rebased head; include both aps5-summary.jsonl lines, the traces, and tools/trace_digest.py output. Rerun the focused Vulkan fixtures on the rebased head and record the exact head. I will re-check the new head and repeat the merge and focused validation available here.

@Filip722

Copy link
Copy Markdown
Contributor Author

Refreshed without rewriting history: exact head 7e2c6d6422dd48bff26897b143b94ec10644aeed incorporates main 4c7d275bef89d309313d16bc2bc05d37a1b50be2. Release native libraries/focused targets, conventions and diff checks pass. Matching actual-Radeon760M/Khronos/no-cache validation gives 5 passes on each side; identical pre-existing failure: agc_driver_image_table. No skips, missing-layer warnings or new per-test VUID identifiers/counts.

ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation ctest --test-dir build -R '^(agc_driver_image_plane_bias_on_single_level_volume|agc_driver_pixel_implicit_derivatives|agc_driver_image_sample_unnormalized|agc_driver_prepared_shaders_indirect|agc_driver_emulated_color_compare|agc_driver_image_table)$' -V --timeout 30

Gameplay performance runs are postponed at the author's request during a call. The body now distinguishes completed historical captures from the pending comparison after main's later shader/pipeline merges. This is a correctness/branch update, not a new-head FPS claim or a request to dismiss outstanding performance requirements. I am holding the final re-review/full-CI follow-up until the corresponding author-owned prerequisites are complete.

The completed earlier-base six-capture report remains pinned to edf6804cf52c / 023d82c62c60: 13.017→20.082FPS, all six valid. It is not relabeled as this latest shader integration.

AI-assisted: yes (Codex).

@github-actions github-actions Bot added the perf numbers missing perf pull request without a before and after summary line label Oct 29, 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.

Re-checked head 7e2c6d6422: the code diff is unchanged from the head we reviewed (DescriptorBindingBuilder.cpp:331 passes the resolved mode through the existing image specialization constant, SpirvImageEmitter.cpp:2010 reads it, the fixture checks shared artifact and pixels), and I found no defect in it. The rebase onto current main requested by @MarcZX10 is done.

One point is still open:

  • The PR is labeled perf, but the description now says "Performance refresh pending" and claims no FPS for this head. The 12.54 → 18.84 FPS pairs were taken on 75f3702aed32 before #12280 and other shader changes landed. Please add the same-scene, same-machine main vs head aps5-summary.jsonl lines, the traces and the tools/trace_digest.py output on the refreshed base.

Once that is in the description this should be ready to merge.

adriadam10 and others added 14 commits October 31, 2026 22:16
…ted-queries

feat(libSceRudp): answer flush, remote info and buffer status for unconnected contexts
…internal-9532

feat(libSceLibcInternal): declare 149 PS5 3.20 round four exports
…-exports

feat(libSceAvSetting): declare 28 callable exports
…320-exports

feat(libSceAppInstUtil): declare 26 callable exports
…0-exports

feat(libSceUsbStorage): declare 23 callable exports
…20-exports

feat(libmdbg_syscore): declare 23 callable exports
fix(libkernel): spin and yield when a condition variable wait relocks its mutex
…320-exports

feat(libSceVnaWebsocket): declare 22 callable exports
…er-320-exports

feat(libSceCdlgUtilServer): declare 32 callable exports
…e-utf8

fix(tests): decode export-cache Git paths as UTF-8
test(libSceNpCommon): cover event flag clear and cancel and condition wakeups
…lution

fix(tools): match whole library filenames in host test selection
…lize-checks

fix(libSceNpParty): check initialization first in the state, member and send calls
…web-export-names

feat(libkernel_web): name 42 exports from their NIDs
oneandonlydean and others added 6 commits November 1, 2026 10:32
…owing-file-offsets

fix(relinker): reject overflowing ELF file offsets
…t-state-internal

feat(libSceGnmDriverForNeoMode): answer the internal default context state from SDK 4.00
test(libkernel): run guest_timed_wait_cpu alone on Windows
…ncrel-signed-overflow

test(relinker): pin EH sdata2 funcrel signed pointer overflow
…ing-docs-20261030

docs: clarify cache and trace wall-time summaries
…ault

fix(libkernel): fail socketpair with EFAULT on an unusable result pointer
@Filip722

Copy link
Copy Markdown
Contributor Author

@adriadam10 @MarcZX10 Completed a new matched-main refresh for exact head 19375d89c474e5dd8df739f6a9a76fc021afc618, incorporating main c21eb9a4d0748c11d3061cf402737eda2a30d00f without rewriting history. This directly supplies the requested current-integration comparison rather than relying on the older mixed-FPS cohort.

The same nine required-Radeon/Khronos/no-cache fixtures give 8/9 passing on both sides, the same existing image-table descriptor-allocation failure (-1000069000), and no VUIDs, missing layers or skips. Eight actual Radeon selections and eight Khronos instance/device insertions per arm are verified. The final hook-free build matches all 51 frozen clean candidate libraries; conventions and whitespace checks pass.

Four predeclared pairs AB/BA/BA/AB give mean run frame time 45.986243 → 45.634142 ms, mean paired reduction 0.766008%, two-sided 95% Student-t interval [0.431763%, 1.100254%], df=3. All four pairs improve; GPU work is lower in all four. All ten warm/timed attempts pass scene, focus, cache, input, library and drop audits; eight timed captures, no exclusions, replacements or added repetitions.

All eight original traces, summaries, full digests, protocol and provenance are public; all31files were downloaded/byte-verified, including the eight decoded original compressed trace hashes. Every earlier favorable/unfavorable result remains in the description under historical reports and is not pooled here. No universal, cross-title or cold-compilation gain is claimed.

Main advanced nine commits during this work to f776fddcffd1; its actual delta has no changes to this PR's shader/fixture paths, and the current-main merge preview is clean. That is not a claim of whole-runtime equivalence or timing on the later main. The branch also carries the exact macOS duplicate-registration CI fix already passing both architectures on #12299; no other shader optimization is combined here.

Please re-review the outstanding performance request on this exact head. If satisfactory, a collaborator can run the selected Linux/Windows CI and proceed with merge:

gh workflow run build.yml --repo boykopovar/AnyPS5 --ref main --field pr=11952 --field select=true

My account has no upstream merge or workflow-dispatch permission. AI-assisted: yes (Codex).

@adriadam10
adriadam10 merged commit 4ae6cdc into boykopovar:main Nov 1, 2026
19 of 20 checks passed
@adriadam10

Copy link
Copy Markdown
Collaborator

Checked the interdiff since the approved head: the shader change is unchanged (DescriptorBindingBuilder.cpp:331 passes the resolved direct image mode through the existing image specialization constant for multi-mode registration-module images, SpirvImageEmitter.cpp:2010 reads it, table selection stays runtime), the fixture asserts volume, plane and forced-sRGB modes share one artifact and checks the pixels. The new write_watch CMake change removes a duplicated execute-fault/read-fault registration that is also on main. The matched current-main numbers (45.99 → 45.63 ms mean frame time, four pairs) are in the description, and @TechLevelZero's NVIDIA run plus the Windows/RADV runs show no new failures; merged.

@Filip722

Filip722 commented Nov 1, 2026

Copy link
Copy Markdown
Contributor Author

Additional integration evidence after merge, separate from the reviewed current-main 4K cohort.

On frozen 8c79b18826d5 + existing #10547, private RADV 26.2.6/libdrm 2.4.133, Linux, Ryzen 5 7640HS/Radeon 760M and actual guest/Vulkan 1920×1080 Cyclops gameplay, adding only this PR's two production hunks gives 20.846489 → 16.776552 ms mean frame interval. Four predeclared run-level pairs (AB/BA/BA/AB), all eight valid, no exclusions, replacements or extra pairs; every pair improves. Mean paired reduction 4.069938 ms, two-sided 95% Student-t(df3) interval [2.775468, 5.364407] ms, or 19.427610% [14.221292, 24.633928]%.

The candidate reaches the roughly 60 FPS ceiling in every run (p50 16.684 ms). This establishes the observed reduction on this demanding route; uncapped headroom is unknown. It is a distinct combined-stack/backend/1080p comparison, not another standalone 4K/RADV25 cohort, a fresh-main claim, or a sum of individual percentages. Both trace prefixes remain the frozen source prefix; isolated source-patch and loaded-library hashes identify the actual arms.

The selected optimized bound fragment changes from 12,364 to 4,768 bytes, retaining 32 VGPR/108 SGPR/wave64/zero scratch. No milliseconds are inferred from code size. Six matched focused checks pass on each arm, including cached volume/plane/forced-sRGB mode cycling; five actual Khronos instance/device insertions per arm, no VUIDs, missing layers or skips. A separate camp rendering/native-bind/actual-target check passes on both arms. One initial camp screenshot acquisition timed out before readiness; it remains invalid, and one matched retry with loading-only grace passed. No camp FPS or full-game clean-validation claim.

Three warm-ups per arm were needed: initial candidate pipeline-cache growth and later RADV built-in additions failed earlier gates. Final independent windows have stable payload/index content, no drops and zero pipeline/new-artifact creation scopes. First-use latency remains incompletely measured. Journal OFF, heap absent, ordinary GPL/optimized LTO and arithmetic mode matched; every GPU run used the lock and power-restoration wrapper.

Audited timing summaries, trace digests, protocol, pair directions, provenance and limitations. Raw game-derived material remains private. This supports the existing merged implementation; no new implementation or duplicate PR is proposed.

AI-assisted: yes (Codex).

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.