Skip to content

perf(agc): stage raw buffer elements a dispatch sweeps - #6486

Open
karanvora2599 wants to merge 1 commit into
boykopovar:mainfrom
karanvora2599:perf/agc-stage-swept-raw-buffers
Open

karanvora2599 wants to merge 1 commit into
boykopovar:mainfrom
karanvora2599:perf/agc-stage-swept-raw-buffers

Conversation

@karanvora2599

@karanvora2599 karanvora2599 commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

What

A compute dispatch that reads and writes most of a raw (stride 0) guest buffer now gets the device-local staging that @oneandonlydean's rule from 2688b76 already gives strided buffers, up to 16 MiB. This extends their rule; it doesn't replace it.

Title. PPSA99005, the PS5 OpenGL Showcase (Game bring-up #6289). @MiguelAdolfsen's #6189 reports its slow scene, and their #6202 addresses the storage round trip described there. This PR addresses the other large cost in the same frame: the particle dispatch.

Background. Since 2688b76, a written V# element that the shader also reads (bufferRead) is staged in device memory up to 16 MiB when the direct dispatch's threads × V# stride cover at least half of it (ShaderResources::addGuestBuffer). A raw buffer has stride 0, so it never passes the test and keeps the 2 MiB written window. GL and Vulkan-style storage buffers compiled by Mesa are raw buffers, so they stay bound in place in the host import, however hard the dispatch sweeps them.

The PS5 OpenGL Showcase (PPSA99005) is such a case. particle_cs runs 262,144 threads over an 8 MiB SSBO; each thread loads and stores its own 32-byte record. Bound in place, that dispatch takes about 53 ms of GPU per frame on an RTX 4060 Laptop. Staged, it takes about 0.1 ms plus 2.2 ms of bulk copies. With APS5_NO_HOST_IMPORT=1 it still takes about 60 ms, so the cost is the shader's own loads and stores to host memory, not the import.

How.

  • The recompiler already records, per buffer resource, the furthest byte any access reaches past its base (BufferResource::maxByteExtent: immediate offset plus access width). DescriptorBindingBuilder now copies it into a new DescriptorBinding::bufferExtent, one entry per guest buffer element, like bufferRead.
  • addGuestBuffer uses it as the record size when the V# stride is 0: swept means read && dispatchThreads != 0 && recordBytes != 0 && dispatchThreads × recordBytes × 2 ≥ size. Strided elements are unchanged.
  • The shader disk cache stores the new vector (format 37), as @oneandonlydean's 2fb7a77 did for bufferRead (format 24). Users' shader caches are rebuilt once after the update. The binding plan is what the driver reads at bind time; the IR resource list it comes from is not kept with it.

Why results don't change. Staging is the existing path: copy in before the dispatch, bind the device-local buffer in the import's place, copy the whole element back after it. Only the decision to take it changes, for raw elements a dispatch reads, writes and covers.

Where it matters. Raw storage buffers a dispatch sweeps, between 2 and 16 MiB. A kernel that touches few records of a large raw pool stays in place, as the rule intends: 1,024 threads × 32 bytes against 4 MiB is not swept. A raw element whose accesses carry a large immediate offset (up to 4,095 bytes) overstates its record size; the worst case is a needless copy of at most 16 MiB in and out.

Tested

Windows 11, MinGW-w64 GCC 15.2.0, Release.

  • The measurements and the full suite ran at 10cb276d1: this change on main 92cdc7b.
  • The branch is now rebased onto main 51cee90 (bc15be9). The conflict was main's new guestBufferBytes helper next to addGuestBuffer, and both are kept. Disk-cache format 37 is still free there. Rebuilt on that base:
    • agc_read_written_staging and agc_shader_disk_cache pass on all three devices;
    • a Showcase A/B against main 51cee90 (warm-up of each, then main / PR / PR / main) repeats the result. GPU busy per present goes from 121.6 / 119.2 ms to 71.7 / 71.6 ms, frame p50 from 199 / 198 ms to 150 / 152 ms, and presents per 10 s from 51 / 51 to 67 / 66. These four traces are in the trace comment below.

PS5 OpenGL Showcase (PPSA99005, v1.0.2), RTX 4060 Laptop (Ada), driver 591.86, Windows 11. Measured in the default scene with APS5_TRACE_SECONDS=15:10 and APS5_SPIRV_OPT=none, alternating main / this PR / this PR / main, after a warm-up run of each. Summary lines (frame_ms, gpu_busy_ms_per_present) are below; the four traces are in the trace comment below, with the rebased runs.

Build presents in 10 s frame p50 frame p90 GPU busy per present
main 92cdc7b 45 / 45 225.1 / 224.4 ms 234.6 / 229.1 ms 120.7 / 121.1 ms
this PR 57 / 57 177.3 / 175.8 ms 186.7 / 181.8 ms 70.4 / 69.1 ms

With APS5_PROFILE_GPU=1 APS5_TRACE_STAGING=1:

  • main: program 0x21f3d9000 (particle_cs) takes about 53 ms per dispatch. Only the 384 KiB and 40-byte elements are staged.
  • This PR: the 8 MiB element at 0x20c310000 is staged as well. The program takes about 0.1 ms per dispatch, and staging-in and staging-out together cost about 2.2 ms per present.

The rest of the frame is the storage write-backs #6202 addresses, and draws.

Summary lines (main ab1, PR ab1, PR ab2, main ab2) and [gputime] excerpts
{"commit":"92cdc7b6224c","dirty":false,"env":{"APS5_SPIRV_OPT":"none","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"15:10"},"gpu":"NVIDIA GeForce RTX 4060 Laptop GPU","driver":"NVIDIA 591.86","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"seconds 15:10","first_present":66,"ms":10176.446},"presents":45,"frame_ms":{"p50":225.113,"p90":234.606,"p99":247.990,"max":247.990},"gpu_busy_ms_per_present":120.651,"worker_busy_pct":{"queue worker 0x0":20.398},"top_phases_ms_per_frame":{"Driver.Packet":45.875,"Driver.Packet.device_lock":23.914,"Driver.Packet.draw":19.817,"Driver.Draw":19.799,"Driver.Draw.draw_enqueued":19.383,"Graphics.Wait":8.401,"Graphics.Wait.fence_wait":8.385,"Driver.Present":6.071},"trace_dropped":false,"trace":"aps5-trace-92cdc7b6224c-6344.json.gz"}
{"commit":"10cb276d1542","dirty":false,"env":{"APS5_SPIRV_OPT":"none","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"15:10"},"gpu":"NVIDIA GeForce RTX 4060 Laptop GPU","driver":"NVIDIA 591.86","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"seconds 15:10","first_present":85,"ms":10115.619},"presents":57,"frame_ms":{"p50":177.314,"p90":186.735,"p99":190.276,"max":190.276},"gpu_busy_ms_per_present":70.434,"worker_busy_pct":{"queue worker 0x0":25.654},"top_phases_ms_per_frame":{"Driver.Packet":45.282,"Driver.Packet.device_lock":23.798,"Driver.Packet.draw":20.336,"Driver.Draw":20.315,"Driver.Draw.draw_enqueued":19.898,"Graphics.Wait":8.791,"Graphics.Wait.fence_wait":8.782,"Driver.Present":5.974},"trace_dropped":false,"trace":"aps5-trace-10cb276d1542-23260.json.gz"}
{"commit":"10cb276d1542","dirty":false,"env":{"APS5_SPIRV_OPT":"none","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"15:10"},"gpu":"NVIDIA GeForce RTX 4060 Laptop GPU","driver":"NVIDIA 591.86","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"seconds 15:10","first_present":84,"ms":10043.139},"presents":57,"frame_ms":{"p50":175.822,"p90":181.762,"p99":184.328,"max":184.328},"gpu_busy_ms_per_present":69.108,"worker_busy_pct":{"queue worker 0x0":25.654},"top_phases_ms_per_frame":{"Driver.Packet":44.982,"Driver.Packet.device_lock":23.996,"Driver.Packet.draw":20.098,"Driver.Draw":20.079,"Driver.Draw.draw_enqueued":19.671,"Graphics.Wait":8.251,"Graphics.Wait.fence_wait":8.243,"Driver.Present":6.048},"trace_dropped":false,"trace":"aps5-trace-10cb276d1542-28704.json.gz"}
{"commit":"92cdc7b6224c","dirty":false,"env":{"APS5_SPIRV_OPT":"none","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"15:10"},"gpu":"NVIDIA GeForce RTX 4060 Laptop GPU","driver":"NVIDIA 591.86","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"seconds 15:10","first_present":66,"ms":10080.598},"presents":45,"frame_ms":{"p50":224.363,"p90":229.074,"p99":235.865,"max":235.865},"gpu_busy_ms_per_present":121.053,"worker_busy_pct":{"queue worker 0x0":19.430},"top_phases_ms_per_frame":{"Driver.Packet":43.307,"Driver.Packet.device_lock":23.296,"Driver.Packet.draw":19.137,"Driver.Draw":19.120,"Driver.Draw.draw_enqueued":18.724,"Graphics.Wait":7.631,"Graphics.Wait.fence_wait":7.620,"Driver.Present":6.047},"trace_dropped":false,"trace":"aps5-trace-92cdc7b6224c-19044.json.gz"}

APS5_PROFILE_GPU=1, main, then this PR (by-program part):

[gputime] 2208 ms of GPU time in 1055 batches over 10 s (batch 5297 ms first to last command; classes 3086 ms, all ranges 5291 ms, untimed 6 ms outside every range; 41 presents; 0 ranges dropped at the 512 cap); by program: 0x21f3d9000 x42 2207ms 0x21f3e5000 x42 1ms;
[gputime] 7 ms of GPU time in 1315 batches over 10 s (batch 3972 ms first to last command; classes 3961 ms, all ranges 3965 ms, untimed 7 ms outside every range; 51 presents; 0 ranges dropped at the 512 cap); by program: 0x21f3d9000 x52 5ms 0x21f3e5000 x52 1ms;

On main, APS5_NO_HOST_IMPORT=1 leaves the dispatch at about 60 ms, so the cost is the shader's access to host memory, not the import.

  • agc_read_written_staging (new ctest entry running readWrittenStagingTests, which only ran in the no-argument mode of agc_driver_recorder_tests, so CI never ran it). New raw cases:

    • a dispatch sweeping a read and written 4 MiB raw element stages it;
    • 1,024 threads touching 32 KiB of it keep it in place;
    • a raw element without an extent keeps it in place.

    It passes on the RTX 4060, the Intel UHD (run with VK_LOADER_DRIVERS_DISABLE=*nv-vk*, since this test picks the discrete GPU) and lavapipe.

  • Negative check: with the sweep test back to descriptor.Stride() alone, as on main, it fails with a dispatch sweeping a read and written 4 MiB raw element bound it in place.

  • agc_shader_disk_cache round-trips bufferExtent.

  • Every agc_ test (600), one at a time, at this PR:

    • RTX 4060: 599 pass or skip. agc_driver_store_over_untracked fails (the first result was not stored). It only stores, so this change doesn't reach it. fix(recompiler): defer the TYPE check of a guarded read-only static V# #6412 reports the same failure on main, starting at af4e074; on my machine it passes with a build from before af4e074.
    • Intel UHD (NVIDIA hidden with VK_LOADER_DRIVERS_DISABLE=*nv-vk*, so the recorder tests run on it too): passes or skips except the following, none of which goes through buffer staging. I haven't compared these two against main on this device:
      • agc_driver_ds_swizzle, and the image-table tests (bindless_images, image_sint8, image_table, image_table_cache_bounds, image_table_reuse): these also fail on main e858dbd on this device;
      • agc_import_watch, at the Windows import probe's settle queue, and agc_sample_dumps, a segfault;
      • agc_driver_store_over_untracked.
    • lavapipe 25.2.8: passes or skips except the same agc_import_watch and store_over_untracked, plus segfaults in depth_fast_clear_submit, depth_storage_dispatch, sample_mask_depth_stencil, stencil_ref_export_unused, stencil_replay and stencil_replay_no_gpl. The stencil ones pass when run alone; the others are the known intermittent lavapipe crashes.
  • The no-argument run of agc_driver_recorder_tests stops at keyProofTests ((9) a scan under a pending write was kept), also in a build of main 760ffa6, before reaching readWrittenStagingTests. That's why the new entry runs the staging test on its own.

Checklist

@github-actions

github-actions Bot commented Oct 15, 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 1341 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 1368 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 1395 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 2434 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 3247 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 4650 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 4891 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5021 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 5315 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
PR 5371 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
PR 5426 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5431 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5480 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5499 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5500 core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 5609 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 5656 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 5883 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 5925 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
PR 6044 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6146 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6169 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6177 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
PR 6182 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6185 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6186 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6187 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6188 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/shader/recompiler/Recompiler.hpp
PR 6192 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6194 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6202 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6209 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6218 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6223 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6234 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6235 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
PR 6249 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6280 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
PR 6292 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6300 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6312 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6320 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6326 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6340 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6341 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6360 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6365 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6366 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6373 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6412 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
PR 6414 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6451 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6454 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 6457 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6470 core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.hpp
PR 6475 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6479 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6481 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6488 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
PR 6490 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6495 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6498 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6499 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6501 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6503 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/shader/recompiler/Recompiler.hpp
PR 6535 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6539 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 6551 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6566 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6567 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6588 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6601 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6606 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6611 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6612 core/shader/recompiler/Recompiler.hpp
PR 6615 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6636 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6639 core/shader/recompiler/Recompiler.hpp
PR 6642 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6646 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6647 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6650 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6661 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6674 core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
PR 6679 core/shader/recompiler/Recompiler.hpp
PR 6682 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6683 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.hpp
PR 6701 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6718 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6730 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6741 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6747 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6759 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6762 core/shader/recompiler/Recompiler.hpp
PR 6763 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6771 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6772 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6785 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6788 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6801 core/shader/recompiler/Recompiler.hpp
PR 6804 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6808 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6820 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6856 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6858 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
PR 6868 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6879 core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 6887 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6905 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6914 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6924 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
PR 6937 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6941 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
PR 6944 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6946 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.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 6947 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
PR 6948 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6958 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6959 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 6963 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6965 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6970 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.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 6971 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6972 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6973 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6977 core/shader/recompiler/ShaderDiskCache.cpp
PR 6982 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6987 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6989 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/Recompiler.hpp
PR 6995 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/Recompiler.hpp
PR 7002 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/Recompiler.hpp
PR 7048 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7050 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 7082 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7085 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 7154 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 7169 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7201 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/shader/recompiler/Recompiler.hpp
PR 7223 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
PR 7258 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7261 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 7275 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7307 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7310 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7332 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/shader/recompiler/Recompiler.hpp
PR 7340 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 7381 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
PR 7390 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
PR 7395 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
PR 7410 core/shader/recompiler/Recompiler.hpp
PR 7426 core/shader/recompiler/Recompiler.hpp
PR 7427 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7446 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7457 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7461 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7464 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7465 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7466 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7484 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.hpp
PR 7489 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7505 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7508 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7514 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7520 core/shader/recompiler/ShaderDiskCache.cpp
PR 7533 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7550 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 7570 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7604 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7610 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7615 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7618 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7622 core/shader/recompiler/ShaderDiskCache.cpp
PR 7627 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7629 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7640 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 7642 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
PR 7644 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7647 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7650 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 7664 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7666 core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
PR 7676 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7677 core/libs/prx/libSceAgcDriver/CMakeLists.txt

@blawesom

Copy link
Copy Markdown
Contributor

Rebase handoff — rebased onto current main (authorship unchanged). One conflict, the static_assert size pins in ShaderDiskCache.cpp: this PR's bufferExtent field lands DescriptorBinding at 616 as expected, but RecompileResult measures 464 in the merged tree rather than the PR's 472 — main restructured it while this PR was in flight, so the +8 the PR saw no longer applies. The assert is pinned to the merged actual (464); the encoder/decoder changes for bufferExtent themselves merged cleanly.

Verified on Linux (CachyOS, kernel 7.2.9, GCC 16.2.1, Ninja, Release, BUILD_TESTING=ON, AMD RX 9070 XT / RADV):

To pick it up:

git fetch https://github.com/blawesom/AnyPS5 rebase/6486
git checkout <your branch>
git merge --ff-only FETCH_HEAD

Head is 7920ad274.

@github-actions github-actions Bot added needs rebase Conflicts with main, rebase needed and removed needs rebase Conflicts with main, rebase needed labels Oct 16, 2026
Since 2688b76 a read and written V# element is staged in device memory
up to 16 MiB when the direct dispatch's threads times the V# stride cover
at least half of it. A raw buffer has stride 0, so it never passed and
kept the 2 MiB written window: GL storage buffers compiled by Mesa stay
bound in place in the host import however hard a dispatch sweeps them.

The PS5 OpenGL Showcase's particle update (262,144 threads, each loading
and storing its own 32-byte record of an 8 MiB SSBO) took about 53 ms of
GPU per frame on an RTX 4060 bound in place; staged it takes about 0.1 ms
plus 2.2 ms of bulk copies.

