Skip to content

perf(agc): GPU descriptor heap (APS5_GPU_HEAP) - #6947

Draft
Raghav314 wants to merge 31 commits into
boykopovar:mainfrom
Raghav314:perf/agc-gpu-heap
Draft

Raghav314 wants to merge 31 commits into
boykopovar:mainfrom
Raghav314:perf/agc-gpu-heap

Conversation

@Raghav314

@Raghav314 Raghav314 commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

What

An opt-in GPU descriptor heap, APS5_GPU_HEAP=1, so eligible stages stop rebuilding their descriptors on the CPU for every draw. Stacked on the draw pipeline PR (#6946) and #5656 (#6632 is in main now); only the last 23 commits are this PR.

  • GPU-mode stages. A fragment or vertex stage whose images and samplers can be named by heap slot compiles in GPU mode: the shader reads the slot from its metadata and indexes one global image heap (4096 slots per image kind) and sampler heap (256 slots). Stages that need a fault buffer or storage images through the heap stay on the per-draw path. A stage with image or sampler tables can be a heap stage; its template is keyed on all of its descriptors, and its tables are bound from the draw's own words.
  • GPU constants. A vertex stage whose fragment is on the heap and which is address-based anyway reads its SRT constants through a BDA range cache on the GPU instead of the CPU walk; the vertex ring words are patched per draw. Only such a vertex stage is a heap stage; the others take the per-draw path, so GPU constants never turn a plain draw into an address-based one.
  • Heap lookup resolve. A slot the CPU does not know yet is resolved by a small compute pass (HeapLookupResolve.comp) submitted before the batch.
  • Space reuse. An address-based draw whose BDA reads are read-only reuses its address space within an epoch instead of rebuilding it; mirrors refreshed in the epoch are reused while APS5_DRAW_PIPELINE is also set.
  • The pipeline journal knows the heap layouts, so GPU-mode pipelines are journaled and replayed on the next boot like the others.
  • Shared templates. Draws whose descriptors moved share one heap template keyed by the descriptors' shape; each draw carries only the descriptor words that differ, and readers take them in place, so no stage result is copied per draw.
  • Compute stages stay on the per-dispatch path.
  • Heap variants are prepared and their pipeline libraries prebuilt at shader registration.
  • Disk cache format 40, pipeline journal format 5.

APS5_VERIFY_GPU_HEAP=1 checks heap slots against the bound textures, builds 1 in N GPU-mode stages again on the CPU path and compares, compares GPU-read constants with the CPU walk, and checks that every binding a heap stage's readers see equals the patched stage result. With APS5_VERIFY_DRAW_ENTRIES=1, ring vertex hits are compared with a fresh build.

Update (rebased on main 48d61f5)

Update (rebased on main e5f18ea)

Update (rebased on main 47a266c)

  • Cold boot crash (Hades II, reported by @fma-rc): a heap stage's variant was prepared at its first draw, so a cold boot linked and compiled pipelines on the committer thread. The stall let the game's staging allocator run dry, and the title's memcpy at eboot+0x28fba9 wrote to a null destination. Heap variants are now prepared and prebuilt at registration. Hades II cold boot (empty ANYPS5_SHADER_CACHE_DIR and NVIDIA shader cache) now reaches the menu, with no shader prepared at use.
  • Minecraft Dungeons II crash (FMallocBinned3 Attempt to free an unrecognized pointer, once, in Squid Coast): most likely because only the heap write path applied a draw's own user data and flattened SRT, while data hashing, the unchanged-data check and validation saw the template draw's. Every reader now sees the draw's words. Found with the new APS5_VERIFY_GPU_HEAP check (64+ mismatches before, 0 after); Squid Coast did not crash in three runs since.
  • Hades II regression: the per-draw stage result copy on the finisher thread is gone.
  • Compute stages stay off the heap. The D2R abort from @mrfelek ("the global image heap is full" from a compute shader) and the journal replay failures ("a GPU-mode compute stage needs the heap's set layouts") both came from GPU-mode compute stages, which no longer exist; not retested on D2R here.
  • A full heap falls back instead of aborting. Slots are taken on the committer, after the draw already chose GPU-mode stages, so a title with more live textures than slots stopped with "the global image heap is full". Now, when taking a new slot leaves fewer than 1024 image slots of a kind (64 sampler slots) free after a sweep, the heap is refused: new draws build per-draw stages and draw cache lookups skip GPU-mode variants, while the draws already queued use the margin. The worker only reads one flag. New tests run the heap draw sample with APS5_HEAP_SLOT_CAP=1 (plain and pipelined); Astro's Playroom with APS5_HEAP_SLOT_CAP=256 and APS5_VERIFY_GPU_HEAP=4 fell back once, kept 155-158 presents in 10 s and 0 of 200004 checked slots held another texture.
  • Tables use the draw's words. A heap stage's image table, sampler table and table map are bound, reused and revalidated from DrawGuestWords, like its other bindings. A vertex stage with tables is no longer kept as a ring variant, since ring hits reuse the inserting draw's template.
  • Heap textures can be evicted. The heap's slot references no longer count as holders in the sampled texture cache, which used to pass over every heap texture until it was a quarter over budget (007 First Light ran out of device memory on a 10 GiB card). Dropping a heap texture marks a sweep due, the next present runs it, and a sweep frees every slot whose only holders are the heap's. The every-1024-slots sweep moved from the committer to the present too, and a refused heap is taken again once a sweep leaves twice the margin free in every image kind and in the sampler heap.
  • GPU time in Astro's Playroom. The BDA range cache that GPU constants use was compiled into every stage whenever APS5_GPU_HEAP was set, compute included, although compute is off the heap. With APS5_PROFILE_GPU=1 the draws took the same GPU time with the heap on and off (11.95 vs 11.89 ms a frame); the gap was three compute shaders, one of them 4.02 ms a frame against 1.71 ms. The range cache is now only in vertex and fragment stages; that shader is at 1.70 ms and GPU busy is 30.7-31.3 ms per present (34.3-34.6 before, 31.7-33.1 with the heap off).

Same machine, both switches, APS5_PIPELINED_DRAWS=32 APS5_PIPELINE_DISPATCH=1, one run each, compared with the same switches before today's commits (not with the heap off):

  • Hades II level UI/menu (APS5_TRACE_SUMMARY_EVERY=10): 861 / 856 / 869 presents in 10 s, p50 11.4-11.6 ms (832-833 at a488793), GPU busy 2.05 ms per present. This was a cold boot; no shader was prepared at use.
  • Minecraft Dungeons II, Squid Coast, 4K: 138 presents in 10 s, p50 65.5 ms (148, 66.5 ms before today's commits; one 674 ms hitch from shader compiles after the cache version change). In another spot, before the range cache fix: 120 / 122 / 123 presents, p50 78.2-78.7 ms, GPU busy 36.2 ms with the heap, and 114 / 115 / 118 presents, p50 81.9-82.9 ms, GPU busy 36.7-37.0 ms with the heap off.
  • Astro's Playroom: 155 / 156 / 155 presents in 10 s, p50 63.1-63.7 ms (147-149, 66 ms before). On the same libs and spot with the heap off (APS5_DRAW_PIPELINE=1 only): 156 / 157 / 156 presents, p50 63.5-64.0 ms, so parity; GPU busy is 34.5 ms per present with the heap and 31.9 ms without, which does not cost frames in this CPU-bound scene. With the range cache fix (last commit): 161-164 presents, p50 59.8-61.3 ms, GPU busy 30.7-31.3 ms.

PPSA36082

The base is the draw pipeline PR (ecfd43302) with APS5_DRAW_PIPELINE=1. In the level UI/menu, adding APS5_GPU_HEAP=1 takes the frame time p50 from 12.2 to 10.9 ms (807 to 899 presents in 10 s). Against #5656 + #6632 alone (469 presents, p50 21.1 ms) the two switches together are 1.92x. The picture is unchanged.

Level UI/menu standing still, same machine, APS5_HOST_IMPORT_MIB=6784 APS5_PIPELINED_DRAWS=32 APS5_PIPELINE_DISPATCH=1 (the #6632 spin at its default, 150 us on this 16-thread CPU), no APS5_PROFILE_* switch, APS5_TRACE_EVENTS=1048576 so the traces are whole, shader cache warmed for each build, one run each. The runs are from before the rebase onto current main (on f474fb7, same commits otherwise); the rebase had no conflicts.

  • perf(agc): data-only draw hits compare only the user words a stage reads #5656 + perf(agc): spin before blocking on the GPU mutex and the draw committer hand-offs #6632 (c05527b38):
    {"commit":"c05527b38c16","dirty":false,"env":{"APS5_HOST_IMPORT_MIB":"6784","APS5_PIPELINED_DRAWS":"32","APS5_PIPELINE_DISPATCH":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_EVENTS":"1048576","APS5_TRACE_SECONDS":"70:10"},"gpu":"NVIDIA GeForce RTX 4090","driver":"NVIDIA 615.78.08","os":"Linux 7.2.10-1-cachyos","resolution":"1920x1080","window":{"spec":"seconds 70:10","first_present":3799,"ms":10004.878},"presents":469,"frame_ms":{"p50":21.117,"p90":23.155,"p99":26.684,"max":34.878},"gpu_busy_ms_per_present":2.291,"worker_busy_pct":{"queue worker 0x0":93.002},"top_phases_ms_per_frame":{"Driver.Packet":19.836,"Driver.Packet.draw":17.596,"Driver.Draw":17.420,"Driver.Draw.shader_compile_and_link":13.151,"Shader.DrawStage":8.493,"Shader.DrawStage.capture_resources":5.549,"Shader.DrawStage.materialize":1.918,"Driver.Draw.draw_enqueued":1.663},"trace_dropped":false,"trace":"aps5-trace-c05527b38c16-1070518.json.gz"}
    
  • draw pipeline PR, APS5_DRAW_PIPELINE=1:
    {"commit":"ecfd43302cbd","dirty":false,"env":{"APS5_DRAW_PIPELINE":"1","APS5_HOST_IMPORT_MIB":"6784","APS5_PIPELINED_DRAWS":"32","APS5_PIPELINE_DISPATCH":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_EVENTS":"1048576","APS5_TRACE_SECONDS":"70:10"},"gpu":"NVIDIA GeForce RTX 4090","driver":"NVIDIA 615.78.08","os":"Linux 7.2.10-1-cachyos","resolution":"1920x1080","window":{"spec":"seconds 70:10","first_present":5689,"ms":10002.447},"presents":807,"frame_ms":{"p50":12.229,"p90":13.663,"p99":15.490,"max":17.891},"gpu_busy_ms_per_present":2.157,"worker_busy_pct":{"queue worker 0x0":84.287},"top_phases_ms_per_frame":{"Driver.Packet":10.439,"Driver.Packet.draw":8.772,"Driver.Draw":8.666,"Driver.Draw.prepare":4.586,"Driver.Draw.draw_handed_off":3.374,"Driver.Draw.device_setup":0.665,"VideoOut.Flip":0.481,"VideoOut.Flip.present":0.465},"trace_dropped":false,"trace":"aps5-trace-ecfd43302cbd-1070858.json.gz"}
    
  • this PR, APS5_GPU_HEAP=1 APS5_DRAW_PIPELINE=1:
    {"commit":"b23fdf65f521","dirty":false,"env":{"APS5_DRAW_PIPELINE":"1","APS5_GPU_HEAP":"1","APS5_HOST_IMPORT_MIB":"6784","APS5_PIPELINED_DRAWS":"32","APS5_PIPELINE_DISPATCH":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_EVENTS":"1048576","APS5_TRACE_SECONDS":"70:10"},"gpu":"NVIDIA GeForce RTX 4090","driver":"NVIDIA 615.78.08","os":"Linux 7.2.10-1-cachyos","resolution":"1920x1080","window":{"spec":"seconds 70:10","first_present":6284,"ms":10000.089},"presents":899,"frame_ms":{"p50":10.890,"p90":12.493,"p99":15.916,"max":18.813},"gpu_busy_ms_per_present":3.438,"worker_busy_pct":{"queue worker 0x0":83.993},"top_phases_ms_per_frame":{"Driver.Packet":9.335,"Driver.Packet.draw":7.621,"Driver.Draw":7.509,"Driver.Draw.draw_handed_off":3.441,"Driver.Draw.prepare":3.382,"VideoOut.Flip":0.631,"Driver.Draw.device_setup":0.629,"VideoOut.Flip.present":0.618},"trace_dropped":false,"trace":"aps5-trace-b23fdf65f521-1071243.json.gz"}
    

aps5-trace-c05527b38c16-1070518.json.gz - Main
aps5-trace-ecfd43302cbd-1070858.json.gz - PR 'A'
aps5-trace-b23fdf65f521-1071243.json.gz - PR 'A' + B

PPSA16064 (Minecraft Dungeons II)

@TideOPL measured this PR slower than the draw pipeline alone in Squid Coast. Reproduced locally (01.100, 4K output, same machine as below) and fixed by the last three commits. Same standing spot in Squid Coast, APS5_PIPELINED_DRAWS=32 APS5_PIPELINE_DISPATCH=1, warm shader cache, trace 70:10:

  • APS5_DRAW_PIPELINE=1: 151.7 / 153.0 / 155.9 presents in 10 s over three runs, p50 63.5-64.6 ms.
  • + APS5_GPU_HEAP=1 before the fixes: 129.5 presents, p50 76.4 ms.
  • + APS5_GPU_HEAP=1 at a488793: 152.9 presents, p50 64.5 ms, p99 76.8 ms; GPU busy 36.3 ms per present in all of them.

With the fixes, Hades II in the level UI with both switches: 909 presents in 10 s (899 before), p99 13.4 ms (15.9), GPU busy 2.07 ms per present (3.44).

Tested

Linux (CachyOS), x86-64, GCC, 7800X3D / RTX 4090, NVIDIA 615.78.08.

  • This branch on main 47a266c, the linux job of current build.yml run locally: configure with SPIRV tools on, test registration check, build, libs, the whole ctest (1428) and conventions. All pass. The draw pipeline PR alone on the same main: 1391, all pass. agc_driver_store_over_untracked has been flaky before; it passed in both runs.

Earlier, on main f474fb7 (before the rebase) with #5656, #6632 and the draw pipeline PR:

  • The linux job of current build.yml run locally on this branch: configure with SPIRV tools on, test registration check, build, libs, and the agc_* and shader_* scope (686 tests): all pass except agc_driver_store_over_untracked, which fails the same way on main. The whole ctest (1313) passed the same way on this change before the last review fixes.

  • With APS5_GPU_HEAP=1 APS5_DRAW_PIPELINE=1 APS5_PIPELINED_DRAWS=32 APS5_PIPELINE_DISPATCH=1, the agc_* and shader_* scope: the same, plus agc_driver_draw_cache_relocation (the draw pipeline PR's known limit). APS5_GPU_HEAP without APS5_DRAW_PIPELINE passed with only agc_driver_store_over_untracked failing before the last review fixes.

  • The draw pipeline PR's switched tests and eight sampling tests also run with both switches and APS5_VERIFY_GPU_HEAP=1 (*_gpu_heap).

  • New tests: agc_driver_heap_draw_sample_heap, _nogpl, _nogpl_heap, agc_driver_heap_compute_sample_heap, _heap_pipelined, agc_driver_bindless_images_heap (a draw and compute stages that sample a texture write the expected texels, with and without pipeline libraries; with the switch the heap takes the sampling fragment and compute stages, while a compute stage without samplers and a sampling vertex stage whose constants are read on the CPU stay off it) and agc_driver_heap_slots_tests (a held slot is not reused, a freed slot moves its generation and its lookup key is revived for the new texture).

  • Cold boot: Hades II boots with a cold Vulkan pipeline cache and a fresh NVIDIA shader disk cache, with and without a pipeline journal, and with an empty ANYPS5_SHADER_CACHE_DIR; a frozen journal replays all 54 GPU-mode pipelines (0 rejected).

  • At a488793 plus the test update: the agc_* and shader_* scope passes except agc_driver_store_over_untracked (fails on main too), and with both switches also agc_driver_draw_cache_relocation; conventions pass.

Known limits

  • The heap is not a gain everywhere yet: on 27d2b5e it was slower than APS5_DRAW_PIPELINE=1 alone in GTA V (@MichonGoddijn231849, 105.5 vs 126.8 presents) and in Astro's Playroom (@fma-rc). Playroom is at parity on the new head here; GTA V needs a retest.
  • A pipeline built from libraries with a heap fragment stage and a non-heap vertex stage links a pre-rasterization layout whose set 1 is empty while the heap layout has vertex-visible bindings (VUID-VkGraphicsPipelineCreateInfo-pLibraries-06758; listed in the technical debt file).
  • A scene that keeps more textures alive than the heap has slots turns the heap off until a sweep frees twice the margin (above); the abort is left only for the draws already queued bringing more than the 1024-slot margin of new textures of one kind.
  • The GPU-mode stage memo records the guest words it validated after the capture; a guest CPU store racing the capture between the two reads is not detected.

Why this is one PR

Getting this to work took several days of builds and Hades II runs: several parts on their own made the frame rate worse, and only the combination below gave the gain.

The heap only helps when the CPU stops walking the stages it serves, so its pieces cannot land one at a time:

  • Heap fragment stages on their own were slower in the Hades II hub (85 to 63 fps): the worker still captured every stage for its image words and built a second invocation, and the committer did more per draw.
  • The gain came only with GPU-mode stages naming their slots themselves, the vertex stages of those draws reading their constants on the GPU, and the heap draws skipping the per-draw rebuild of their address space (space reuse). Each of these needs the heap layouts and the GPU-mode recompile from the first commit.

Testing other titles

The heap changes how most textured draws bind their images, so it needs testing on more games than Hades II, on NVIDIA and AMD alike. Please post:

  • the title ID, GPU, driver and OS;
  • the summary line (APS5_TRACE_SECONDS=70:10 APS5_TRACE_EVENTS=1048576) with APS5_DRAW_PIPELINE=1 and with APS5_GPU_HEAP=1 APS5_DRAW_PIPELINE=1, both with APS5_PIPELINED_DRAWS=32 APS5_PIPELINE_DISPATCH=1 and nothing else changed;
  • whether anything renders differently (wrong or missing textures, flicker), with a screenshot if so;
  • with APS5_VERIFY_GPU_HEAP=1, the last [heap-slots] and [gpu-heap] lines in the log (any slot holding another texture or any differing constant is a bug), and any Vulkan validation error that names a heap set;
  • whether a first boot with an empty shader cache gets to gameplay.

Checklist

@github-actions

github-actions Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.

Pull request Shared files not compared
PR 674 CMakeLists.txt
PR 862 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 907 core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 1191 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 1324 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 1341 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/CMakeLists.txt
core/shader/recompiler/IntermediateRepresentation/include/IntermediateRepresentation/IrMetadata/ResourcePlan.hpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 1368 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 1395 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawPrecheck.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 1835 CMakeLists.txt
PR 1896 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Draw/DrawPipeline.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawPipeline.cpp
PR 2434 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 3247 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 3786 CMakeLists.txt
docs/user/USAGE.md
PR 3998 CMakeLists.txt
docs/user/USAGE.md
PR 4040 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 4072 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Pipeline.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderValidation.cpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/SpirvBackend/src/SpirvFlowEmitter.cpp
PR 4448 core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Packets/PacketExecution.cpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 4449 core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 4472 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 4650 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCapture.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Shaders.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/PipelineJournal.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderValidation.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/CacheKey.hpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitter.hpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterState.hpp
core/shader/recompiler/SpirvBackend/src/SpirvEmitter.cpp
core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvEmitterHelpers.cpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
docs/dev/debt/libSceAgcDriver.md
PR 4847 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/user/USAGE.md
PR 4891 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/user/USAGE.md
PR 5021 CMakeLists.txt
core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Lifecycle.cpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterState.hpp
core/shader/recompiler/SpirvBackend/src/SpirvEmitter.cpp
core/shader/recompiler/SpirvBackend/src/SpirvFlowEmitter.cpp
docs/user/USAGE.md
PR 5058 docs/dev/debt/libSceAgcDriver.md
PR 5115 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Shaders/ShaderRegistry.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Packets/PacketExecution.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
PR 5315 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
PR 5371 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
core/shader/recompiler/RuntimeAbi.hpp
PR 5372 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 5404 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCache.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCacheStatistics.cpp
PR 5426 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5431 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCapture.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Packets/PacketExecution.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Draw.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Recorder.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
docs/dev/ENVIRONMENT.md
PR 5441 core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Draw.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
PR 5480 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 5481 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Dispatch/DispatchAhead.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Packets/PacketExecution.cpp
PR 5499 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawPrecheck.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Draw.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
docs/dev/debt/libSceAgcDriver.md
PR 5500 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
PR 5609 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Dispatch/DispatchCache.hpp
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Draw/DrawCache.hpp
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCache.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCapture.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawLookup.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Pipeline.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Recorder.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Shaders.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Optimization/include/Optimization/BindingAllocator.hpp
core/shader/recompiler/Optimization/include/Optimization/ResourceProgram.hpp
core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 5710 CMakeLists.txt
PR 5883 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 5925 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Dispatch/DispatchAhead.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawPrecheck.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Lifecycle.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Packets/PacketExecution.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Draw.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Pipeline.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/PipelineJournal.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/PipelineLibrary.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/shader/recompiler/CMakeLists.txt
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
docs/dev/ARCHITECTURE.md
docs/dev/debt/libSceAgcDriver.md
docs/user/USAGE.md
PR 5926 core/libs/prx/libSceAgcDriver/Graphics/include/Draw.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6044 CMakeLists.txt
core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/ARCHITECTURE.md
PR 6067 CMakeLists.txt
docs/dev/ARCHITECTURE.md
docs/dev/ENVIRONMENT.md
PR 6108 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6146 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawPrecheck.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6169 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
PR 6171 docs/user/USAGE.md
PR 6177 core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Resources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Resources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/CacheKey.hpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitter.hpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterState.hpp
core/shader/recompiler/SpirvBackend/src/SpirvEmitter.cpp
PR 6182 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6185 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Recorder.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6186 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Recorder.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/UnitShadow.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6187 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6188 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Draw/DrawCache.hpp
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Draw/DrawPipeline.hpp
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Dispatch/VariantValidation.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCache.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCacheStatistics.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCapture.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawLookup.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawPipeline.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawPrecheck.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Lifecycle.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Packets/PacketExecution.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Execution/src/ShaderMemory.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Draw.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Recorder.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/UnitShadow.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/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.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
docs/dev/debt/libSceAgcDriver.md
PR 6197 core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6202 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6209 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6215 core/libs/prx/libSceAgcDriver/Graphics/include/Pipeline.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6218 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6223 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6235 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawLookup.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderValidation.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/CacheKey.hpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvEmitterHelpers.cpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
PR 6249 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6252 docs/dev/debt/libSceAgcDriver.md
PR 6262 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
PR 6273 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6280 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
core/shader/recompiler/RuntimeAbi.hpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
docs/dev/debt/libSceAgcDriver.md
PR 6290 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderValidation.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
PR 6292 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Packets/PacketExecution.cpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Recorder.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Sampler.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/BdaResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6300 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6308 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
PR 6312 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCapture.cpp
core/libs/prx/libSceAgcDriver/Execution/src/ShaderMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderInputState.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 6326 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
PR 6340 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6341 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawPipeline.cpp
PR 6346 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
PR 6360 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Recorder.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
PR 6363 core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
PR 6364 core/libs/prx/libSceAgcDriver/Graphics/include/Recorder.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
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
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Draw/DrawCache.hpp
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Shaders/ShaderRegistry.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
docs/dev/ARCHITECTURE.md
PR 6367 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6373 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/BdaResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/shader/recompiler/BdaAbi.hpp
PR 6375 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
PR 6379 core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
PR 6382 docs/user/USAGE.md
PR 6412 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderAddressResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/IntermediateRepresentation/include/IntermediateRepresentation/IrMetadata/ResourcePlan.hpp
core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
docs/dev/ARCHITECTURE.md
docs/dev/debt/libSceAgcDriver.md
PR 6414 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6416 core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvBda.hpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterState.hpp
core/shader/recompiler/SpirvBackend/src/SpirvEmitter.cpp
core/shader/recompiler/SpirvBackend/src/SpirvFlowEmitter.cpp
PR 6417 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
PR 6436 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
PR 6440 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 6447 core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 6450 CMakeLists.txt
core/shader/recompiler/CMakeLists.txt
PR 6451 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Pipeline.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6454 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Dispatch/DispatchCache.hpp
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Draw/DrawCache.hpp
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Dispatch/VariantValidation.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCache.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCapture.cpp
core/libs/prx/libSceAgcDriver/Execution/src/ShaderMemory.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/CMakeLists.txt
core/shader/recompiler/IntermediateRepresentation/include/IntermediateRepresentation/IrMetadata/ResourcePlan.hpp
core/shader/recompiler/Optimization/include/Optimization/SrtWalker.hpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/ShaderDiskCache.cpp
docs/dev/ARCHITECTURE.md
docs/dev/ENVIRONMENT.md
PR 6457 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Lifecycle.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6464 docs/dev/debt/libSceAgcDriver.md
PR 6465 core/libs/prx/libSceAgcDriver/Graphics/include/Pipeline.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
PR 6470 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawLookup.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderInputState.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderValidation.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/CacheKey.hpp
core/shader/recompiler/IntermediateRepresentation/include/IntermediateRepresentation/IrMetadata/ProgramMetadata.hpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.hpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6471 core/libs/prx/libSceAgcDriver/Execution/src/ShaderMemory.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
PR 6472 core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6473 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6475 core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Execution/src/ShaderMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6476 core/shader/recompiler/CMakeLists.txt
PR 6479 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Lifecycle.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6481 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/execution/BindlessImages.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6486 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 6488 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/IntermediateRepresentation/include/IntermediateRepresentation/IrMetadata/ResourcePlan.hpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
core/shader/recompiler/SpirvBackend/src/SpirvEmitter.cpp
PR 6490 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
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
docs/dev/debt/libSceAgcDriver.md
PR 6499 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6501 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Packets/PacketExecution.cpp
PR 6503 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderValidation.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/CacheKey.hpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitter.hpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterState.hpp
core/shader/recompiler/SpirvBackend/src/SpirvEmitter.cpp
docs/dev/ARCHITECTURE.md
docs/dev/ENVIRONMENT.md
PR 6505 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Recorder.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
PR 6507 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
PR 6523 core/libs/prx/libSceAgcDriver/Graphics/include/Pipeline.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderValidation.cpp
PR 6529 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6530 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/PipelineJournal.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderInputState.cpp
core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvEmitterHelpers.cpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
PR 6535 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6538 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Draw/DrawPipeline.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawPipeline.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Packets/PacketExecution.cpp
PR 6539 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Dispatch/DispatchCache.hpp
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Draw/DrawCache.hpp
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCache.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCapture.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawLookup.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Pipeline.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Recorder.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Shaders.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Optimization/include/Optimization/BindingAllocator.hpp
core/shader/recompiler/Optimization/include/Optimization/ResourceProgram.hpp
core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 6543 docs/dev/debt/libSceAgcDriver.md
PR 6546 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 6548 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6549 docs/dev/debt/libSceAgcDriver.md
PR 6551 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6557 docs/dev/debt/libSceAgcDriver.md
PR 6563 docs/dev/debt/libSceAgcDriver.md
PR 6566 core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
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 6571 docs/dev/debt/libSceAgcDriver.md
PR 6572 docs/dev/debt/libSceAgcDriver.md
PR 6588 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6598 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
PR 6601 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6604 core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
PR 6606 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Draw.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
PR 6609 core/libs/prx/libSceAgcDriver/Graphics/include/Recorder.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
PR 6611 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/shader/recompiler/Recompiler.cpp
PR 6612 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Draw/DrawCache.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCapture.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawLookup.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/PipelineJournal.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderValidation.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/CMakeLists.txt
core/shader/recompiler/CacheKey.hpp
core/shader/recompiler/IntermediateRepresentation/include/IntermediateRepresentation/IrMetadata/ProgramMetadata.hpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterState.hpp
core/shader/recompiler/SpirvBackend/src/SpirvFlowEmitter.cpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6613 core/shader/recompiler/SpirvBackend/src/SpirvFlowEmitter.cpp
PR 6615 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Packets/PacketExecution.cpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Recorder.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Sampler.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/BdaResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6616 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Packets/PacketExecution.cpp
PR 6617 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Draw/DrawPipeline.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawPipeline.cpp
PR 6628 core/libs/prx/libSceAgcDriver/Graphics/include/BdaResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/BdaResources.cpp
PR 6636 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/ENVIRONMENT.md
docs/dev/debt/libSceAgcDriver.md
PR 6639 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawLookup.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/PipelineJournal.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderValidation.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/CacheKey.hpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6642 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6644 core/shader/recompiler/SpirvBackend/src/SpirvEmitter.cpp
PR 6645 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
PR 6646 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6647 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6650 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
PR 6656 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Dispatch/DispatchCache.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Packets/PacketExecution.cpp
PR 6658 core/libs/prx/libSceAgcDriver/Graphics/include/Recorder.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
docs/dev/ENVIRONMENT.md
PR 6660 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Packets/PacketExecution.cpp
PR 6661 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6670 core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvEmitterHelpers.cpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
PR 6674 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/CMakeLists.txt
core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvDescriptors.cpp
PR 6679 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Draw/DrawCache.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawLookup.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/CacheKey.hpp
core/shader/recompiler/IntermediateRepresentation/include/IntermediateRepresentation/IrMetadata/ProgramMetadata.hpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterState.hpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
PR 6682 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/UnitShadow.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6683 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawLookup.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Pipeline.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/CacheKey.hpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.hpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterState.hpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6701 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
PR 6708 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderValidation.cpp
PR 6718 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6723 docs/dev/debt/libSceAgcDriver.md
PR 6727 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6730 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Lifecycle.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6733 core/shader/recompiler/Recompiler.cpp
PR 6741 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6746 CMakeLists.txt
PR 6747 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6748 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvEmitterHelpers.cpp
PR 6751 core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvBda.hpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterState.hpp
core/shader/recompiler/SpirvBackend/src/SpirvEmitter.cpp
core/shader/recompiler/SpirvBackend/src/SpirvFlowEmitter.cpp
PR 6757 CMakeLists.txt
PR 6759 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6760 docs/dev/debt/libSceAgcDriver.md
PR 6762 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawLookup.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderInputState.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/CacheKey.hpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvEmitterHelpers.cpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6763 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/ARCHITECTURE.md
PR 6767 core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterState.hpp
PR 6771 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/user/USAGE.md
PR 6772 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/ARCHITECTURE.md
PR 6782 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6785 core/libs/prx/libSceAgcDriver/Graphics/include/BdaResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/BdaResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/BdaAbi.hpp
PR 6786 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Dispatch/DispatchAhead.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6788 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/user/USAGE.md
PR 6794 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Packets/PacketExecution.cpp
PR 6799 core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 6801 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawLookup.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/PipelineJournal.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderValidation.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/CacheKey.hpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6802 docs/user/USAGE.md
PR 6804 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Sampler.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Sampler.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6808 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6815 core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 6820 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6821 docs/dev/debt/libSceAgcDriver.md
PR 6848 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6856 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCapture.cpp
PR 6858 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Optimization/include/Optimization/ResourceProgram.hpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
PR 6867 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Shaders/ShaderRegistry.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6868 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6879 CMakeLists.txt
core/shader/recompiler/CMakeLists.txt
core/shader/recompiler/CacheKey.hpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 6887 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6896 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6905 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6911 core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 6913 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 6914 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Draw/DrawPipeline.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawPipeline.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Memory/WrittenBuffers.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/ENVIRONMENT.md
docs/dev/debt/libSceAgcDriver.md
PR 6918 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 6921 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
PR 6924 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
docs/dev/ENVIRONMENT.md
docs/user/USAGE.md
PR 6926 core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Lifecycle.cpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6931 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
docs/dev/ARCHITECTURE.md
PR 6934 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
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/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCapture.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderValidation.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/CMakeLists.txt
core/shader/recompiler/CacheKey.hpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitter.hpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterState.hpp
core/shader/recompiler/SpirvBackend/src/SpirvEmitter.cpp
core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvEmitterHelpers.cpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6944 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6948 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/ENVIRONMENT.md
PR 6951 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 6955 core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/ENVIRONMENT.md
PR 6958 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6959 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/PipelineJournal.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6960 core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6963 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Packets/PacketExecution.cpp
PR 6965 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6966 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6970 core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
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/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
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/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Pipeline.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6976 core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterHelpers.hpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterState.hpp
PR 6977 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/shader/recompiler/CMakeLists.txt
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterState.hpp
docs/dev/debt/libSceAgcDriver.md
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/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Pipeline.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6989 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Pipeline.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6995 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Pipeline.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7002 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Pipeline.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/Recompiler.hpp
docs/dev/debt/libSceAgcDriver.md
PR 7006 core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvEmitterHelpers.cpp
PR 7008 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Dispatch/DispatchAhead.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Packets/PacketExecution.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7011 docs/user/USAGE.md
PR 7039 CMakeLists.txt
PR 7048 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7050 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 7080 docs/user/USAGE.md
PR 7082 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 7085 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
core/shader/recompiler/RuntimeAbi.hpp
core/shader/recompiler/ShaderDiskCache.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7153 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Packets/PacketExecution.cpp
PR 7154 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7169 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Resources.cpp
PR 7194 docs/dev/debt/libSceAgcDriver.md
PR 7201 CMakeLists.txt
core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCapture.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Lifecycle.cpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/BdaResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/shader/recompiler/CMakeLists.txt
core/shader/recompiler/CacheKey.hpp
core/shader/recompiler/IntermediateRepresentation/include/IntermediateRepresentation/IrMetadata/ProgramMetadata.hpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterHelpers.hpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterState.hpp
core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvEmitterHelpers.cpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
PR 7223 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/IntermediateRepresentation/include/IntermediateRepresentation/IrMetadata/ResourcePlan.hpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
PR 7233 core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/BdaResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 7246 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawPipeline.cpp
PR 7250 docs/dev/debt/libSceAgcDriver.md
PR 7254 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7256 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7258 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7261 core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 7264 CMakeLists.txt
PR 7275 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
PR 7292 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 7298 docs/user/USAGE.md
PR 7307 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Packets/PacketExecution.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Recorder.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7310 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7316 CMakeLists.txt
PR 7332 CMakeLists.txt
core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCapture.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Lifecycle.cpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderValidation.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/CMakeLists.txt
core/shader/recompiler/CacheKey.hpp
core/shader/recompiler/IntermediateRepresentation/include/IntermediateRepresentation/IrMetadata/ProgramMetadata.hpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterState.hpp
core/shader/recompiler/SpirvBackend/src/SpirvEmitter.cpp
core/shader/recompiler/SpirvBackend/src/SpirvFlowEmitter.cpp
core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvEmitterHelpers.cpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
docs/dev/ENVIRONMENT.md
docs/dev/debt/libSceAgcDriver.md
docs/user/USAGE.md
PR 7340 core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Packets/PacketExecution.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Recorder.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/ENVIRONMENT.md
PR 7369 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Dispatch/DispatchCache.hpp
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Draw/DrawCache.hpp
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCache.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
PR 7370 docs/user/USAGE.md
PR 7371 core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/BdaResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 7377 core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterState.hpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
PR 7381 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
PR 7388 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
PR 7390 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/shader/recompiler/IntermediateRepresentation/include/IntermediateRepresentation/IrMetadata/DescriptorBinding.hpp
core/shader/recompiler/Optimization/src/BindingAllocator.cpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/RuntimeAbi.hpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7392 core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvBda.hpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterState.hpp
core/shader/recompiler/SpirvBackend/src/SpirvEmitter.cpp
core/shader/recompiler/SpirvBackend/src/SpirvFlowEmitter.cpp
PR 7395 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/IntermediateRepresentation/include/IntermediateRepresentation/IrMetadata/ResourcePlan.hpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/ShaderDiskCache.cpp
core/shader/recompiler/ShaderDiskCache.hpp
PR 7410 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderInputState.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/CacheKey.hpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/src/SpirvFlowEmitter.cpp
PR 7411 docs/dev/ENVIRONMENT.md
PR 7413 docs/dev/debt/libSceAgcDriver.md
PR 7417 docs/dev/ENVIRONMENT.md
docs/user/USAGE.md
PR 7426 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/shader/recompiler/Recompiler.hpp
docs/dev/debt/libSceAgcDriver.md
PR 7427 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/ENVIRONMENT.md
PR 7429 core/shader/recompiler/SpirvBackend/src/SpirvFlowEmitter.cpp
PR 7431 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/SrtWalker/SrtPlanBuilder.cpp
PR 7432 core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7445 core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/shader/recompiler/CMakeLists.txt
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterHelpers.hpp
core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvEmitterHelpers.cpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7446 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7449 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
docs/dev/debt/libSceAgcDriver.md
PR 7450 docs/dev/ARCHITECTURE.md
docs/user/USAGE.md
PR 7456 CMakeLists.txt
PR 7457 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/ENVIRONMENT.md
PR 7461 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7464 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Recorder.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
docs/dev/ENVIRONMENT.md
PR 7465 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7466 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7473 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 7474 core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Lifecycle.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 7480 docs/dev/ENVIRONMENT.md
docs/dev/debt/libSceAgcDriver.md
PR 7484 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderAddressResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/CacheKey.hpp
core/shader/recompiler/Recompiler.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitter.hpp
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterState.hpp
core/shader/recompiler/SpirvBackend/src/SpirvEmitter.cpp
docs/dev/ENVIRONMENT.md
PR 7489 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Recorder.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 7505 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7508 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7514 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 7520 core/shader/recompiler/ShaderDiskCache.cpp
PR 7522 core/shader/recompiler/Recompiler.cpp
PR 7523 CMakeLists.txt
PR 7526 docs/dev/ENVIRONMENT.md
PR 7533 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7550 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
core/shader/recompiler/ShaderDiskCache.cpp
PR 7560 core/shader/recompiler/CMakeLists.txt
core/shader/recompiler/Recompiler.cpp
PR 7570 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7571 core/shader/recompiler/SpirvBackend/src/SpirvBdaLookup.cpp
PR 7579 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7592 docs/user/USAGE.md
PR 7600 docs/dev/debt/libSceAgcDriver.md
PR 7603 core/shader/recompiler/SpirvBackend/src/SpirvEmitter.cpp
core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvEmitterHelpers.cpp
PR 7604 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/GuestMemory.hpp
core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
docs/dev/ENVIRONMENT.md
docs/dev/debt/libSceAgcDriver.md
PR 7610 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/shader/recompiler/SpirvBackend/src/SpirvEmitter.cpp
PR 7615 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7618 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7622 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawPipeline.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Lifecycle.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/PipelineJournal.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/PipelineLibrary.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
core/shader/recompiler/CMakeLists.txt
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/Graphics/src/GuestBufferMemory.cpp
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
docs/dev/debt/libSceAgcDriver.md
PR 7643 core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
docs/dev/ENVIRONMENT.md
PR 7644 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Draw/DrawCache.hpp
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp
core/libs/prx/libSceAgcDriver/Execution/include/Driver/Shaders/ShaderRegistry.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
docs/dev/ARCHITECTURE.md
PR 7645 CMakeLists.txt
PR 7647 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/include/VulkanDevice.hpp
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 7650 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7659 docs/dev/debt/libSceAgcDriver.md
PR 7666 core/shader/recompiler/Optimization/src/DescriptorBindingBuilder.cpp
PR 7668 docs/dev/debt/libSceAgcDriver.md
PR 7674 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderValidation.cpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
PR 7676 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7677 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterHelpers.hpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
PR 7682 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
PR 7683 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Packets/PacketExecution.cpp
docs/dev/ENVIRONMENT.md
docs/dev/debt/libSceAgcDriver.md
PR 7684 core/libs/prx/libSceAgcDriver/tests/ShaderDiskCache.cpp
core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
core/shader/recompiler/ShaderDiskCache.cpp
docs/dev/ARCHITECTURE.md
PR 7685 docs/user/USAGE.md
PR 7687 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
docs/dev/debt/libSceAgcDriver.md

@oneandonlydean oneandonlydean self-assigned this Oct 16, 2026
@github-actions github-actions Bot added build shader core/shader docs agc libSceAgc* labels Oct 16, 2026
@TideOPL

TideOPL commented Oct 16, 2026

Copy link
Copy Markdown
Contributor

Tested on Minecraft Dungeons II (PPSA16064, UE). Windows 11 (26200), NVIDIA GeForce RTX 5070 (driver 610.88), WinLibs GCC 15.2, Release. Build: main bc3c0fc + this head ddb3938 + #5372. The full setup and the base and draw-pipeline numbers are in #6946.

With APS5_PIPELINED_DRAWS=32 APS5_PIPELINE_DISPATCH=1 APS5_DRAW_PIPELINE=1 APS5_GPU_HEAP=1. Trace window 70:10, starting 70 s after the gameplay HUD, two runs:

  • p50 / p90 / p99: 110.1 / 115.7 / 131.5 ms and 122.9 / 133.7 / 146.5 ms; 91 and 81 presents in 10 s.
  • APS5_DRAW_PIPELINE=1 alone, same build: 98.1 and 99.7 ms p50.
  • So the heap is 12–23% slower on this title.
  • In the slower run, GPU busy per present rises from about 45 ms to 60.5 ms, and Driver.Dispatch / Vulkan.Dispatch rise from about 52 / 24 to 66 / 35 ms per frame.

Verify run (APS5_VERIFY_GPU_HEAP=1, same switches, 60 s of gameplay), last lines:

[heap-slots] verify: 700007 image slots checked, 0 hold another texture
[gpu-heap] gpu-read verify (cumulative): 57660259 GPU-loaded constant words compared with the CPU walk, 0 differing

Rendering. Correct. We took screenshots every 3 s over 90 s of gameplay in both runs: no missing or wrong textures, no flicker, and frames match the base build.

First boot with an empty shader cache. It reached gameplay on the first try with these switches and ANYPS5_SHADER_CACHE_DIR set to a new, empty directory: title at 23 s, gameplay at 90 s.

Summary line (second run)
{"commit":"14697483367c","dirty":false,"env":{"APS5_DRAW_PIPELINE":"1","APS5_GPU_HEAP":"1","APS5_PIPELINED_DRAWS":"32","APS5_PIPELINE_DISPATCH":"1","APS5_STAGING_POOL_MIB":"1024","APS5_TRACE_DIR":"<path>","APS5_TRACE_EVENTS":"1048576","APS5_TRACE_SECONDS":"70:10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 610.88","os":"Windows 10.0.26200","resolution":"3840x2160","window":{"spec":"seconds 70:10","first_present":1156,"ms":10113.969},"presents":81,"frame_ms":{"p50":122.860,"p90":133.686,"p99":146.471,"max":146.471},"gpu_busy_ms_per_present":60.490,"worker_busy_pct":{"queue worker 0x0":96.705,"queue worker 0x20":99.552},"top_phases_ms_per_frame":{"Driver.Packet":244.925,"Driver.Packet.dispatch":66.312,"Driver.Dispatch":66.010,"Driver.Packet.memory_wait":62.871,"Driver.Packet.draw":53.253,"Driver.Draw":53.128,"Driver.Packet.device_lock":37.632,"Vulkan.Dispatch":34.611},"trace_dropped":false}

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

Stacked on #6946, #5656 and #6632, so this should be reviewed after those land. Notes on the numbers and the design.

  • The gain over #6946 is p50 12.2 to 10.9 ms, but gpu_busy_ms_per_present goes from 2.157 to 3.438 (+59%), and p99/max are slightly worse (15.49 to 15.92 ms, 17.89 to 18.81 ms). This moves per-draw descriptor work from the CPU to the GPU. On a 4090 at 1080p that is free; on a card that is already GPU-bound it is a regression. Please run the same pair on a mid-range card (RX 6600 or RTX 3060 class) and in a scene where GPU time is the limit.
  • One run each in a menu again; no gameplay scene and no repeat to show the spread.
  • Known limit: the heap holds every texture it placed until its sweep frees the slot, so heap textures escape the texture cache's budget, and a scene with more than 4096 distinct textures of one kind stops with "the global image heap is full". That is a hard stop on a path meant to be a speed-up. It needs either eviction or a fall back to the per-draw path when the heap fills, and a test for it.
  • Known limit: a pre-rasterization layout with an empty set 1 against a heap layout with vertex-visible bindings is a validation error (VUID-VkGraphicsPipelineCreateInfo-pLibraries-06758), listed in debt. A validation error that gives undefined behaviour on some drivers is not debt; the combination should be rejected or avoided.
  • 5.7k lines and 98 files including the stacked PRs. Once the stack lands, check whether the heap and the "space reuse" part (which also depends on APS5_DRAW_PIPELINE) can be two PRs.

@Raghav314

Copy link
Copy Markdown
Contributor Author

@CnRJay on splitting the heap from the space reuse: I tried the heap in smaller steps first, and it did not help on its own.

  • Heap fragment stages alone were slower in the Hades II hub (85 to 63 fps): the worker still captured every stage for its image words and built a second invocation, and the committer did more per draw.
  • The gain came only once GPU-mode stages name their slots themselves, the vertex stages of those draws read their constants on the GPU, and the heap draws skip the per-draw rebuild of their address space (the space reuse). All three need the heap layouts and the GPU-mode recompile from the first commit, so a heap PR without the space reuse would land as a regression.

The GPU time and the other points are a separate reply; the Minecraft Dungeons II numbers from @TideOPL are on that side too.

LLM assistance used.

@Raghav314

Copy link
Copy Markdown
Contributor Author

@TideOPL thanks, this is very useful. It is the first run on a title that is not Hades II, and also the first on Windows, at 4K, and on a GPU that is not a 4090.

Draw pipeline. That matches what the PR moves. Here queue 0 spends about 53 ms per frame in memory_wait on the compute queue (worker 0x20 at 99.5%). The finisher only shortens queue 0's own draw work, so it cannot help while the compute queue is the limit.

Heap. That is a real regression on this title. Thanks for the verify lines too: 0 wrong slots and 0 differing constants means it is slow but correct. In your slower run, GPU busy goes from about 45 to 60.5 ms per present, and Driver.Dispatch / Vulkan.Dispatch go up as well. So on a title that is already GPU-bound at 4K, the heap's GPU-side work costs more than it saves. I do not know yet which part costs the time. The two trace files (.json.gz) from the APS5_DRAW_PIPELINE=1 run and the heap run would show which dispatches got slower. The two heap runs are also far apart (91 vs 81 presents), which is worth knowing.

Abort in the base mode (storing storage image results pending over memory outside the write watch…). The message comes from a path on main that is not implemented yet. Your base build still had #5656, #6632, #5372 and the always-on parts of these PRs, so I cannot tell yet whether one of them makes it reachable. Does it also happen on main + #5372 alone?

LLM assistance used.

@oneandonlydean

Copy link
Copy Markdown
Collaborator

@TideOPL's run shows the heap 12 to 23% slower on Minecraft Dungeons II at 4K (GPU busy 45 to 60.5 ms per present), correct but slow, and @Raghav314 agrees it's a real regression on a GPU-bound title. @CnRJay's asks stand: a mid-range card and a scene where GPU time is the limit, an eviction or a fall back to the per-draw path when the heap holds 4096 textures, and VUID-VkGraphicsPipelineCreateInfo-pLibraries-06758 avoided rather than listed as debt. We'd add a test that frees a texture while a draw using its slot is pending. Stays a draft, test only, behind #6946.

@Raghav314

Copy link
Copy Markdown
Contributor Author

@TideOPL I reproduced the Minecraft Dungeons II slowdown with my own dump (PPSA16064 01.100, Linux, RTX 4090, 4K output), at a fixed spot in Squid Coast, and pushed three commits that fix it. With APS5_PIPELINED_DRAWS=32 APS5_PIPELINE_DISPATCH=1, warm shader cache, trace 70:10:

presents in 10 s p50 / p99 ms GPU busy ms per present
APS5_DRAW_PIPELINE=1 (three runs) 151.7 / 153.0 / 155.9 63.5-64.6 / 74.4-79.3 36.2-36.7
+ APS5_GPU_HEAP=1, before 129.5 76.4 / 91.1 37.1
+ APS5_GPU_HEAP=1, these commits 152.9 64.5 / 76.8 36.3

The first two rows are local builds with extra timing marks, the last is these commits as pushed. GPU time was never the difference; the heap made queue 0's draws slower on the CPU, and the compute queue waited on them (memory_wait).

  • In-place read lookup. A draw whose address space is reused snapshotted its guest buffers and checked each one against every region of the space (about 4200 here) one by one. It is now a binary search in the sorted regions. Draw bindings went from 6.1 to 0.8 ms per frame.
  • Import stamps. Retaking a reused space stamped every region's import; it now stamps each distinct import once.
  • GPU constants only where they cost nothing. Reading a vertex stage's constants on the GPU made the whole draw address-based, so about 130 draws per frame that are plain cached draws without the heap went through the address space each time. A vertex stage now reads its constants on the GPU only when it is address-based anyway, and only such a stage is a heap vertex stage; the plan records the decision (disk cache format 40).

Hades II with both switches on the same build: 909 presents in 10 s (899 before), p99 13.4 ms (15.9), GPU busy 2.07 ms per present (3.44). Your other points (the trace files and the base-mode abort on main + #5372 alone) are still open.

LLM assistance used.

@Amoenus

Amoenus commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

@Raghav314 Coordination for native-MSAA buffer-read follow-up #7002, dependent on #6995 and #6498: tested fork. It adds synchronizeGuestBuffers(moved) at entry to PrepareDrawBindings, before its early return; binding stays a strict assertion without waits/submits. Writable aliases are checked before any read-only publication.

Your heap change edits the adjacent BDA eligibility condition and in-place read lookup. If yours lands first, I will retain the handoff before your new early-return condition when rebasing our follow-up. Our fixture matrices have 81 passes across explicit RTX5080, Radeon Graphics and llvmpipe source pins, with 27 targeted refusal and alias-order control failures. The combined GPU-heap/space-reuse path remains untested here. Please flag any ordering constraint I have missed; exact evidence is maintained in #6480.

AI-assisted: Codex; author responsible.

@SleglJan

Copy link
Copy Markdown
Contributor

007 First Light (PPSA11386 v01.018.000), 4K output. The setup, base and draw-pipeline numbers are in my comment on #6946: #6946 (comment) Head ddb3938; the commits pushed since (ddb3938e0..fab8dc64b) are not in these runs. The heap runs used a shader cache and journal from a warm-up run with both switches on.

APS5_DRAW_PIPELINE=1 APS5_GPU_HEAP=1: four runs, all aborted before the title screen.

  • Each run stalls for about 11-12 minutes in the boot, then aborts with vkAllocateMemory storage texture: Vulkan result -2 (VK_ERROR_OUT_OF_DEVICE_MEMORY); one run hit it on texture.
  • Two of the runs hit every shader (2,212 hits, 0 misses) and two translated every shader (0 hits, 2,212 misses). All four stall equally long, so the stall is not shader translation.
  • A trace over one stall (APS5_TRACE_SECONDS=5:400 APS5_TRACE_EVENTS=2097152) covers 685 s and 77 presents. Nearly all of the presents came in the first 3.4 s; after them came frames of 231 s and 451 s.
    • Queue worker 0 sits in 14 single dispatch calls of 7-117 s each, 601 s in total.
    • In each call, the timed sub-phases (prepared_invocation, capture_resources, materialize, and Vulkan.Dispatch where recorded) cover at most 0.62 s, and 2.5 s across all 14.
    • The untimed rest starts when materialize ends. In the 9 calls with a recorded Vulkan.Dispatch, it runs until that starts. In Dispatch.cpp that stretch is insertDispatch; PrepareDispatch (resource preparation, the pre-sync, and computePipeline(), which finds, waits for or builds the compute pipeline); the packet's labels; and VulkanDevice::dispatch() before its Vulkan.Dispatch timer.
    • The queue-0 drains come before prepared_invocation and are timed. No GPU-mutex wait was recorded in these calls.
    • During the 231-s frame, the other four workers spend 207-229 s each in memory_wait. During the 451-s frame they are mostly idle (0.3-25 s in packets).
    • The GPU is close to idle: 1.6 s of batches in the first frame, 0.7 s in the second.
      Timing marks around insertDispatch, computePipeline() and the pre-sync would show which one it is.
  • GPU memory in use (nvidia-smi, whole card, 0.86 GiB before the title starts):
    • it climbs from 3.2-3.4 to 5.0-5.2 GiB in the first ~4 minutes of the stall, then stays flat until the stall ends;
    • within about 60 s after the stall it is at 7.3-8.3 GiB (sampled every 30 s), and then the allocation fails;
    • without the heap, the same boot peaks at 8.4-8.5 GiB of the card's 10 GiB in the menu.
  • Lines that appear only with APS5_GPU_HEAP=1:
    • [pipeline-journal] replay failed: … a GPU-mode compute stage needs the heap's set layouts, 8 in each of the three runs that started from the heap warm-up's journal (none in the warm-up itself);
    • 32 … has no artifact prepared at registration for the state of this draw or dispatch; preparing it at use per run, all for vertex (12) and pixel (20) stages.
      So the journal prewarm doesn't rebuild those GPU-mode compute pipelines, and they are built at first dispatch in computePipeline(), which has no timer. The trace can't tell whether the long dispatch calls are those builds.
  • APS5_VERIFY_GPU_HEAP=1, until the abort: four [heap-slots] verify lines with cumulative counts of 3, 3, 6 and 6 image slots checked, 0 holding another texture. The line prints only while the cumulative count is below 8, so later checks, if any, aren't shown. No [gpu-heap] line was printed before the abort.

Cold boot with an empty shader cache and no pipeline journal, switches off:

  • Title screen after about 26 minutes, with a ~12-minute stall in the boot.
  • Its 70:10 trace window fell inside that stall and shows the same pattern as the heap trace: queue worker 0 in 11 dispatch calls of 6.5-119 s (446 s of the 495-s window), at most 0.27 s timed in each, the untimed rest again between materialize and Vulkan.Dispatch, and 0.7 s of GPU batches.
  • Warm runs without the heap (journal loaded) stall at most about 2 minutes in the boot, including the two draw-pipeline runs that translated every shader.
  • My scripted presses were in the wrong format in that run, so it stopped at the title.

I can rerun with the current head, or with timing marks if you add them.

AI-assisted: yes (Claude Code)

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

Tested fab8dc6 on Linux, RTX 5080 (driver 615.78.08), Ryzen 7 7800X3D, stacked as in the body on main 2fab88d, all runs with APS5_PIPELINED_DRAWS=32 APS5_PIPELINE_DISPATCH=1 APS5_DRAW_PIPELINE=1.

Hades II (PPSA36082) crashes on a first boot with an empty shader cache when APS5_GPU_HEAP=1 is set: SIGSEGV at 17 to 30 s in 4 of 4 runs, before the title screen. The core shows the title calling memcpy with a NULL destination (corrected, see my later comment). The same lib set with the heap off reaches the first area of a new game at 340 s (2 of 2), as do the base and 6946 (2 of 2 each). Warm, the heap runs reach gameplay (3 of 3).

Warm numbers, frames in 10 s, two traces each:

6946 6947 with the heap
Astro's Playroom (PPSA01325), first level 138, 135 84, 83
Hades II, first area 1122, 1054 1192, 1194

Captures match and the earlier Playroom flicker is gone (burst of consecutive frames). APS5_VERIFY_GPU_HEAP=1 in Playroom: up to 9,200,002 image slots checked, 0 hold another texture; Hades II: 8 GPU-loaded constant words, 0 differing. Playroom cold-boots into the level. The PR's tests pass on the RTX 5080, a Radeon 610M (RADV) and lavapipe.

EagleBearerYS added a commit to EagleBearerYS/AnyPS5 that referenced this pull request Oct 17, 2026
…its render pass

recordDraw passed every address-based draw to the pass hazard tracker as
both an unknown reader and an unknown writer of guest memory. An unknown
writer conflicts with any earlier access in the pass, so no address-based
draw ever continued the previous draw's pass: each one ended the pass and
began a new one, which loads and stores the attachments again. At Resident
Evil Village's menu about half of all draws are address-based, and about
590 render passes begin for about 850 draws per frame.

A build whose programs only read through the BDA table now reports unknown
reads only. The tracker already orders unknown reads behind any recorded
range write in the pass and keeps later range writes behind them, so such
a draw continues a pass whose earlier draws wrote no guest ranges. Builds
with stores through the table, copied writes, or an address lease without
a table keep both flags. APS5_NO_ADDRESS_READ_PASSES=1 restores the old
behaviour.

Render targets reach guest memory only by explicit write-backs, so a read
through the table sees the same bytes whether or not the pass breaks.

Raghav314's boykopovar#6947 makes the same change inside its GPU descriptor heap,
with the read-only fact from boykopovar#6946's recompiler field; this one keeps it in
the driver, without a shader cache format change. The idea also comes from
fable-void's 5d57298 (wip/new-gpu-path), which orders address-based
builds by their known access ranges; this takes the read-only half without
his run-time pre-pass bounds.
@EagleBearerYS

Copy link
Copy Markdown
Contributor

@Raghav314, a question before we build on this. We'd like to add run-time image tables on top of your heap. A T# that a shader loads from a table, at a key it computes, would be looked up on the GPU in a device-side key table: the T# words, an image interface id and a sampler class give the heap slot and view mode. A miss ring is drained after each batch. That replaces the CPU snapshotting and resolving every table record per draw.

Resident Evil Village (PPSA01556) snapshots tables of 32,768 records at its menu, about 8 ms each. Its menu's draws are all indirect, which heapCandidate leaves on the per-draw path (!drawParameters.indirect), so for it we'd also want indirect draws' stages to sample through your BindlessHeap set. The key table comes from fable-void's wip/new-gpu-path.

Are image tables, or indirect draws in GPU mode, already on your list? If they are, we'll wait for yours rather than overlap. If not, we'd stack this as a follow-up with Depends on: #6947, crediting you for the heap.

@EagleBearerYS

Copy link
Copy Markdown
Contributor

@Raghav314, Windows notes for this stack, from a Windows build of current main merged with this PR's head fab8dc6 (WinLibs GCC, as the Windows job uses): https://github.com/EagleBearerYS/AnyPS5/actions/runs/39008923574

  1. agc_driver_heap_slots_tests doesn't compile on MinGW:
core/libs/prx/libSceAgcDriver/tests/BindlessHeapSlots.cpp:88:9: error: 'setenv' was not declared in this scope; did you mean 'getenv'?

The other driver tests set variables with _putenv_s under #ifdef _WIN32 and setenv elsewhere, for example addressSpaceTeardownTests in tests/Graphics.cpp.

  1. With that changed, everything builds, and 1423 of 1424 tests pass. The one that fails is the Windows-only prx_thread_local_destructors, which reports "On Windows a thread_local destructor in a module runs after emulated TLS freed the object; keep such objects in HostThreadLocal". It names nine functions in libSceAgcDriver.prx:
  • from ddb3938 here: HeapFragmentKnown and NoteHeapFragment (the heapFragments() map), MaterializeHeapStage (reads, ranges, values and the walk memo), and ShaderResources::writeHeapStage (key, patched);
  • from perf(agc): draw finisher pipeline (APS5_DRAW_PIPELINE) #6946's f8192a6: DrawFinisher::Enqueue and DrawPipeline::Enqueue (reclaim), CachedFragmentOutputs (lastKey, lastOutputs), DecodeVertexStageInfo (table, sharps), and ShaderResources::PrepareDrawBindings (counts).

Those are the only Windows failures the build and the suite show.

@Raghav314

Raghav314 commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor Author

@fma-rc thanks for the runs. I can't reproduce the cold-boot crash here (RTX 4090, 615.78.08): first boots with an empty ANYPS5_SHADER_CACHE_DIR and APS5_GPU_HEAP=1 APS5_DRAW_PIPELINE=1 APS5_PIPELINED_DRAWS=32 APS5_PIPELINE_DISPATCH=1 ran past 90 s without a fault, with and without the heap.

Hades II needs APS5_HOST_IMPORT_MIB=6784 to boot reliably every time, even on main; was that set in the crashing runs? If it was, could you post:

  • the full environment of the crashing run;
  • whether the pipeline journal was also new or empty;
  • the last ~50 lines of the log before the fault;
  • the faulting guest PC and the backtrace from the core (bt in gdb);
  • whether it also crashes with APS5_VERIFY_GPU_HEAP=1.

On Astro's Playroom (138 to 84 with the heap): a 70:10 trace pair (APS5_DRAW_PIPELINE=1, and with the heap added) would show where the time goes. In Minecraft Dungeons II the same kind of slowdown came from vertex stages that read their constants on the GPU; that is fixed at a488793, which your run already had, so Playroom must be a different path.

LLM assistance used.

@EagleBearerYS

Copy link
Copy Markdown
Contributor

@Raghav314, in case they help with the Windows notes above: tested fixes for all nine thread_locals are on EagleBearerYS/AnyPS5 exp/lane-a-tls.

Both move the scratch into HostThreadLocal, the same pattern as ShaderRegistry's PreparedKeyStorage. 8edb13b is the _putenv_s change for the heap slot test. With the three on current main plus this stack, the Windows Build passes 1424 of 1424, prx_thread_local_destructors included: https://github.com/EagleBearerYS/AnyPS5/actions/runs/39010302471. Take them as they are, or fix it your own way.

@Raghav314

Copy link
Copy Markdown
Contributor Author

@EagleBearerYS thanks, I took your three commits as they are: bdeb1ad is on #6946 (d63a804) and all three are on this PR (27d2b5e). On Linux the agc_* and shader_* scope passes the same way as before on both.

Image tables and indirect draws in GPU mode are not on my list, so go ahead with them as a follow-up with Depends on: #6947. One thing to plan around: the heap's slot handling may still change here, since an eviction or a per-draw fallback for a full heap was asked for in review.

LLM assistance used.

@EagleBearerYS

Copy link
Copy Markdown
Contributor

Thanks! We'll do image tables and indirect draws in GPU mode as a follow-up with Depends on: #6947, and plan around the slot handling changing.

@Raghav314

Copy link
Copy Markdown
Contributor Author

@Amoenus thanks for checking. I don't see an ordering constraint from this side. The PrepareDrawBindings change here is a read-only lookup: in-place reads are now found by searching the address space's sorted regions (GuestBufferMemory::ReadsInPlace) instead of scanning a copied list, with no waits or submits. A guest buffer that a recorded write is still pending on is skipped, not waited for.

The early return (usesBda && !spaceReuse) came with this PR's space reuse (on main it is usesBda), and the later commits don't change it. With APS5_GPU_HEAP=1, every read-only BDA draw whose resources reuse an address space continues past that return and snapshots its guest buffers, whether its resources were just built or came from the cache. That's the combined heap and space-reuse path you haven't tested. With your synchronizeGuestBuffers(moved) before the early return, those snapshots are taken after the sync.

LLM assistance used.

@fma-rc

fma-rc commented Oct 17, 2026

Copy link
Copy Markdown
Contributor

@Raghav314 APS5_HOST_IMPORT_MIB was not set in those runs. I repeated them on 27d2b5e with APS5_HOST_IMPORT_MIB=6784 APS5_PIPELINED_DRAWS=32 APS5_PIPELINE_DISPATCH=1 APS5_DRAW_PIPELINE=1, GAME_BACKGROUND=1, ANYPS5_PRESENT_MODE=immediate, the shader cache directory emptied before each run (journal included, 0 files). With APS5_GPU_HEAP=1 Hades II segfaults at 16 to 17.5 s in 2 of 2, and at 21 s with APS5_VERIFY_GPU_HEAP=1 added (verify reports 2 image slots, 0 holding another texture, and 8 constant words, 0 differing). The same lib set without the heap reaches the first area at 340 s.

I have to correct my earlier description of the core. The title does not call an unmapped address: at eboot+0x28fba9 it calls an imported memcpy with destination 0x0, source in its own image and size 0x4000, and the fault address is 0x0. The destination comes from a pointer the title keeps on its stack. The last lines before the fault are the opens of Content/Packages/1080p/GUI.pkg and a 1920x1080 storage image view; without the heap the same lines are followed by the rest of the package loading.

Playroom 70:10 traces on the same lib set, same scene in the captures (one no-heap run whose window landed at 420 s in another scene is left out). Per frame, from trace_digest.py:

no heap (3 runs) heap (2 runs)
frames in 10 s 222, 236, 202 189, 157
queue 0 busy, ms 30.3, 30.4, 35.1 38.2, 44.8
GPU batches, ms 25.0, 26.1, 29.7 35.1, 43.6
Driver.Draw.prepare, ms 16.5, 14.6, 17.1 22.0, 28.6

So both the recording on queue 0 and the GPU time per frame grow with the heap. I can attach the traces if they help.

@blawesom

Copy link
Copy Markdown
Contributor

Rebase handoff — rebased onto current main (all 17 commits, authorship unchanged). Conflicts resolved:

  • docs/user/USAGE.md: your Draw-pipeline section sits alongside main's newer Texture-cache-budget section
  • RuntimeAbi.hpp: main raised SamplerHeapCapacity to 64 after your branch point — the merged tree keeps 64 (your GPU-mode constants are unaffected by it); your Version bump to 13 and the GPU heap constants are kept

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/6947
git checkout <your branch>
git merge --ff-only FETCH_HEAD

Head is 1c2c8453e.

Raghav314 and others added 25 commits October 19, 2026 01:12
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…+ builds

ResultKeyMemo declared std::atomic<std::shared_ptr<...>>. libc++ has no
atomic<shared_ptr> specialization, so with Apple clang the recompiler
headers stop at std::atomic's trivially-copyable static assertion
(request_serializer_tests in the macOS relinker build). The memo now uses
AtomicSharedPtr from libc, which is that specialization where the library
provides it and a locked shared_ptr with the same load and store otherwise.
The header joins the shader disk cache key's sources, and
request_serializer_tests gets core/libs on its include path.
…nts for vertex stages

A stage compiled with gpuResolvedImages names its images and samplers by
heap slot through its metadata instead of per-draw descriptors. A vertex
stage compiled with gpuConstants reads its SRT constants through a BDA range
cache on the GPU. The prepared invocation can be built from a moved request and
the extension key words are kept per thread. Disk cache format 39.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Eligible fragment, vertex and compute stages bind one global image and
sampler heap and a ring of per-draw data instead of per-draw descriptor
sets; slots the CPU does not know are resolved by a compute pass before the
batch. Vertex stages of heap draws read GPU constants, address-based draws
with read-only BDA reuse their address space within an epoch, and the
pipeline journal describes the heap layouts. APS5_VERIFY_GPU_HEAP checks
slots, rebuilds 1 in N heap stages on the CPU path and compares GPU-read
constants.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t are address-based anyway

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…U stays off the heap

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The GPU heap of upstream PR 6947 (Raghav314, ddb3938) added
thread_local objects with destructors to libSceAgcDriver.prx: the heap
fragment memo, MaterializeHeapStage's reads, ranges, values and walk
memo, and writeHeapStage's key and patched words. On Windows their
destructors run after emulated TLS has freed them, which
prx_thread_local_destructors reports. They now live in HostThreadLocal.
agc_driver_heap_slots_tests calls setenv, which MinGW does not declare, so
the Windows build stopped at BindlessHeapSlots.cpp. It now sets
APS5_HEAP_SLOT_CAP the way the other driver tests set variables:
_putenv_s on Windows, setenv elsewhere.
A heap stage's template was keyed by its full descriptors, so a draw whose
constant buffer or texture moved built a new template and a new set of
resources. The template is now keyed by the descriptors' shape (as the
binding plan is), and each draw carries its own descriptor words for the
bindings that differ from the template's. Vertex stages and ring entries
carry them too. A draw whose words equal the template's carries none and
skips Populate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A misaligned guest buffer of a heap stage was staged. It is now bound in
place, with its offset patched into the stage's shader data, as on the
per-draw path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Only fragment and vertex stages are built in GPU mode. Compute targets,
pipeline layouts and dispatch recording are back to what main has, and the
heap's set layouts and counters are vertex and fragment only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every draw whose descriptors differed from its template copied the whole
stage result to swap in its words, on the finisher thread. Readers now take
a draw's descriptor words and vertex attributes through one accessor, so no
result is copied. The heap content key also covers the samplers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A heap stage's variant was prepared at its first draw, so a cold boot linked
and compiled pipelines on the committer thread. The stall let a game's
staging allocator run dry, and Hades II crashed at boot. Heap variants are
now prepared at registration and their pipeline libraries prebuilt first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A heap stage's per-draw user data and flattened SRT were applied only where
the stage data is written to the heap. Every other reader of the shader data
and SRT bindings (data hashing, the unchanged-data check, validation) saw the
template draw's words. The per-draw words now carry both bindings whenever
they differ from the template's, also on a ring vertex hit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
APS5_VERIFY_GPU_HEAP now also checks, on sampled draws, that every binding
read through the per-draw accessor equals the patched stage result, and
reports each mismatch as it happens. With APS5_VERIFY_DRAW_ENTRIES or
APS5_VERIFY_DRAW_DATA_HITS, a ring vertex hit's reused words are compared
with a fresh build. A direct heap stage whose full capture could not read
every descriptor is counted as not comparable instead of as differing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The range cache was turned on for every stage whenever APS5_GPU_HEAP is
set, but compute stages are not on the heap anymore. In Astro's Playroom
it made three compute shaders slower (one went from 1.7 ms to 4.0 ms a
frame), which was the whole GPU gap between heap on and heap off.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A heap stage takes its image and sampler slots on the committer, after
the draw already chose GPU-mode stages, so a full heap aborted the title
("the global image heap is full"). When taking a new slot leaves fewer
than 1024 image slots of a kind (64 samplers) free after a sweep, the
heap is refused for the rest of the run: new draws build per-draw stages
and lookups skip GPU-mode variants, while the draws already queued use
the margin. The worker only reads one flag.

Tested with APS5_HEAP_SLOT_CAP=1 (new heap draw sample tests, plain and
pipelined) and in Astro's Playroom with APS5_HEAP_SLOT_CAP=256.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s words

The image table, sampler table and table map of a stage were bound and
checked from the program's bindings, so a heap stage would use its
template's table words. Today a stage with tables keys its heap template
on all of its descriptors, so the template's words are the draw's own,
but nothing kept it that way. They now come from DrawGuestWords, like
the other bindings, also in the table reuse check and in revalidation.

A ring vertex hit reuses the inserting draw's template across draws whose
user words differ, so a vertex stage with tables is no longer kept as a
ring variant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The heap keeps a reference to every texture it has placed, and the
sampled texture cache keeps an entry whose texture has any other holder.
So with APS5_GPU_HEAP=1 the cache passed over every heap texture until it
was a quarter over budget, and the textures it then dropped stayed alive
until the heap swept, which happened only every 1024 new slots. A title
that peaks near the card's memory without the heap ran out of device
memory with it.

A texture now counts its heap slots. The cache does not count them as
holders, and dropping such a texture marks a heap sweep due, which the
next present runs. The sweep frees a slot when the heap's slots are the
texture's only holders, so a texture in two slots is freed in one sweep.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…free up

The committer swept every heap slot on every 1024th new slot. It now only
marks a sweep due there, and the next present runs it, together with a
sampler sweep. The sweep a full kind needs to place a texture stays on
the committer.

A refused heap is taken again when a sweep leaves twice the margin free
in every image kind and in the sampler heap, so a title that fills the
heap once, for example while loading, gets it back.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ShaderResources::BindHeap bound the heap (set 1) and the data set (set 2,
with its four dynamic offsets) in one vkCmdBindDescriptorSets call.
Lavapipe's handle_descriptor_sets hands a call's remaining dynamic offsets
to apply_dynamic_offsets for every set in the call, which makes a new set
(lvp_descriptor_set_create zeroes it) and copies the old one into it, so
the whole heap set was zeroed and copied on every bind.

The heap set is now bound alone with no dynamic offsets, and the data set
with its four offsets in a second call on the same pipeline layout, so the
heap set stays bound. On lavapipe a loop of 2,000 GPU-mode direct draws
went from 8,944 to 958 us per draw. Drivers that do not copy sets for
dynamic offsets see the same bindings as before.
…es_back on Windows

The comes-back mode of agc_driver_heap_slots_tests, registered in
f2a7557, had no Windows PATH entry, unlike the executable's own
registration in the agc test list. On Windows it exited 0xc0000135
(a DLL not found) before running.
@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 18, 2026
EagleBearerYS added a commit to EagleBearerYS/AnyPS5 that referenced this pull request Oct 18, 2026
@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Oct 18, 2026
RINNECODER added a commit to RINNECODER/AnyPS5 that referenced this pull request Oct 18, 2026
…, and argument-validation parity (#564)

* feat(libc): implement ilogb and ilogbf

(cherry picked from commit 0edfefa)

* feat(libc): implement clearerr_unlocked, fileno_unlocked and fgetln

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 22c584a)

* feat(libc): implement bounded error message APIs

(cherry picked from commit 14acf7f)

* fix(libkernel): answer F_GETLK with F_UNLCK on Linux and macOS

fcntl threw for F_GETLK with an F_UNLCK request on the hosts that use POSIX locks, as Linux's F_GETLK rejects that type. FreeBSD 11.4's kern_fcntl accepts it and lf_getlock reports the first overlapping lock that lf_blocks lets conflict: another owner's lock, one of the two being a write lock. For an F_UNLCK request that is exactly another owner's write lock, the same set an F_RDLCK request finds, so the host is asked with F_RDLCK and the reply is written back as for the other types.

(cherry picked from commit 41ec785)

* test(libkernel): cover F_GETLK against another process's record locks

The fcntl tests only ever held locks in the guest's own process, where FreeBSD's lf_blocks never reports a conflict, so the host lock path that answers F_GETLK was not exercised. A forked process now holds a read lock, a write lock and a write lock to the end of the file through the host. F_GETLK with F_UNLCK reports only the write locks, F_RDLCK the same and F_WRLCK the read lock, each with the owner's pid and SEEK_SET; F_SETLK over the read lock fails with EAGAIN, and nothing is reported once the owner exits.

(cherry picked from commit 9ece094)

* fix(libkernel): measure the host stack reserve from the frame address

MeasureStackReserve took the distance from the stack top to a local
variable. In an ANYPS5_ENABLE_ASAN build that local lives on
AddressSanitizer's fake stack (detect_stack_use_after_return is on by
default on Linux), away from the thread's stack, so the reserve could
come out negative. scePthreadCreate then asked the guest arena for a
stack of nearly 2^64 bytes and threw 'guest address space arena
exhausted'. The frame address is on the real stack in every build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit e88b7de)

* fix(libkernel): leave a blocked SIGALRM expiry pending

An ITIMER_REAL or alarm expiry while SIGALRM is blocked is marked on the
pending set of sigtimedwait instead of throwing, as kern_psignal leaves a
blocked signal pending. sigwait, sigwaitinfo and sigtimedwait take it,
repeated expiries merge into one pending signal, and unblocking it runs a
guest handler on the unblocking thread or, with the default disposition,
exits the process with status 142 as FreeBSD's default action does.

The expiry rechecks the mask after marking the signal, so an unblock that
races it does not leave SIGALRM pending while unblocked, and TakePending
clears the bit with the value it read so one signal is taken once.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 1bc029d)

* fix(libkernel): accept an uninitialized attribute in scePthreadCondInit

scePthreadCondInit, and pthread_cond_init through it, threw when attr
pointed to a null attribute: a zeroed one that was never initialized or
one that scePthreadCondattrDestroy has set to null. FreeBSD 11.4 libthr
(thr_cond.c, cond_init) takes a null attribute as the default one and
creates a CLOCK_REALTIME condition variable. A PS5 (firmware 13.60)
takes a zeroed attribute as the default one in scePthreadMutexInit
(boykopovar#4158). Take it as the default here too, as scePthreadMutexInit and
scePthreadCreate already do.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 111d817)

* fix(libkernel): treat a null deadline as an untimed lock in the timed pthread locks

pthread_rwlock_timedrdlock, pthread_rwlock_timedwrlock and
pthread_mutex_timedlock threw for a null abstime. FreeBSD's libthr
passes a null abstime on to the untimed kernel lock, so these calls
then wait like pthread_rwlock_rdlock, pthread_rwlock_wrlock and
pthread_mutex_lock.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 676ee71)

* fix(libkernel): return EINVAL/EFAULT from getrusage instead of throwing

FreeBSD's getrusage rejects an unknown `who` with EINVAL before it
copies anything out and returns EFAULT when the result can't be
written. The HLE threw std::invalid_argument for both, which ends the
title.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 01c8ceb)

* fix(libkernel): return EFAULT from sceKernelRead/sceKernelWrite for a null buffer

read and write already fail with EFAULT for a null buffer and a
non-zero length and treat a zero-length null buffer as empty. The
sceKernel entry points threw std::invalid_argument for both. They now
do the same as read and write.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit b437dc5)

* fix(libkernel): return EINVAL from the scePthreadAttr stack and guard size calls

scePthreadAttrGetstack, Getstackaddr, Getguardsize, Setguardsize,
Setstack and Setstackaddr threw for a null attribute, a null pointer
argument or a stack below the 16 KiB minimum. FreeBSD's libthr returns
EINVAL for those, as the pthread_attr_* wrappers here and the other
scePthreadAttr calls already do.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 19b236a)

* fix(libkernel): return EINVAL from read and write for a byte count above SSIZE_MAX

FreeBSD's read, write, pread and pwrite reject a byte count above
IOSIZE_MAX with EINVAL before they look up the descriptor. write threw
std::invalid_argument for a negative count, and the others passed the
count on to the host, which reports EFAULT on Linux.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 28acd09)

* fix(libkernel): return ENOTSUP from pthread_attr_setschedparam and setschedpolicy like libthr

FreeBSD's libthr rejects a null sched_param and, under SCHED_FIFO or
SCHED_RR, a priority outside sched_get_priority_min..max with ENOTSUP,
and a policy outside SCHED_FIFO..SCHED_RR with ENOTSUP. The wrappers
returned EINVAL for the null parameter and stored any priority or
policy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit b693ef2)

* fix(libkernel): return 0 from sceKernelMprotect and sceKernelMtypeprotect for a zero length

mprotect already returns 0 for a zero length. The sceKernel entry
points passed it to DoMprotect, which throws for an empty range.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit cbf006c)

* fix(libkernel): return EFAULT from sceKernelWriteThrottlingStatus for a null status

(cherry picked from commit a295b77)

* fix(libkernel): return EFAULT from clock_gettime for a null result pointer

clock_gettime threw invalid_argument when the result pointer was null,
before looking at the clock id. FreeBSD 11.4's sys_clock_gettime reads the
clock through kern_clock_gettime, which fails with EINVAL for an unknown
clock, and only then copies the result out, so a null pointer fails with
EFAULT.

Read the clock into a local value first, then fail with -1 and EFAULT when
the pointer is null. A clock that is not supported still throws before the
pointer is looked at. Test the null pointer for the supported clocks.

Written with AI assistance (Claude).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
(cherry picked from commit c17c6a5)

* fix(libkernel): take NOTE_LOWAT on socket read and write events

kevent threw for NOTE_LOWAT. On a socket's EVFILT_READ it now sets the
low-water mark as FreeBSD 11's filt_soread does: the event fires once the
buffered bytes reach it, or at end of file or on a listening socket, and
a later change of the knote replaces it. EVFILT_WRITE takes a mark of 1,
where the host's writability stands in for a free byte; other write marks
and marks below 1 still throw. A pipe ignores the mark, as filt_piperead
does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit e1d4ccb)

* fix(libkernel): reject connects on listening sockets first

(cherry picked from commit 00ca965)

* fix(libkernel): reject PTHREAD_PROCESS_SHARED in pshared setters as the PS5 does

On a PS5 (firmware 12.70), of the values 0, 1, 2 and -1,
pthread_spin_init, pthread_barrierattr_setpshared and
pthread_mutexattr_setpshared accept only PTHREAD_PROCESS_PRIVATE (0);
1, 2 and -1 return EINVAL and leave the attribute unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit db504f6)

