Commit Graph
6012 Commits
Author SHA1 Message Date
Adrià 0c9c5db748 Merge pull request #12690 from MarcZX10/feat/host-system-report
feat(agc): host system report and an actionable missing-Vulkan-feature message
2026-10-30 02:52:18 +01:00
Adrià e8cfff0a08 Merge pull request #12171 from slopgobblercobbler/fix/agc-draw-pipeline-report-duplicate-format
fix(agc): eliminate duplicated read counters in pipelined draw reports
2026-10-30 02:51:11 +01:00
Dean 99b571f879 Merge pull request #11468 from valenciana-nc/fix/guest-heap-header-validation
fix(libc): validate guest heap block headers before freeing
2026-10-30 14:50:19 +13:00
Adrià 90c9759d12 Merge pull request #10581 from ashwin280802/fix/agc-single-sample-alpha-to-coverage
fix(agc): reject unmeasured single-sample dithered alpha-to-coverage
2026-10-30 02:45:21 +01:00
Adrià d0cf19b2cb Merge pull request #12233 from beardsciences/fix/nvidia-mesh-window-buffer
fix(shader): keep mesh register windows out of local memory on NVIDIA
2026-10-30 02:31:36 +01:00
Adrià 086adee5e3 Merge pull request #12379 from MarcZX10/feat/msgdialog-overlay
feat(overlay): show PS5 system dialogs as real PC dialogs
2026-10-30 02:04:23 +01:00
Adrià db98f92d9a Merge pull request #11740 from thuanquang/perf/t1-rerun-own-alias
perf(agc): accept a refreshed view in the T1 re-run when the lookup would not view the pending alias
2026-10-30 02:01:53 +01:00
Adrià f6fddd60d8 Merge pull request #9243 from fisherjoey/perf/draw-cache-indirect-admission
perf(agc): cache CPU-path indirect draws behind APS5_DRAW_CACHE_INDIRECT
2026-10-30 01:51:25 +01:00
Adrià 401e4babaa Merge pull request #11075 from slopgobblercobbler/fix/agc-pipeline-cache-header-validation
fix(agc): validate pipeline cache header format and empty cache paths
2026-10-30 01:38:51 +01:00
Adrià 673fa865f4 Merge pull request #10140 from frankea/fix/user-data-callee-window
fix(agc): read user-data callees up to the 1 MiB raw shader program limit
2026-10-30 01:25:59 +01:00
Dean 55ef952e4d Merge pull request #10854 from milescoviello/fix/depth-view-chain-past-plane
fix(agc): count pending storage writes over a depth plane as a later writer
2026-10-30 13:20:30 +13:00
Adrià 39fc186c97 Merge pull request #11550 from johandavidcm/feat/agc-revalidate-collect-fails
feat(agc): count why a template's collect was refused
2026-10-30 01:04:12 +01:00
Adrià 7e72b68813 Merge pull request #10651 from maximilianfv/test/agc-image-table-reuse-chain-pool
test(agc): expect no kept image table writes for a set from the shared pool chain
2026-10-30 01:03:02 +01:00
Adrià 2a8274f328 Merge pull request #9738 from mugurc/fix/agc-preparation-lifecycle-exit
fix(agc): keep the shader preparation lifecycle mutex alive through exit
2026-10-30 00:56:51 +01:00
Adrià 83861d9909 Merge pull request #12068 from dantdmdarealguy/fix/relinker-cli-off-test-registrations
fix(build): skip the core/libs relinker CLI tests when ANYPS5_RELINKER_CLI is OFF
2026-10-30 00:28:20 +01:00
Dean 3d1b1c30e8 Merge pull request #12074 from mehmetbayoglu/fix/agc-import-yield-mirrorable-pr
fix(agc): let heap mirrors replace host imports when the import budget is full
2026-10-30 12:20:39 +13:00
Dean 341cf8beee Merge pull request #6498 from Amoenus/codex/fix-msaa-buffer-alias-mainfa
fix(agc): refuse buffer aliases of native MSAA targets
2026-10-30 12:19:53 +13:00
Adrià f46f453a56 Merge pull request #12724 from Gonic0/fix/shader-single-lane-elected-max
fix(shader): give one-lane waves an elected atomic max per lane
2026-10-30 00:18:15 +01:00
Adrià 195b1889a6 Merge pull request #12645 from slopgobblercobbler/fix/agc-resource-registration-and-rendering-wait
fix(agc): validate rendering wait buffer and expand resource registration tests
2026-10-29 23:28:27 +01:00
Adrià ebb4075168 Merge pull request #12164 from slopgobblercobbler/fix/agc-color-target-snorm-mapping
fix(agc): remap B8G8R8A8_SNORM color target format to guest format 57
2026-10-29 23:01:20 +01:00
Adrià 52f212ec05 Merge pull request #12675 from CruddOCE/test/recorder-wait-signaled
test(agc): wait for a batch to read as signaled before the recorder's signaled-batch checks
2026-10-29 22:35:52 +01:00
Adrià 93fcf758f5 Merge pull request #12677 from dantdmdarealguy/test/agc-indirect-draw-count-under-lock
test(agc): count the queued indirect draws while the GPU lock holds the committer
2026-10-29 22:35:45 +01:00
Adrià 5e6c22e772 Merge pull request #12208 from XairRrR/fix/shader-srt-read-below-loaded-pointer
fix(shader): poison an SRT read below a pointer loaded from memory
2026-10-29 21:52:04 +01:00
milescovielloandClaude Opus 5.5 c1db5c5b37 test(agc): a retire that stores depth drawn on the GPU keeps the pending chain over it
XairRrR's review: PendingChainCase draws without depth writes, so its
retire has no unstored depth. The new case draws depth 0.5 that is only
on the GPU, writes level 1 of a two-level chain over the plane, takes the
view (which retires the surface) and flushes the storage write. Level 1
in guest memory must match a run without the depth write, and level 0
must hold the drawn depth.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 20:26:26 +00:00
milescovielloandClaude Opus 5.5 a079dec978 fix(agc): count pending storage writes over a depth plane as a later writer
A sampled view that a live depth surface's plane cannot serve (another
layout, more levels) is left to guest memory when a later write retired
the surface, and refused while the surface is the last writer of its
memory. Only writes the CPU can see counted. A compute pass that writes
storage images over the plane is a later writer too, but its results
stay pending in storage images, so the surface still looked current.
Forspoken (PPSA03984) builds a 5-level R32 float chain over the memory
of its 1920x1080 D32 depth target. When it sampled the whole chain
before those results reached memory, it stopped on "sampling the depth
plane ... levels 0-4 ... is not implemented". A pending storage result
over the plane now retires the surface for such a view, as a CPU write
there does.