The recompiler already records the furthest byte each buffer resource's
accesses reach past their base (maxByteExtent). The binding plan now
carries it per guest buffer element (DescriptorBinding::bufferExtent,
shader disk cache format 37), and a raw element uses it as its record
size in the sweep test. Strided elements are unchanged.
@karanvora2599
karanvora2599 force-pushed the perf/agc-stage-swept-raw-buffers branch from 486809d to bc15be9 Compare October 18, 2026 00:57
@karanvora2599

Copy link
Copy Markdown
Contributor Author

Rebased onto main 51cee90 (bc15be9). Thanks @blawesom for the rebase handoff. I redid it on my side; the conflict there was main's new guestBufferBytes helper next to addGuestBuffer, and both are kept. On this toolchain RecompileResult is still 472 on main too, so only the DescriptorBinding pin moves (592 → 616), and disk-cache format 37 is still free.

agc_read_written_staging and agc_shader_disk_cache pass on the RTX 4060, the Intel UHD and lavapipe. The Showcase A/B on the new base repeats the result:

Build presents in 10 s frame p50 GPU busy per present
main 51cee90 51 / 51 199.3 / 198.0 ms 121.6 / 119.2 ms
this PR, bc15be9 67 / 66 150.0 / 151.6 ms 71.7 / 71.6 ms