* fix(relinker): decode near branches with an operand-size prefix as AMD does

66 E8, 66 E9 and 66 0F 80-8F without REX.W take a 16-bit displacement on
AMD processors, the console included. Every near relative branch with that
prefix truncates its target to 16 bits, so the decoder reports no branch
target for it and stubs refuse to move it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016TFMtUC4L4wMS4eeEqaNSR
(cherry picked from commit 206aaa5)

* fix(relinker): keep the Windows TLS rewrite from moving truncated branches

A short TLS access followed by a near branch with an operand-size prefix
decided the branch was relative from its flow kind and opcode alone, then
re-encoded it to the fall-through address or wrote its rel32 over the prefix
and opcode. Such a branch now counts as one that cannot move.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016TFMtUC4L4wMS4eeEqaNSR
(cherry picked from commit aed1ffb)

* fix(relinker): move a neighbour without an FS or GS prefix with a 256-bit store first

A 256-bit store is 4 bytes, so its stub window takes a neighbouring
instruction to make room for the jump. The window took the following
instruction first even when it was a guest TLS access (an FS or GS prefix).
The macOS writer cannot rewrite a TLS access inside a stub and refuses the
module with "AMD-only instruction is also a guest TLS access".

The window now tries the following and the preceding instruction without a
segment prefix first, and falls back to the old order only when neither
works, so outputs that can keep the access in the stub do not change.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
(cherry picked from commit 513b2e1)