PendingChainCase writes level 1 of a two-level R32 float chain over a
plane with a compute dispatch and flushes it, so the chain's storage
image exists, as the title's does from frame to frame. It then draws a
D32 surface there, writes the chain again and leaves the result pending.
A two-level view must then be left to guest memory with the depth
surface retired. On main the view is refused with the title's message.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 20:26:26 +00:00
Dean Galvin 46dfa09c02 Merge main into PR #11468 2026-10-30 09:25:04 +13:00
Adrià 7b736fe669 Merge pull request #12207 from XairRrR/fix/agc-depth-cube-array-planes
fix(agc): sample a cube array over depth surfaces through their depth planes
2026-10-29 21:21:04 +01:00
Adrià dde1b9f21d Merge pull request #12081 from akkadbakkad89/agc-msaa-single-sample-lines
fix(agc): allow MSAA_ENABLE single-sample lines
2026-10-29 21:20:45 +01:00
Adrià b68fff81f2 Merge pull request #11957 from Bram910/perf/shader-region-merge
perf(agc): merge shared shader regions with a heap
2026-10-29 21:20:26 +01:00
Dean bfc5ee4101 Merge pull request #12264 from Tehshortbus/perf/agc-written-buffer-index
perf(agc): find a range's newest writer through a granule index instead of scanning the ring
2026-10-30 09:19:10 +13:00
Adrià c793d2350e Merge pull request #12590 from tablefrogpillow/fix/pipeline-inspect-cmp0054
test(agc): require CMake 3.20 in the pipeline inspection script so CMP0054 is NEW
2026-10-29 21:19:07 +01:00
Adrià ce9394b844 Merge pull request #12566 from chitters2004/fix/agc-capture-host-only-msaa
fix(agc): write host-only multisample memory as zeros in a capture snapshot
2026-10-29 21:19:01 +01:00
Adrià fd9b3f62d4 Merge pull request #12583 from JJenkx/codex/agc-constant-swizzle-coverage-20261028
test(agc): cover cached fragment swizzles and constant selectors
2026-10-29 21:00:59 +01:00
Adrià 1578380f6e Merge pull request #12210 from XairRrR/fix/agc-stencil-plane-buffer-coherence
fix(agc): keep stencil planes coherent with guest memory
2026-10-29 20:35:20 +01:00
Ashwin 4bb5aa9f0e fix(agc): reject unmeasured single-sample dithered alpha-to-coverage 2026-10-29 20:36:02 +05:30
MarcZX10 17ff9177fb fix(agc): read the host CPU model and missing features through the exported helpers
libSceAgcDriver.prx failed to load in the patched library check with an undefined symbol for HostCpuModel, because the host report called libkernel's plain C++ functions, which the patched libkernel does not export to it. The report now calls the extern C helpers and splits the joined feature list back into names.
2026-10-29 14:20:35 +00:00
MarcZX10 f0d5ff528f feat(libSceAgcDriver): draw the system dialog in the presentation
The presentation drew the system keyboard from SystemOverlayView and laid it out
inside its own recording. It now asks SystemOverlayLayout for the system panel
at the swapchain extent, which is already validated by then, and records
whichever of the keyboard and the dialog is set through the same overlay pass
and layout transitions. Presentations with neither set are unchanged.
2026-10-29 14:06:13 +00:00
MarcZX10 bab3301ffd test(libSceAgcDriver): cover the system dialog layout
agc_keyboard_overlay_tests now checks the message wrapping (column limit, long
words, line breaks, surrogate pairs, the dots on an overlong message), the
layout of one to three buttons at four target sizes (inside the screen, centred,
buttons in order and not overlapping, the accent border on the focused button),
a long message and a narrow target, the refusal of zero or four buttons and of
an empty target, and the storage of the dialog with the keyboard taking the
overlay from it.
2026-10-29 14:06:13 +00:00
MarcZX10 8210c987c9 feat(libSceAgcDriver): lay out a system dialog beside the system keyboard
LayOutDialog turns a ModalDialogView into the same rectangle list the system
keyboard uses: a centred panel, the message word-wrapped to 36 columns and at
most 8 lines (the last one ends in dots when the text is longer), and one to
three buttons in a row with an accent border on the focused one. The scale
follows the keyboard's rule and shrinks until the panel fits the target.