The traces for both the original table and this one are attached below.

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

Copy link
Copy Markdown
Contributor Author

Traces for the Showcase runs (PPSA99005, RTX 4060 Laptop, driver 591.86, APS5_TRACE_SECONDS=15:10, APS5_SPIRV_OPT=none), in run order.

The table in the description (10cb276d1, this change on main 92cdc7b):

  1. main 92cdc7b, ab1: main-ab1-aps5-trace-92cdc7b6224c-6344.json.gz
  2. this PR, ab1: fix-ab1-aps5-trace-10cb276d1542-23260.json.gz
  3. this PR, ab2: fix-ab2-aps5-trace-10cb276d1542-28704.json.gz
  4. main 92cdc7b, ab2: main-ab2-aps5-trace-92cdc7b6224c-19044.json.gz

The rebased head bc15be9 against main 51cee90 (my comment above):

  1. main 51cee90, ab1: main-ab1-aps5-trace-51cee90311b4-38040.json.gz
  2. this PR, ab1: fix-ab1-aps5-trace-bc15be99a770-28328.json.gz
  3. this PR, ab2: fix-ab2-aps5-trace-bc15be99a770-12796.json.gz
  4. main 51cee90, ab2: main-ab2-aps5-trace-51cee90311b4-21064.json.gz