* test(relinker): keep an FS or GS access out of the window of a 256-bit store

Covers a thread-pointer read (FS and GS form) after the store with a movable
instruction before it, and the fallback to the following access when there is
no other neighbour.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
(cherry picked from commit cf9e5a2)

* feat(libSceJobManager): implement compute sequences and compute dispatches

(cherry picked from commit 051a610)

* feat(agc): count the render passes recorded draws begin and continue

DrawPassTotals returns, since the process started, how many recorded
draws began a render pass of their own or continued the previous draw's,
and how many flushed the queued DCC key stores or label stores before
themselves, for address-based draws and for the others. A draw is
address-based when its resources hold the allocation registry lease,
whether they were built for it or found in the draw cache.

The totals are kept with the [draws] line's (APS5_PROFILE_DRAW), so a
test or a harness can tell whether an address-based draw kept the open
pass without reading the 10-second report.

(cherry picked from commit 2d4512e)

* perf(agc): let a draw that only reads through the BDA table continue its render pass

recordDraw passed every address-based draw to the pass hazard tracker as
both an unknown reader and an unknown writer of guest memory. An unknown
writer conflicts with any earlier access in the pass, so no address-based
draw ever continued the previous draw's pass: each one ended the pass and
began a new one, which loads and stores the attachments again. At Resident
Evil Village's menu about half of all draws are address-based, and about
590 render passes begin for about 850 draws per frame.

