Commit Graph
883 Commits
Author SHA1 Message Date
Dean ba5b5330b3 Merge pull request #12706 from Gonic0/fix/agc-barycentric-patches-restart
fix(agc): draw compacted restart lists and restart-free strips through the barycentric patches
2026-10-29 23:56:52 +13:00
Adrià beb5e23f8f Merge pull request #9595 from NaitikJoshiPro/pr/agc-clear-state-num-interp
fix(agc): CLEAR_STATE leaves SPI_PS_IN_CONTROL at NUM_INTERP 2
2026-10-29 11:23:14 +01:00
Adrià 2a90fb105b Merge pull request #9431 from Get-fix/ps4/agc-gcn
feat(libSceAgcDriver): draw PS4 (GCN) command buffers
2026-10-29 09:31:13 +01:00
Dean 4c7d275bef Merge pull request #11684 from oneandonlydean/feat/agc-unclamped-normalized-blend-v2
feat(agc): blend into an unclamped normalized color target in the pixel shader
2026-10-29 20:48:48 +13:00
Nicolas GonzalezandClaude Opus 5.5 95e7deeaab fix(agc): draw compacted restart lists and restart-free strips through the barycentric patches
The barycentric tessellation path refused any draw with the primitive
restart bit set. A non-indexed strip ignores the bit, and on a device
without VK_EXT_primitive_topology_list_restart a list never restarts on
the host, since its indices are compacted on the CPU first, so both now
take the patches. Indexed strips with primitive restart still throw,
now also in Graphics::Draw, which knows the draw is indexed.
Patch-list pipelines never enable primitive restart, which Vulkan does not
allow for them without primitiveTopologyPatchListRestart.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 00:56:03 -03:00
Dean 33acc03447 Merge pull request #8930 from JJenkx/perf/agc-write-changed-byte-stores
perf(agc): store a write-back's changed bytes without a masked non-temporal store
2026-10-29 12:15:29 +13:00
Adrià 26c20975ac Merge pull request #11369 from QRMOE/fix/agc-msaa-depth-buffer-write
fix(agc): release a resident multisample depth before a GPU buffer may write over it
2026-10-28 14:49:09 +01:00
Adrià Franch 8c2599562e docs(agc): record the CLEAR_STATE NUM_INTERP value in debt 2026-10-28 13:45:02 +01:00
Get-fix 0bec339021 feat(libSceAgcDriver): draw PS4 (GCN) command buffers
PS4 color and depth targets, PS4 graphics EOP events, and the PS4 tile
modes (1D/2D thin and display, depth with tile split, PRT, linear
general) on the AGC executor, with a GPU detiler for every mode.
Textures sampled over the padded corner of a render target are GPU block
copies, and the PS4 SDK pattern-fill compute kernel runs as a GPU fill
when it repeats one dword, so render targets and HTILE are cleared
without a CPU drain. Two-dword patterns keep running the kernel: as
fills, Limbo's clears of its 64-bit target made its gameplay advance
about half as far per frame.
Tests cover the tiling equations against addrlib formulas, the GPU
detiler for every mode and element size, and the fill ranges.
2026-10-28 13:01:27 +01:00
Adrià 316615d042 Merge pull request #10307 from mazen320/fix/submit-acb-queue-0x58
fix(agc): accept compute queue 0x58 on SubmitAcb
2026-10-28 10:19:36 +01:00
Adrià a444a18d93 Merge pull request #11507 from hugodearaujo/fix/agc-short-cube-sampling
fix(agc): sample cube descriptors with fewer than six slices as six faces
2026-10-28 10:14:50 +01:00
Adrià e2ca6e4223 Merge pull request #11803 from milescoviello/docs/agc-registration-silent-stubs
docs(libSceAgcDriver): list the registration init and memory query as silent stubs
2026-10-28 10:14:41 +01:00
Adrià e2e27a3ba9 Merge pull request #11717 from xXPBSXx/docs-agc-alpha-to-coverage-round
docs(agc): record the unsupported DB_ALPHA_TO_MASK value 0x1aa01
2026-10-28 09:54:18 +01:00
Maz 5d45d2cab7 fix(agc): name unmeasured queue end and drop debt duplicates 2026-10-28 08:59:28 +01:00
Maz 683b3497de fix(agc): limit 0x58 acceptance to SubmitAcb
Keep MultiAcbs and CommandBuffer on the unmeasured 0x57 exclusive end; split the debt entries and retain the title call-sites.
2026-10-28 08:59:28 +01:00
Maz 051b3e017b fix(agc): accept compute queue 0x58 on SubmitAcb
A PS5 measurement already recorded in the debt note shows queue 0x58 succeeds; raise the exclusive SubmissionQueueEnd and cover it in agc_driver_tests.
2026-10-28 08:59:28 +01:00
Dean Galvin 00c06d63e8 Merge branch 'main' into feat/agc-unclamped-normalized-blend-v2
# Conflicts:
#	core/shader/recompiler/ControlFlow/src/RequestSerializer.cpp
2026-10-28 20:13:06 +13:00
Dean Galvin c116f4f2f0 Merge branch 'main' into perf-D2-v47
# Conflicts:
#	docs/dev/debt/libSceAgcDriver.md
2026-10-28 13:52:37 +13:00
Dean bf4860b6ce Merge pull request #11098 from edubox/fix/agc-single-level-depth-view
fix(agc): select the first level of a single-level depth view
2026-10-28 13:50:57 +13:00
Adrià f5fefb982c Merge pull request #11305 from joedeangelis533-bot/review/tessellation-depth-upstream-20261025
feat(agc): remap unsupported tessellation viewport depth ranges
2026-10-27 22:27:35 +01:00
Dean Galvin 4d954209d2 Merge branch 'main' into feat/agc-unclamped-normalized-blend-v2
# Conflicts:
#	core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
2026-10-28 08:44:09 +13:00
Dean Galvin d4a296d863 Merge main into perf-D2-v47: depth export tail moves to request version 49
Main took request serialization version 48 for the fragment barycentric
built-ins flag (#9193). The depth export clamp bounds are now written at
version 49 and read only for versions from 49, so a version 48 request as main
writes it still decodes, with default bounds. Tests: version 49 is the
emitted prefix, 50 the first unsupported one, a depth exporting request
without its bounds decodes at 48, 47 and 46 (the last two without main's
barycentric byte), and a version 48 two-sample dithered request decodes as
written.
2026-10-28 08:24:34 +13:00
Dean d13b3d7c55 Merge pull request #10575 from Mouhand-Kaddo/fix/agc-committed-reads-released-pages
fix(agc): read committed guest pages on Windows without faulting on released pages
2026-10-28 07:55:20 +13:00
Dean 594214f733 Merge pull request #11357 from oneandonlydean/sa/host-import-frame-eviction
fix(agc): do not evict host imports used in the current or previous frame
2026-10-28 06:23:09 +13:00
Adrià 9ae2f7d22a Merge pull request #10414 from orezraey/fix/agc-partial-fast-clear-eliminate
fix(agc): eliminate a fast clear over part of a CMASK color target
2026-10-27 13:19:27 +01:00
milescovielloandClaude Opus 5.5 c60f0fc43c docs(libSceAgcDriver): note the registration memory query's null-output refusal
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-27 11:43:03 +00:00
milescovielloandClaude Opus 5.5 c2a6577ad9 docs(libSceAgcDriver): list the registration init and memory query as silent stubs
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-27 11:43:03 +00:00
Adrià e4f6c8aa40 Merge pull request #11453 from LeandroLP23/docs/agc-present-mutex-amd-windows
docs(agc): record presentation under the GPU mutex on AMD's Windows driver
2026-10-27 11:59:57 +01:00
Adrià 5c3c9d95c8 Merge pull request #11364 from xXPBSXx/fix-agc-cb-resolve-packed-float
docs(debt): record the unsupported and unmeasured multisample CB resolve of 11_11_10 float targets
2026-10-27 11:58:43 +01:00
Dean Galvin 1bf274a817 Merge main into perf-D2-v47: depth export tail moves to request version 48
Main took request serialization version 47 for the two-sample dithered
alpha-to-coverage value. The depth export clamp bounds are now written at
version 48 and read only for versions from 48, so a version 47 request as main
writes it still decodes, with default bounds. Tests: version 48 is the
emitted prefix, 49 the first unsupported one, and a version 47 two-sample
dithered request (with and without depth export) decodes as written.
2026-10-27 22:37:31 +13:00
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
hugodearaujo 5a5e54a455 Merge main into fix/agc-short-cube-sampling 2026-10-27 03:46:24 -03:00
orezraeyandClaude Opus 5.5 6aeb8d6c3e Merge main into fix/agc-partial-fast-clear-eliminate
Keep #9694's coverage check for targets without CMASK or DCC keys and skip it only for a fast-clear eliminate over a CMASK target without DCC keys.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-27 02:37:09 -03: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
xXPBSXxandClaude Sonnet 5.5 ad95db1032 docs(agc): note the 0x1aa01 DB_ALPHA_TO_MASK stop of PPSA12361
PPSA12361 reaches DB_ALPHA_TO_MASK 0x1aa01 on main 74acfad65b on an RTX 4080 SUPER and an RX 6400. It is the accepted 0xaa01 with bit 16 also set, and radeonsi never programs that combination. Its semantics are not measured, so the path keeps throwing; the entry records it.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-27 05:24:30 +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 Galvin 8b323065a9 docs(agc): note that only viewport 0 bounds clamp an exported depth
The clamp reads PA_SC_VPORT_ZMIN_0 and PA_SC_VPORT_ZMAX_0 only, so a draw that
selects another viewport is clamped to viewport 0's depth range.
2026-10-27 15:59:30 +13: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
Dean Galvin 0ba98673a6 fix(agc): refuse a signed unclamped blend that skips a component and name every merged target
The shader rewrites a component the write mask skips through a float, which turns the signed normalized code -128 into -127. A signed target whose write mask skips a component is refused. The one-merged-target refusals no longer say packed, and blending unclamped normalized color checks for another merged target.
2026-10-27 11:04:05 +13:00
Dean Galvin 915e32a2eb docs(agc): record the unclamped normalized color blend path 2026-10-27 11:04:05 +13:00
Dean Galvin 7f3f58284c fix(agc): serve host imports by lookups until two frames have ended
Before two flips have ended a frame nothing was evictable, so a cap retry
was refused and aborted where main served it. Until then imports age by
lookups as before; once frames exist the frame rule applies. A frame end
now moves its own counter, used by the evicting-refusal memory, not the
imports epoch, so the address-space cache survives a flip.
2026-10-27 10:36:53 +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
QRMOEandClaude Opus 5.5 ee23428c55 fix(agc): release a resident multisample depth before a GPU buffer may write over it
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-26 19:44:05 +01:00
hugodearaujo 787b6a6720 fix(agc): sample cube descriptors with fewer than six slices as six faces 2026-10-26 15:11:35 -03: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