Commit Graph
3085 Commits
Author SHA1 Message Date
AlxcBTW 5da6de62ad fix(agc): count stage-A drops of a dispatch move as refusals
The [dispmove] line printed refused 0 next to a rebuild count that came mostly from PrepareDispatch dropping the hit. The line now reports the refusals at stage A and at record separately, each with its reasons.
2026-10-17 19:32:05 +02:00
AlxcBTW 350b8d2b88 fix(agc): keep the template of another address when a dispatch move is refused
Read-only addresses are not part of the dispatch key, so the fresh build after a refused
move replaced the template that serves the other address, and the two addresses
rebuilt each other. A refused dispatch now uses or builds an entry under the exact key
(read-only bases included) and leaves the movable template alone. The [dispmove] line
counts the rebuilds after a refusal, the builds inserted beside the template and the
dispatches served by an exact entry. Restores the MarkGpuWrites comment.
2026-10-17 13:52:16 +02:00
AlxcBTW a58a709116 fix(agc): compare moved dispatch buffers at their build-time clamped size
A read-only V# the build clamps (size above the descriptor range limit cut to the
mapped end, stride overhang cut to the allocation end) was compared with the template
by its raw size, so an unchanged buffer counted as moved, was refused over the limit
and the dispatch rebuilt every time; a moved one with an overhang was snapshotted past
the allocation end. The build and the move proof now take the range from one function
(ShaderResources::guestBufferBytes), compare clamped with clamped and snapshot the
clamped range.

An overlay without a descriptor set is refused like one that could not be made, and
recording one throws instead of binding the template's set.
2026-10-17 11:23:47 +02:00
AlxcBTW 89d255c5f3 perf(agc): serve compute dispatches whose read-only buffers moved from the cached template
The content key of a compute stage leaves the base address and size of its
read-only guest buffers out, as a draw's key does. A template hit whose such
buffers moved is proved the way a draw's is (ShaderResources::MovedDispatchBuffers:
read-only, read in place when built, in reach, nothing pending over the new range)
and binds snapshots of the new ranges in a descriptor set of its own, kept with the
batch that records the dispatch. A refused proof builds the dispatch fresh, as
before. APS5_NO_DISPATCH_MOVE=1 turns the path off, APS5_DISPMOVE_MAX_KIB caps the
bytes snapshotted per dispatch.

A template whose storage image lies over memory that a depth surface covers is no
longer proved from stamps (fastRevalidate): cachedStorageTexture answers such a
binding with the plane's colour mirror, copied in from the depth image for every use,
and nothing stamps the appearance of a depth surface after the build. The full walk
decides, and a stale image can no longer be copied over the depth image.

Tests: Graphics.cpp (verdicts of the proof), execution DispatchMove (real device:
moved, exact, shortened, stored-over, own-output and written-range refusals) and
DispatchMoveDepth (a depth surface appearing over a template's plain storage image,
planes inside and outside the write watch, imports watched and unwatched).
2026-10-17 09:08:47 +02:00
Dean f8b22edfb7 Merge pull request #6988 from MarcZX100/codex/stabilize-preparation-scope-settle-6984
test(agc): wait for preparation workers before linking
2026-10-17 19:51:49 +13:00
Dean 6a32550fd1 Merge pull request #6699 from MarcZX100/codex/sampler-heap-32-6692
fix(shader): support 32 logical samplers in runtime heap
2026-10-17 18:45:02 +13:00
Dean 2bfe0045d8 Merge pull request #5940 from zmeizy/claude/pknorm-f16-denormal-inputs
fix(shader): flush v_cvt_pknorm_*_f16 denormal inputs by FLOAT_MODE
2026-10-17 18:21:25 +13:00
Dean 52ed3da697 Merge pull request #6744 from Ondra97/codex/fix-store-untracked-lifetime
test(agc): wait for the tested surface's pending image
2026-10-17 17:56:11 +13:00
Adrià 49f5dc1a58 Merge pull request #5979 from alfalfa-star/perf/agc-rect-list-indirect-gpu
perf(agc): draw an indirect rect list from its records on the GPU
2026-10-17 06:53:38 +02:00
Dean 07e7414819 Merge pull request #6261 from EdouardSence/fix/sparse-import-test-budget
test(agc): lift the host import budget in the sparse dma-buf import test
2026-10-17 16:48:16 +13:00
Dean 739eb2eab4 Merge pull request #6993 from thuanquang/fix/gpu-map-on-fiber-thread
test(agc): map GPU memory on fibers with and without a host stack
2026-10-17 16:36:47 +13:00
Dean 2a2724ae75 Merge pull request #6359 from Amoenus/codex/test-untracked-store-pending-owner
test(agc): wait for the actual image in repeated untracked stores
2026-10-17 16:36:25 +13:00
TamaleroandClaude Opus 5.5 97a84e3261 fix(recompiler): hold 32 samplers in the runtime sampler heap
A pixel shader of PPSA16833 binds more than 16 samplers outside the
sampler tables. Each takes two heap entries, one per descriptor variant,
so the 32-entry heap refused it with "shader sampler pairs exceed runtime
heap capacity" and the title aborted when a new game started.