A build whose programs only read through the BDA table now reports unknown
reads only. The tracker already orders unknown reads behind any recorded
range write in the pass and keeps later range writes behind them, so such
a draw continues a pass whose earlier draws wrote no guest ranges. Builds
with stores through the table, copied writes, or an address lease without
a table keep both flags. APS5_NO_ADDRESS_READ_PASSES=1 restores the old
behaviour.

Render targets reach guest memory only by explicit write-backs, so a read
through the table sees the same bytes whether or not the pass breaks.

Raghav314's boykopovar#6947 makes the same change inside its GPU descriptor heap,
with the read-only fact from boykopovar#6946's recompiler field; this one keeps it in
the driver, without a shader cache format change. The idea also comes from
fable-void's 5d57298 (wip/new-gpu-path), which orders address-based
builds by their known access ranges; this takes the read-only half without
his run-time pre-pass bounds.

(cherry picked from commit a939efe)

* test(agc): check that draws reading through the BDA table share a render pass

agc_driver_address_passes draws a triangle twice onto a guest block, with pixel shaders that global_load_dword or global_store_dword through s[2:3], and reads DrawPassTotals for the address-based draws:
- --readers: two draws reading through the table share one render pass;
- --store-after-read: a draw storing through the table after one reading through it begins its own pass;
- --read-sees-store: a draw reading through the table what the previous draw stored sees the store, in a pass of its own.

Taken from c44c9a6 (perf/agc-bounded-address-passes) without its --store-beside-reads case, which needs that commit's store bounds.

(cherry picked from commit b3e94a5)

* fix(agc): let the storage image cache budget follow the heap's use like the sampled one

StorageTextureBudget gave the storage image cache a quarter of the VK_EXT_memory_budget
budget of the largest device-local heap (capped at TextureCacheBudget, never below 512 MiB)
whatever else the heap held, while SampledTextureBudget takes what that budget leaves after
the heap's other use. On a 10 GB card the storage cache kept 2024-2170 MiB into a level load
whose depth and render target allocations then failed with VK_ERROR_OUT_OF_DEVICE_MEMORY
with the heap at its reported budget where a run logged it.

The storage image budget is now what the reported budget leaves after the heap's use other
than the cached storage images, the unused part of the sampled textures' 2 GiB floor and an
eighth of the budget; the caps at a quarter of the budget and at TextureCacheBudget and the
512 MiB floor stay. The sampled budget still reserves TextureCacheBudget for the storage
cache, at least the storage cap, and the storage budget reserves the sampled textures alive,
so neither counts bytes the other may take; while the sampled textures alive stay within
their floor the sampled budget falls first, then the storage budget, and above it both fall
together. The budget line also prints when the storage image budget moves by more than a
tenth, with its previous value, and StorageTextureCacheBudget is exported for the execution
test.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 39c2366)

* fix(agc): decode COLOR_8_8 UINT as R8G8_UINT

(cherry picked from commit bb39eba)

* perf(agc): release settle-retired imports after the overlap block of a pin wait

The Windows release of imports retired during a settle read belongs after the whole
overlapsImport block in the not-holding-the-lock branch of WaitForLeasesAndImports, as in
the original change, not inside it. It was placed inside while main was merged in.

(cherry picked from commit fd301c7)

* fix(recompiler): drop a sample-adjust S# dword 3 that sets only reserved bits

An image_sample_*_a sampler whose dword 3 is built only from values
inside the reserved bits 12-29 was refused with "GetSamplerResource
dword 3 is not a valid runtime value" when the value was not an OR at the
top. The reserved bits of a sample-adjust S# are already dropped term by
term from an OR (canonicalizeSampleAdjustDword3); a dword 3 whose
possible bits all lie in that mask, such as a shifted field with nothing
else, is now dropped whole the same way. PPSA01317 builds such a dword 3
from a wave ballot shifted to bit 12 for image_sample_a in a pixel
shader. A plain image_sample with the same S# is still refused.

AI-assisted: yes
(cherry picked from commit 6e5d708)

* perf(shader): fold a select nested in a select on the same condition

select(c, a, select(c, b, d)) is select(c, a, d), and
select(c, select(c, a, b), d) is select(c, a, d). The recompiler leaves
these behind when a register is written more than once under the same
lane mask and when the f32 NaN selection tests the same source twice,
and nothing folded them. The constant folder now takes the inner arm
the outer condition already decides, then folds a select whose arms
became equal.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 227d1e4)