Each file's summary line is in the description or in that comment, in the same order.

@karanvora2599

Copy link
Copy Markdown
Contributor Author

A data point for the case where #6202 lands first, since both change the PS5 OpenGL Showcase (PPSA99005). Same laptop and scene as the description: RTX 4060 Laptop, driver 591.86, APS5_TRACE_SECONDS=15:10, APS5_SPIRV_OPT=none, base main 51cee90. I merged #6202 (60229fa) locally without conflicts, on its own (8864cfdf3) and on top of this PR (5e8e38b35). The runs were 45 s each, interleaved, in this order; runs 7-10 were a second round, after a warm-up of #6202 on its own.

Run Build Frame p50 / p90 / p99 ms Presents in 10 s GPU busy per present ms Trace
1 main 194.7 / 199.9 / 202.2 52 120.6 run01-main-aps5-trace-51cee90311b4-5516.json.gz
2 this PR 148.0 / 152.1 / 160.6 68 71.5 run02-pr6486-aps5-trace-bc15be99a770-33040.json.gz
3 #6202 + this PR 46.0 / 48.7 / 58.8 215 33.8 run03-pr6202-pr6486-aps5-trace-5e8e38b35b8f-25420.json.gz
4 main 196.6 / 200.1 / 202.7 51 121.3 run04-main-aps5-trace-51cee90311b4-32156.json.gz
5 this PR 148.9 / 151.7 / 157.4 68 71.3 run05-pr6486-aps5-trace-bc15be99a770-26224.json.gz
6 #6202 + this PR 46.2 / 50.9 / 60.6 212 33.8 run06-pr6202-pr6486-aps5-trace-5e8e38b35b8f-18940.json.gz
7 #6202 96.4 / 100.7 / 103.4 104 83.9 run07-pr6202-aps5-trace-8864cfdf3cb1-22948.json.gz
8 #6202 + this PR 46.5 / 49.7 / 60.2 213 33.8 run08-pr6202-pr6486-aps5-trace-5e8e38b35b8f-14048.json.gz
9 #6202 97.8 / 102.5 / 108.7 103 84.9 run09-pr6202-aps5-trace-8864cfdf3cb1-22216.json.gz
10 #6202 + this PR 46.2 / 49.8 / 59.8 213 33.7 run10-pr6202-pr6486-aps5-trace-5e8e38b35b8f-22780.json.gz

With #6202 in, this PR still takes the frame from about 97 ms to 46 ms, and the GPU time per present from about 84 ms to 34 ms. The title's own counter agrees: about 5.0 fps on main, 6.5 with this PR, 9.7 with #6202 and 19.5 with both.

With both, APS5_PROFILE_GPU=1 puts 31-39 ms per present in the 18 draws. particle_cs (0x21f3d9000) is down to about 0.1 ms per dispatch, and the staging copies take about 2 ms per present. agc_read_written_staging and agc_driver_array_layer_target pass on the merge.

Thanks @MiguelAdolfsen for #6202.

@github-actions github-actions Bot added needs rebase Conflicts with main, rebase needed perf Performance change labels Oct 18, 2026

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* build needs rebase Conflicts with main, rebase needed perf Performance change shader core/shader

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants