Commit Graph
918 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à 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à 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
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à 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à 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à 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à 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
xXPBSXxandClaude Sonnet 5.5 e4bbf01c5c docs(agc): say what shadPS4 and fpPS4 do for FORCE_DEGAMMA on PS4
A new entry next to the FORCE_DEGAMMA entry. shadPS4 converts the filtered texel of every non-sRGB format to linear and fpPS4 documents the bit as applied after filtering regardless of format; here a forcing sampler reads the texture through its sRGB view, so the conversion happens before filtering, for formats that are not sRGB and not on a fixed list. PS4 (GCN) behaviour only; nothing is claimed about the console.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-29 18:26:05 +01:00
Ashwin 4bb5aa9f0e fix(agc): reject unmeasured single-sample dithered alpha-to-coverage 2026-10-29 20:36:02 +05:30
slopgobblercobbler c8fcb0bda4 fix(agc): validate pipeline cache header format and empty cache paths 2026-10-29 12:09:44 +01:00
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
memob 8896536f31 fix(agc): import a heap whose mirror left the write watch in place of imports a mirror can replace
A cached address space keeps a heap mirror whose range has left the write watch while the budget refuses the range's import, and such a mirror is copied in full at every build. When the budget is held by imports a build uses every time, as the pieces #8380 imports of a heap over the budget are, the import was refused at every build, each refusal counted, and every build copied the whole range (about 1.1 GiB in Astro Bot). The check now evicts for that import as the copy cap does: idle imports, and imports a heap mirror can replace that no build in progress holds.
2026-10-29 07:50:17 +01:00
memob c280059329 fix(agc): let a range only an import serves evict imports a heap mirror can replace
An address-based build that copies a range the budget refused and no mirror serves (a range outside the write watch, or not releasable) evicts idle imports when the copy would pass APS5_ADDRESS_COPY_MAX_MIB. Imports used in the current or the previous frame (before two frames have ended, within the last 256 lookups) never count as idle, so once a build uses an import every frame, as it does for the pieces #8380 imports of a heap over the budget or a whole heap imported before, nothing can be evicted and the build aborts. That eviction now also takes imports the build has not taken yet whose single range is releasable and write-watched: the build then serves that range from a heap mirror instead.
2026-10-29 07:50:17 +01: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
MarcZX10 4e90e51864 docs(debt): record what the host report was not run on
The Windows and macOS branches and a hardware GPU's output are not
checked, and the list of required Vulkan items is kept in step with
VulkanDevice.cpp by hand.
2026-10-29 02:07:19 +00:00
Adrià 234f4d81bb fix(agc): check the rendering wait cursor before reading it, drop the mode 1 test 2026-10-29 01:29:23 +01:00
slopgobblercobbler 2a4aad96e5 fix(agc): validate rendering wait buffer and expand resource registration tests 2026-10-29 00:51:53 +01: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
JamieandClaude Opus 5.5 fa2b143d5a fix(agc): zero host-only multisample memory in capture deltas
Late-added ranges and write-watched blocks are read through the same
host-only-aware read as the snapshot, so a CPU store over a guarded
multisample target no longer aborts a capture. The read is a helper
tested for ranges in the middle, at either edge, overlapping and
outside a block, and against a native target and its neighbor.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 21:58:54 +00:00
JamieandClaude Opus 5.5 7b38bca9e5 fix(agc): write host-only multisample memory as zeros in a capture snapshot
A capture snapshot read every committed block through the coherent path,
which refuses memory under a multisampled color target, its FMASK or
native multisample depth whose samples exist only on the host, so the
capture stopped there. The snapshot now writes those bytes as zeros,
counts them as host_only_sample_bytes in capture.json and adds a
warning, and the replay starts those targets without their earlier
contents.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 20:27:23 +00:00
XairRrR a226b66629 fix(agc): sample a cube array over depth surfaces through their depth planes
A cube T# whose last array slice is 6n - 1 is a cube array of n cubes.
The depth plane path accepted one cube only (last array 0 or 5) and
threw for the rest; it now gathers all 6n slices into the 2D array
view, as the texture path already lays cubes out. The refusal message
also names the last array slice and the copy format.

Uncharted 4's orphanage samples a two-cube D32 shadow array this way.

AI-assisted: yes
2026-10-28 18:47:47 +01:00
XairRrR 9485e7e628 docs(agc): give stencil planes in guest memory their own debt entry
The stencil plane text named the game; debt entries carry title IDs
only. It also took the depth plane entry past the 1000-character limit,
so it now has an entry of its own.

AI-assisted: yes
2026-10-28 18:47:47 +01:00
XairRrR 197c05c9f0 fix(agc): keep stencil planes coherent with guest memory
Only the depth plane of a depth surface reached guest memory: stencil
lived in the host image alone. A title that moves stencil with buffer
copies read stale bytes from the source plane, and the destination
surface never saw what the copy wrote. Uncharted 4 clears its G-buffer
stencil plane with a fill, then copies it into the lighting depth
target and on into last frame's planes with a buffer copy kernel every
frame; its lighting kept the stencil marks of earlier frames, so
characters left trails and the image doubled while the camera moved.

The stencil plane of a single-sample surface with the 64 KiB Z swizzle
is now marked drawn when the surface is bound, stored whole when a read
overlaps it (FlushDepthPlanes, like the depth plane) and reloaded from
guest memory when a collected guest write changed it before the surface
is bound or its stencil sampled, unless a stencil clear is pending.

agc_driver_stencil_plane_memory draws stencil, reads the plane through
FlushDepthPlanes, then writes it from the CPU and tests it with stencil
EQUAL; it fails without the change.

AI-assisted: yes
2026-10-28 18:47:47 +01:00
Romans Pokrovskis b2aad7239c chore: refresh native buffer alias guard after depth write fix 2026-10-28 16:11:13 +02: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
akkadbakkad89 1d3f85a726 docs(agc): scope the MSAA_ENABLE debt to title ids and unmeasured line coverage 2026-10-28 09:36:10 +00:00
akkadbakkad89 3dcf80b6fe fix(agc): allow MSAA_ENABLE single-sample lines 2026-10-28 09:35:16 +00: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