* fix(shader): read low-half 16-bit multiply factors as 24-bit fields

On AMD's Windows driver 32.0.21045.5002 (RX 6700 XT), a product of two
values the driver knows fit in 16 bits, reduced to 16 bits and stored
with nothing else merged in, keeps all 32 bits of the product.
v_mul_lo_u16 and v_pk_mul_lo_u16 extracted 16-bit factors, so into a
register whose high half was zero they wrote 0xfffe0001 for
0xffff * 0xffff. A factor taken from the low half of its source is now
read as the low 24 bits of the register; the low 16 bits of the product
depend only on the low 16 bits of the factors.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit ffd468e)

* fix(libkernel): recognize listening sockets on macOS hosts

macOS does not support getsockopt with SO_ACCEPTCONN; it fails with
ENOPROTOOPT. So on macOS the guest's getsockopt of SO_ACCEPTCONN failed,
connect did not see that a stream socket was listening (an address of
another family failed with EAFNOSUPPORT instead of EOPNOTSUPP), and the
read event of a listening socket reported FIONREAD's 0 instead of the
waiting connection and did not ignore its low watermark.

On macOS the listening state is read from the SO_ACCEPTCONN flag of the
socket options that proc_pidfdinfo reports, and the three places that ask
go through NativeListening. Other hosts keep getsockopt.