AgcDriverSetSystemDialog stores the view for the presenter, and
SystemOverlayLayout returns the keyboard's layout when a keyboard is set and the
dialog's otherwise, so only one system panel is drawn at a time.
2026-10-29 14:06:12 +00:00
Adrià 24bfebf957 Merge pull request #11694 from droid2299/fix/agc-small-tiled-label
fix(agc): publish small tiled writes before labels
2026-10-29 14:52:03 +01:00
Adrià 609422fefe Merge pull request #12526 from GiannisG1/test/sparse-import-skip-cpu-publish-of-compared-import
test(agc): skip the sparse import's CPU publish where host-imported pages read as written after a GPU read
2026-10-29 14:51:52 +01:00
Dean bf2e090443 Merge pull request #12663 from dantdmdarealguy/test/agc-byte-cap-sized-records
test(agc): size the byte-cap fixture records without writing 256 MiB
2026-10-30 02:19:01 +13:00
Christian 6f79055a00 fix(shader): keep mesh register windows out of local memory on NVIDIA
On NVIDIA's proprietary driver, function arrays that live in local memory
and are read under a data-dependent branch return wrong values in
subgroups 1-3 of a mesh workgroup; subgroup 0 is correct. A wave64
geometry program whose relative addressing keeps its VGPRs in the vector
window therefore loses register writes in every wave but the first. In
the clipping geometry program of Sony's PS5 PSP emulator (PPSA07550) the
empty waves never cleared their candidate primitive slots and wrote
degenerate triangles over wave 0's, so the 3D menu drew spikes.

On that driver a mesh program's window now lives in a device-local
storage buffer of 256 workgroup slots of 65536 dwords, claimed through a
per-slot lock and released after the final barrier. The pool is created
before the first draw that uses it records anything, and its header is
zeroed in a batch of its own that is submitted and waited for; the pool
is published only after that wait, and a failure releases it. Direct
register accesses keep one function variable per register; a direct
store also writes the buffer when a buffer read can see it, relative
reads load the buffer, relative writes store only to it, and a direct
read that may follow a relative write loads the buffer and refreshes the
variable. A buffer entry is zeroed only when a buffer read can see it
before a write. APS5_NO_MESH_WINDOW_BUFFER=1 keeps the arrays.
2026-10-29 08:56:39 -04:00
Adrià 899ae3d1ad Merge pull request #12168 from dantdmdarealguy/test/agc-cpu-lead-required-lane-windows
test(agc): fail the required nonzero-lead CPU publish lane with its reason on Windows
2026-10-29 13:50:12 +01:00
Adrià 1ac12cc534 Merge pull request #10803 from slopgobblercobbler/fix/spirv-instruction-word-bounds
fix(shader): validate SPIR-V instruction word count boundaries and phi patching
2026-10-29 13:48:55 +01:00
Adrià a12d671d3d Merge pull request #11721 from jotitadev/fix/agc-pipeline-journal-keep-icds
test(agc): keep the Vulkan drivers loaded across the pipeline journal test
2026-10-29 13:48:50 +01:00
thuanquangandClaude 9978af5ec7 test(agc): require the own-object refresh only where write tracking covers the surface
On a host whose imports are compared instead of write-watched (Linux
lavapipe CI resolves write protection, so PrepareImportWatch picks
Unwatch), the surface is not covered by write tracking, the fast proof
stops at its write collection before the pending scan, on main as well,
and T1 is never tried. The test required the own-object refresh on every
host, so it failed there.

Each case now asks GuestMemory whether write tracking covers the
surface. Where it does, the own-object refresh is required as before;
where it does not, the set must still be proved current and keep its
view.

Co-Authored-By: Claude <[email protected]>
2026-10-29 19:48:40 +07:00
thuanquangandClaude 2c9f79e89e perf(agc): accept a refreshed view in the T1 re-run when the lookup would not view the pending alias
Co-Authored-By: Claude <[email protected]>
2026-10-29 19:48:40 +07:00
Adrià c33bb03591 Merge pull request #11820 from milescoviello/perf/ir-inline-operands
perf(shader): keep up to three IR operands inside the value
2026-10-29 12:58:07 +01:00
Romans Pokrovskis 0122c12a30 test(agc): validate PR12171 report path on candidate 2026-10-29 12:11:05 +01:00