The heap now holds 64 entries (32 samplers). Its metadata array is part
of ShaderData, which grows from 14528 to 16064 bytes, still within the
16 KiB uniform buffer every Vulkan device supports; the runtime ABI
version moves to 13 so shaders cached with the old layout are rebuilt.
The overflow message names the sampler count.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 16:36:17 +13:00
Dean 29bfe31dd8 Merge pull request #6083 from n-delic/pr/sampler-pairs-v2
fix(shader): allow 32 sampler pairs per shader
2026-10-17 16:34:56 +13:00
Dean e847d19793 Merge pull request #6225 from Amoenus/codex/test-recorder-gpu-selection
test(agc): honor GPU selection in recorder fixtures
2026-10-17 16:33:40 +13:00
Dean bfcf02e3a8 Merge pull request #6385 from Neithennn/fix/store-over-untracked-neighbour-wait
test(agc): keep waiting for the neighbour copy case's result
2026-10-17 15:58:07 +13:00
thuanquangandClaude Opus 5.5 d5dbce438a test(agc): map GPU memory on fibers with and without a host stack
Since #6003 a fiber with a context of 64 KiB or more runs on the
context itself, so the 64 KiB fiber of agc_driver_gpu_map_on_fiber
imports its mapping on a host thread on Windows too, and the test's
Windows-only expectation of no thread failed. The test now also maps
on a 16 KiB fiber, which keeps a host stack and imports on it on
Windows, and expects one import thread for the 64 KiB fiber on every
platform.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 09:50:32 +07:00
Adrià c9cabcaf84 Merge pull request #6008 from zmeizy/claude/ldexp-f32-denormal-modes
fix(shader): translate v_ldexp_f32 in f32 denormal modes 1 and 2
2026-10-17 04:14:45 +02:00
MarcZX100 871232eede test(agc): wait for preparation workers before linking 2026-10-17 02:00:23 +00:00
Adrià fd9e577d98 Merge pull request #6007 from zmeizy/claude/cmp-f32-denormal-modes
fix(shader): translate f32 compares in f32 denormal modes 1 and 2
2026-10-17 03:10:56 +02:00
Dean 7fcc15cb42 Merge pull request #6452 from Amoenus/codex/fix-indirect-fixture-alignment-main0c
test(agc): align the indirect arguments block at run time
2026-10-17 13:53:44 +13:00
Adrià b1cb3ed43b Merge pull request #5991 from Get-fix/ps4/videoout-ps4-buffers
feat(libSceVideoOut): register PS4 display buffers
2026-10-17 02:44:59 +02:00
Adrià 85643f75e7 Merge pull request #5997 from Ondra97/codex/fix-storage-evicted-views
fix(agc): release sampled views after storage eviction
2026-10-17 01:56:35 +02:00
Adrià 4a9c1d5cd0 Merge pull request #5982 from milescoviello/fix/depth-surface-later-level
fix(agc): treat a view past a depth surface's first level as memory
2026-10-17 01:15:56 +02:00
Adrià 57f2a59010 Merge pull request #5975 from milescoviello/fix/indirect-vertex-extent
fix(agc): copy an indirect draw's vertex buffer only up to its last element
2026-10-17 00:15:56 +02:00
Adrià 5f06c534a3 Merge pull request #5939 from Amoenus/codex/msaa-dcc-main5a6
feat(agc): import uniform multisampled DCC fast clears
2026-10-17 00:15:40 +02:00
alfalfa-starandClaude Opus 5.5 ac64ea4524 test(agc): require the GPU route for the indirect rect-list draws
agc_driver_rect_list_indirect compared the indirect draws' output with
the direct draws only, so it also passed when the records were read on
the CPU. Its records lived in a static array that is not guest memory,
so every indirect draw fell back to the CPU path as not imported.