(cherry picked from commit 6f2a61a)

* fix(libkernel): set the open file limit at load on macOS

getrlimit(RLIMIT_NOFILE) reports the host's limits, and libkernel
raised the soft limit to the hard one at load only on Linux. On macOS
the soft limit stayed below an unlimited hard limit (1048576 and
infinity in a shell here, 256 and infinity by default), so the two
differed. XPSemu (PPSA97358) then raises the soft limit to the hard one
in QEMU's os_setup_limits, and setrlimit refuses the change.

macOS fails with EMFILE at kern.maxfilesperproc (10240 here) whatever
the soft limit, even an unlimited one. At load, libkernel now sets both
limits to the smaller of the hard limit and kern.maxfilesperproc, so
getrlimit reports the descriptor count after which opening fails. The
Linux path still raises the soft limit to the hard one.

(cherry picked from commit 7391082)

* test(libkernel): check the macOS open file limit against EMFILE

guest_getrlimit failed on macOS because the host's soft and hard
RLIMIT_NOFILE differed. On macOS it now also checks that the limit does
not exceed kern.maxfilesperproc, and, as on Windows, that guest pipes
fail with EMFILE within 64 descriptors of the reported limit. The pipe
loop moves into a helper that both use.

(cherry picked from commit 82af3e0)

* fix(libc): keep errno when strtol converts nothing on macOS

macOS's strtoll and strtoull set errno to EINVAL when the subject has
no digits, as in "", "words" or " +". The guest's integer conversions
pass that to the title, while guest_atoi, guest_wide_conversion and
guest_math expect errno unchanged, as glibc leaves it. So atoi("")
returned 0 with errno 22 on macOS, and all three tests failed there.

A ParseInteger helper in SonyCrt.hpp calls the host's conversion and,
on macOS, restores the caller's errno when nothing was converted and
the base is valid. An overflow still sets ERANGE, and an invalid base
still sets EINVAL. strtol, strtoul, strtoll, strtoull, atoi, atol,
atoll, _Stoull and the wcsto* integer conversions in Strings.cpp use
it. On other hosts the helper calls the conversion unchanged.

(cherry picked from commit 839acfd)

* fix(libc): keep errno in strtoimax, strtoumax and _Stoul on macOS

The conversions in RuntimeSupport.cpp call the host's strtoimax,
strtoumax and strtoull directly, so they set EINVAL on macOS for a
subject without digits too. guest_math, once the strtol cases pass,
failed on strtoimax(""). They now go through ParseInteger.

(cherry picked from commit 8469126)

* docs(debt): record the macOS RLIMIT_NOFILE at load in libkernel.md

(cherry picked from commit 720ab86)

* fix(agc): drop committed conflict markers in DepthSurface.cpp

An earlier sync left an empty-vs-theirs conflict block in the file; keep
the storage view members it carried, which later code calls.

---------

Co-authored-by: BIGFERRY999 <bigferry24@gmail.com>
Co-authored-by: T3cm0 <srodriguez7604@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: lorkydey <57268822+Lorkydey@users.noreply.github.com>
Co-authored-by: Alexej Szpevák <szpevakalexej@gmail.com>
Co-authored-by: milescoviello <kitslayer29@gmail.com>
Co-authored-by: LaunchDoesntCode <launchogu@protonmail.com>
Co-authored-by: Lindamea1 <322051987+Lindamea1@users.noreply.github.com>
Co-authored-by: pushkarreddyy <212133856+pushkarreddyy@users.noreply.github.com>
Co-authored-by: mattogepeto <mattogepeto@gmail.com>
Co-authored-by: MarcZX100 <MarcZX100@users.noreply.github.com>
Co-authored-by: ionut27001 <194206737+ionut27001@users.noreply.github.com>
Co-authored-by: oskarlgs <oskarlgs@gmail.com>
Co-authored-by: Morten Holm <mohoholm@gmail.com>
Co-authored-by: fma-rc <188743521+fma-rc@users.noreply.github.com>
Co-authored-by: Yunus Shaikh <75296019+EagleBearerYS@users.noreply.github.com>
Co-authored-by: Jan Šlégl <slegl.jan@gmail.com>
Co-authored-by: Maz <mazenshaar@hotmail.com>
Co-authored-by: Dean Galvin <dean.galvin@live.com>
Co-authored-by: Gjon Gojcevic <gjonn@hotmail.com>
Co-authored-by: thuanquang <60096168+thuanquang@users.noreply.github.com>
Co-authored-by: mugurc <mceker@gmail.com>
Co-authored-by: David <David.Samir.WD@gmail.com>

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