Commit Graph
831 Commits
Author SHA1 Message Date
Dean e07c21ce68 Merge pull request #11157 from janzezno/feat/agc-frame-capture-linux
feat(agc): capture and replay frames on Linux
2026-10-27 21:20:55 +13:00
Dean 6f7fba5bfa Merge pull request #11086 from slopgobblercobbler/fix/agc-submit-many-bounds-validation
fix(agc): validate multi-submit count overflow and null command buffers
2026-10-27 21:19:00 +13:00
Adrià 4297464b12 Merge pull request #9402 from janzezno/perf/incremental-import-refresh
perf(agc): re-check only the host imports a registry change can reach
2026-10-27 06:10:48 +01:00
Adrià 4c486ca322 Merge pull request #10515 from JJenkx/fix/agc-two-sample-dithered-a2c
fix(agc): emulate two-sample DB_ALPHA_TO_MASK 0xe701 dithered alpha-to-coverage
2026-10-27 04:52:02 +01:00
Adrià 33d2affaa6 Merge pull request #10901 from EagleBearerYS/docs/debt-gaps-bf208
docs(debt): bring five libraries' debt files in line with the tree
2026-10-27 04:50:47 +01:00
Adrià 10a5931994 Merge pull request #10822 from xXPBSXx/docs/debt-agcdriver-registerdefaultowner-title
docs(debt): note how a title calls sceAgcDriverRegisterDefaultOwner
2026-10-27 04:50:09 +01:00
Dean abed035468 Merge pull request #11313 from frankea/fix/agc-draw-index-multi-instanced
fix(agc): write the console's DRAW_INDEX_MULTI_INST packet for sceAgcDcbDrawIndexMultiInstanced
2026-10-27 15:02:15 +13:00
Dean 630211a866 Merge pull request #6612 from milescoviello/feat/tess-geometry
feat(agc): draw tessellation followed by an NGG geometry stage
2026-10-27 14:56:18 +13:00
janzezno 4f7e51f399 perf(agc): re-check only the host imports a registry change can reach
refreshImports checked every live host import, failure and refusal
again at each guest allocation registry change. A title that maps
memory often (SuperTuxKart, ~1650 maps a second) paid a walk that grew
with the live imports: ~34 FPS with ~1.1 GiB of imports on RADV.