The records now sit in a registered 64 KiB guest allocation, the test
turns on APS5_PROFILE_DRAW and reads the indirect-draw counters through
the new Graphics::IndirectDrawCounts, and it requires all four indirect
draws on the GPU path. It fails with APS5_NO_RECT_INDIRECT=1 and with
the IndirectDraw.cpp and Draw.cpp changes reverted (4 non-vertex path).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 23:20:51 +02:00
Adrià 852185a8ac Merge pull request #5959 from fdfawef324/codex/prepared-flow-replay
feat(agc): replay prepared shader capture and materialization offline
2026-10-16 21:54:18 +02:00
Romans Pokrovskis a0c51d5778 feat(agc): import uniform multisampled DCC fast clears 2026-10-16 21:13:39 +02:00
Adrià db7d9de5e4 Merge pull request #5405 from Pipodi/feat/spanned-wave64-compute
feat(recompiler): run single-wave wave64 compute programs at one lane per invocation on 32-lane hosts
2026-10-16 21:05:55 +02:00
Adrià 24528f4e5a Merge pull request #5907 from simonbronk/feat/mixed-sample-truncate
feat(agc): rasterize a multisampled draw into one-sample targets at sample 0's locations
2026-10-16 21:05:45 +02:00
Adrià 5d3263b942 Merge pull request #5964 from MarcZX100/codex/shader-profile-geometry-feature
fix(agc): validate geometry shader capability
2026-10-16 21:05:40 +02:00
Adrià 6fd4de2666 Merge pull request #5937 from milescoviello/fix/db-render-control-copy-sample
fix(agc): accept a copy's sample selection on a draw that copies nothing
2026-10-16 21:05:36 +02:00
Adrià daf8913128 Merge pull request #5905 from hugodearaujo/fix/agc-prewarm-mapped-dma-buf
fix(agc): settle dma-buf imports on Linux on the settle queue
2026-10-16 21:05:30 +02:00
Adrià 57865eb292 Merge pull request #5881 from codingreapermaps/feat/agc-msaa-storage-write
feat(agc): write a multisampled color target through a storage image
2026-10-16 21:05:25 +02:00
Adrià 0936dc910a Merge pull request #5943 from zmeizy/claude/f16-conversion-float-mode
fix(shader): round and flush f16 conversion results by FLOAT_MODE in every denormal mode
2026-10-16 20:39:11 +02:00
Adrià Franch f19050534e fix(agc): disassemble the shared SPIR-V words in agc_shader_replay 2026-10-16 20:34:23 +02:00
fdfawef324andCodex f3fb9df3a0 feat(agc): replay prepared shader capture and materialization offline
Add a CPU replay mode that reaches the runtime descriptor checks and specialization used by prepared shader invocations. Test active and inactive guarded descriptors and continuation after a failed request.