The import table now keeps a weak_ptr snapshot of the ranges it was
last checked against and diffs it with the new lease. Only imports
whose import window touches a changed span, and imports made since the
last refresh, are checked again. Every import is checked when the window
is 0 or the window or budget changed. SuperTuxKart's menu goes from
~34 to ~45 FPS with the same imports live.
2026-10-26 21:19:58 +01:00
Dean 930a681f2a Merge pull request #9879 from thuanquang/fix/linear-target-import-creation
perf(agc): create the host import of a linear color target in registered memory
2026-10-27 08:18:22 +13:00
Adrià 88795ed448 Merge pull request #10465 from xXPBSXx/docs-agc-copyregion-over-4gib
docs(agc): note the guest buffer region copied whole over 4 GiB
2026-10-26 18:26:07 +01:00
Adrià 761eaba441 Merge pull request #10463 from xXPBSXx/docs/debt-pm4-type0-reread
docs(debt): note that the zero gap before REWIND packets stays unwritten
2026-10-26 18:24:47 +01:00
frankea 72f663c64c Merge remote-tracking branch 'origin/main' into fix/agc-draw-index-multi-instanced 2026-10-26 12:32:50 -04:00
Adrià b5c040bced Merge pull request #10191 from xXPBSXx/docs/debt-agcdriver-submitacb-title
docs(debt): note how titles call sceAgcDriverSubmitAcb
2026-10-26 16:30:51 +01:00
hypermistandClaude Opus 5.5 d6f2d6501e docs(debt): cite firmware 13.60, not 12.00, for the decrypted modules
The modules these entries were read from record SDK 13.60 (0x13600007)
in their module-param segment, so they are firmware 13.60. Only the
version label changes; the behaviour described is unchanged.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013XFS3FUfBtqCVfwmBrRQ6q
2026-10-26 16:17:50 +01:00
janzezno c867473002 feat(agc): capture and replay frames on Linux 2026-10-26 16:11:45 +01:00
xXPBSXxandClaude Opus 5.5 12e40b760e Merge main into docs/debt-pm4-type0-reread
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-26 16:02:00 +01:00
Adrià 4c394fdc00 Merge pull request #10066 from xXPBSXx/docs-agc-label-wait-amd-data
docs(agc): add AMD data to the queue 0x20 label wait entry
2026-10-26 14:57:54 +01:00
Adrià 1061954c7e Merge pull request #8520 from qpavyros/codex/app-archive-directories
feat(libkernel): enumerate archived app directories
2026-10-26 14:23:39 +01:00
Adrià 035ac96edd Merge pull request #9940 from EagleBearerYS/fix/agc-compared-import-initial-dcc
fix(agc): accept a compared host import for an initial multisampled DCC import
2026-10-26 13:51:02 +01:00
Yunus Shaikh 33851346ad Merge main into docs/debt-gaps-bf208 2026-10-26 05:16:02 -07:00
Adrià 6641f48356 Merge pull request #9789 from rooklz/fix/agc-uint-color-export
fix(libSceAgcDriver): export raw 32-bit values into UINT color targets as integers
2026-10-26 12:48:04 +01:00
Yunus Shaikh 1505810fec docs(debt): shorten the native multisampled DCC fast clear entry 2026-10-26 12:30:14 +01:00
Yunus Shaikh 9b0ff5ccc2 fix(agc): accept a compared host import for a multisampled target's FMASK range
be write-watched at the initial import ("native FMASK contents require
watched guest memory") and at each reuse ("native FMASK sampling requires
watched guest memory"). In Linux comparison mode a host import over the
FMASK unwatches it, so the target is refused one check after the color,
DCC and CMASK ranges that the previous commit accepts.

Treat an FMASK range that a compared host import covers
(ComparedHostImportCovers) as the color and metadata ranges are treated:
keep a copy and its NewestStamp at the initial import, skip it in the
import's UnchangedSinceAll, and at reuse require the stamp and the bytes
to be unchanged, comparing them at most once per collect epoch. An
explicitly unwatched FMASK range is still refused.

Four-sample targets take no FMASK range, so this changes nothing for them.

Refs https://github.com/boykopovar/AnyPS5/issues/9724
2026-10-26 12:30:14 +01:00
Yunus Shaikh c10d1eae66 fix(agc): accept a compared host import for an initial multisampled DCC import
Rush 2 Recompiled (PPSA69423) and Wave Race 64 Recompiled (PPSA69424)
stop with "AGC graphics: initial multisampled DCC contents require
watched guest memory"
(https://github.com/boykopovar/AnyPS5/issues/9724). On Linux with
lavapipe, the write-watch probe finds that device accesses to a host
import trip the write watch, so every imported range is compared rather
than watched. A multisampled DCC target whose color, DCC or CMASK range
lies in such an import was then refused at its first draw: importing the
target takes a write generation for each range, and a compared range has
none.

A range that is not watched but lies in a live host import the probe
compares is now copied when the target is imported, and its metadata
again when a whole fill is taken as its fast clear. Each later use
compares the range with that copy, at most once per collect epoch, and
counts any driver or GPU store over its 64 KiB blocks since the copy as
a write, so a guest store of new bytes or any store by the driver
refuses the resident target as a watched range does. A range left
unwatched outside such an import is refused as before.

This covers the Linux comparison mode, not the Windows deferred settle
(BF-150): compared imports on Windows still refuse.
2026-10-26 12:30:01 +01:00
Adrià Franch 8676daa0fc merge: sync archive directories with main 2026-10-26 12:02:23 +01:00
Adrià FranchandClaude Sonnet 5.5 654eadd7f5 merge: sync archive directories with main
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-26 10:50:37 +01:00
davidamsellemandClaude Opus 5.5 6e5c1f041d docs: name the formats of the gfx1100 type-0 and type-1 measurement
GFX11 renumbers the image formats past 29, so the raw codes 10, 37 and 1
read as other formats on the console's GFX10 numbering (37 is
11_11_10_UNORM there, 2_10_10_10_SNORM on gfx1100). Name them, and say
why the TYPE 9 depth compare control only answers at 32_FLOAT: gfx1100
compares 16_UNORM and 32_FLOAT only and answers zero for the others.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-26 10:43:45 +01:00
davidamsellemandClaude Opus 5 dc81252d64 docs: measure type-0 and type-1 texture descriptors on gfx1100
The entry recorded TYPE 1 only from a gfx1010 measurement with format 22 and left other formats and
depth-compare reads open. Measured on a gfx1100 with the hardware oracle: image_sample_lz,
image_sample_b, image_load, image_sample_c_lz and image_get_resinfo return zero and no fault for
TYPE 0 and TYPE 1 over formats 22, 10, 37 and 1, with a nonzero base over readable memory and with a
zero base. A TYPE 9 control in the same kernel returns the stored texel, the raw dword, the declared
64 and 32, and 1.0 from image_sample_c_lz with an ALWAYS depth compare and format 22.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-10-26 10:43:45 +01:00
Dean b27cc8416f Merge pull request #7505 from AlxcBTW/pr/unwatch-hook-exits-v2
fix(agc): run the unwatch hook before an import whose range leaves the write watch whatever the import does
2026-10-26 21:31:22 +13:00
Dean 9d906c833c Merge pull request #10681 from PYTHONRETARDE/fix/d16-depth-take-storage-discard
fix(agc): discard a new depth surface's depth before taking storage writes
2026-10-26 21:29:52 +13:00
Dean 204c6747d0 Merge pull request #11197 from LeandroLP23/fix/agc-frame-recorder-settle-before-delta
fix(agc): read a frame capture's memory delta once the accepted submissions completed
2026-10-26 20:48:54 +13:00
Dean fdb3925940 Merge pull request #9913 from HQasper/claude/project-thread-75dvwh
fix(agc): draw stencil AND, OR, XOR and XNOR on the bits they change
2026-10-26 20:03:59 +13:00
frankea 37857ceb29 fix(agc): write the console's DRAW_INDEX_MULTI_INST packet for sceAgcDcbDrawIndexMultiInstanced
On a PS5 the builder writes 15 dwords: a tag write of 0xc6000006, opcode 0x3a with its arguments, initiator 0x80 whatever the modifier, and a closing tag write; GetSize returns 60. AnyPS5 wrote NUM_INSTANCES and DRAW_INDEX_2 under argument meanings nothing confirms. The driver refuses 0x3a, whose field meanings are not known, and names it DRAW_INDEX_MULTI_INST as Linux's nvd.h does.
2026-10-25 23:14:39 -04:00
Dean Galvin 72598e34c8 Merge branch 'main' into pr/unwatch-hook-exits-v2 2026-10-26 14:36:49 +13:00
Dean d31f372e33 Merge pull request #10062 from imellag/fix/agc-moltenvk-destroy-at-idle
fix(agc): destroy buffers and memory on MoltenVK only while the graphics queue is idle
2026-10-26 14:28:45 +13:00
qpavyros 9b2dd8dce9 merge: sync archive follow-up with main 2026-10-26 01:53:02 +02:00
Adrià acb900c194 Merge pull request #9737 from imellag/feat/agc-depth-bounds-emulation
feat(agc): emulate a one-sided depth bounds test without the depthBounds feature
2026-10-26 00:35:49 +01:00
qpavyros 6105be4431 merge: sync archive directories with main 2026-10-26 01:10:12 +02:00
LeandroLP23andClaude Opus 5.5 ada20294a6 fix(agc): read a frame capture's memory delta once the accepted submissions completed
A delta read its blocks with ReadCommittedUnsynced while GPU work
accepted before the call could still write them, so a capture could
hold a block from before a DMA copy that the replay then wrote back over
the copy's result. A delta with blocks to read now waits up to 10 s for
the accepted submissions and records the serials after the wait; the
capture stops with a warning when the work does not finish. The Windows
quarantine of agc_driver_frame_replay is removed.

Fixes #10711

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 22:36:36 +01:00
Adrià cceb6c3c41 Merge pull request #9961 from daviaaze/fix/agc-dcc-sliced-array-window
fix(agc): serve sampled DCC array views from their viewed slices
2026-10-25 21:53:47 +01:00
thuanquang 6adad6733c Merge main into fix/linear-target-import-creation 2026-10-26 02:07:34 +07:00
Adrià 5d48c6233e Merge pull request #9401 from tibzejoker/perf/grow-pipeline-store
perf(agc): size the pipeline store to the title's working set
2026-10-25 19:07:59 +01:00
slopgobblercobbler dbfde882dd fix(agc): validate multi-submit count overflow and null command buffers 2026-10-25 18:20:45 +01:00
Davi Azevedo b166232c72 fix(agc): refresh DCC sampled array windows 2026-10-25 14:13:27 -03:00
Dean 79f061ba5b Merge pull request #9685 from thuanquang/fix/linear-target-completion-stores
fix(agc): store resident linear color targets at completion points, limited to their drawn rectangles
2026-10-26 05:44:21 +13:00
Adrià 0658bc8749 Merge pull request #9186 from fma-rc/fix/agc-retire-undrawn-filled-msaa
fix(agc): retire an undrawn filled multisampled color target that a guest access overlaps
2026-10-25 14:25:07 +01:00
Adrià a8b199d103 Merge pull request #7618 from mrfelek/perf/stage-swept-write-only
perf(agc): stage written-only buffer elements a dispatch sweeps on discrete GPUs
2026-10-25 13:19:08 +01:00
Adrià 3eb0770ae9 Merge pull request #9361 from thuanquang/docs/debt-sweep-agc-cb-passes
docs(agc): correct multisampled DCC acceptance in the CB passes debt entry
2026-10-25 11:46:13 +01:00
Adrià ce29789faa Merge pull request #9352 from thuanquang/docs/debt-force-degamma-variant-names
docs(agc): name the 10_11_11 and 2_10_10_10 variants that FORCE_DEGAMMA leaves unchanged
2026-10-25 11:40:07 +01:00