Co-Authored-By: Codex <noreply@openai.com>
2026-10-16 20:34:23 +02:00
Adrià 93e54cedd3 Merge pull request #5950 from mrfelek/test/sparse-dmabuf-skip-large-limit
test(agc): skip the sparse dma-buf import tests when udmabuf size_limit_mb is above 1024
2026-10-16 19:40:40 +02:00
MarcZX100 3dca09e194 fix(agc): validate geometry shader capability 2026-10-16 17:22:42 +00:00
Adrià FranchandClaude 11f83f2d47 test(agc): keep the vertex BDA shader code static
Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-16 18:33:34 +02:00
Adrià FranchandClaude a65d42755b test(agc): bound the cancelled journal replay from its own start
The cancelled replay's bound was taken from the totals before the torn-tail replay, which already
adds one present pipeline; when a worker reached the graphics recipe before the cancel, the test
failed (13 of 600 runs with 24 in parallel).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-16 18:13:46 +02:00
Adrià FranchandClaude 37db6a80b7 fix(agc): bound the async log's exit flush
On Windows the atexit handlers of a DLL run after the process has ended
its other threads, so the logger thread can be gone with lines still
queued and the unbounded Flush waits forever (guest_shader_link timed
out on 4 of the last 7 completed main builds since #6371). Run the bounded
FlushAtEnd there instead.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-16 14:30:15 +02:00
Alex ColliniandClaude Opus 5.5 641e53b5f3 test(agc): run the LDS mask waterfall in both wave modes
The test set neither mode, so ctest ran only the two-lane form. It now
recompiles each program two-lane and then spanned through
SpirvTarget::spannedWaves, checks that the spanned module asks for full
subgroups, and skips the spanned pass on a device without full 32-lane
compute subgroups.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 14:12:58 +02:00
Alex ColliniandClaude Opus 5.5 7a6cc71786 feat(agc): carry spanned waves in the target and require full subgroups
APS5_SPANNED_WAVE is now read once by the driver, which sets
SpirvTarget::spannedWaves only on a device with 32-lane compute subgroup
control and computeFullSubgroups. The recompiler no longer reads the
environment. The field is part of the cache key and of the request
serialization (version 32), so a cached or replayed module keeps the mode
it was built in.

A spanned module numbers its lanes SubgroupId * 32 +
SubgroupLocalInvocationId, which needs two full 32-lane subgroups. The
artifact records this as fullSubgroups (disk cache and pipeline identity
included), and the driver creates those pipelines with
REQUIRE_FULL_SUBGROUPS. Compute pipeline captures accept the flag with a
required subgroup size.

The two-lane fallback now catches only SpannedWaveUnsupported, thrown for
a shuffle wider than 32 bits; other emit errors surface as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 14:12:58 +02:00
Adrià FranchandClaude 6c67548618 test(agc): enable shaderStorageImageMultisample on the recorder test device
Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-16 14:08:45 +02:00
codingreapermapsandClaude Opus 5.5 5c42e97f47 feat(agc): write a multisampled color target through a storage image
A program that stores to a 2D multisampled texture writes the samples of
its host multisampled color target through a storage view. Targets are
created without storage usage; the first storage binding that resolves
to a target moves it to an image with storage usage, copying its samples
once, and keeps the previous image until the target is released. Storage
usage needs the device's shaderStorageImageMultisample feature and its
format at the target's sample count. A surface no draw rendered to is
created from its uniform color memory, as for sampling; other color
memory still throws.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 14:08:35 +02:00
Adrià eb901bcf4e Merge pull request #6784 from milescoviello/fix/journal-mesh-output-size
fix(agc): journal the mesh output primitive size
2026-10-16 14:03:21 +02:00
Adrià 127e5bf826 Merge pull request #5872 from Sam-mon7/perf/lazy-shader-prepare
perf(agc): allow shader preparation on first use
2026-10-16 14:01:24 +02:00
Adrià c8044c3a7a Merge pull request #5914 from fdfawef324/codex/vertex-lane-bounds
fix(shader): fold fixed 32-lane vertex bounds
2026-10-16 13:47:56 +02:00