Commit Graph
453 Commits
Author SHA1 Message Date
Adrià 277671f838 Merge pull request #7683 from Longziip/fix/agc-indirect-register-reread
fix(agc): reread an invalid indirect register list where its packet executes
2026-10-20 15:18:56 +02:00
Adrià 3cde166e45 Merge pull request #7650 from alex73630/fix/agc-cached-image-msaa-guard
fix(agc): enforce MSAA guards for ordinary image cache hits
2026-10-20 15:18:50 +02:00
Adrià d2d9b1057b Merge pull request #7533 from hugodearaujo/fix/agc-cube-extra-slices
fix(agc): decode cube descriptors with slices past their last whole cube
2026-10-20 12:24:46 +02:00
Dean d14a186f46 Merge pull request #7933 from veosett/codex/windows-pipeline-journal-paths
fix(agc): support long Windows pipeline journal paths
2026-10-20 22:35:05 +13:00
Kovalev Vladislav 80024c48fd test(agc): serialize journal replay result capture 2026-10-20 14:40:12 +06:00
Kovalev Vladislav 08fe08fadc docs(agc): record remaining long pipeline cache path limits 2026-10-20 14:26:34 +06:00
Dean f9012eed0d Merge pull request #7080 from Rengundom/feat/trace-bench-fields
feat(trace): record host, title and per-frame benchmark data
2026-10-20 21:19:24 +13:00
Ethan Barcus a8e06fb008 Merge branch 'main' into feat/trace-bench-fields 2026-10-20 02:57:23 -05:00
RengundomandClaude Opus 5.5 2e70f478e8 test(trace): check again that a failed benchmark rewrite keeps the previous file
The blocked-destination case checks a different file, so an in-place
rewrite passed it. The earlier case is back beside it: a directory at
<name>.tmp makes the write fail, and the previous aps5-bench.json.gz must
be unchanged. It is left out of Windows builds, where the
std::ios_base::failure thrown inside the MinGW ofstream did not unwind to
the test's catch.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 02:47:24 -05:00
Leonardo Feitosa eca73e1e40 revert(agc): track DCC storage images with more than one mip as one unit 2026-10-20 04:38:56 -03:00
Dean 1edbe4b5e0 Merge pull request #7006 from TheSovietWaffle/fix/recompiler-stencil-replay-every-value
fix(recompiler): replay every eight-bit stencil reference a pixel shader may export
2026-10-20 20:30:46 +13:00
Dean 68323bae74 Merge pull request #8165 from xXPBSXx/docs-agc-cmask-entry-rx6400-correction
docs(debt): say that the RX 6400 device loss of the CMASK clear pass is not reproduced
2026-10-20 18:08:35 +13:00
Dean 32e88ad847 Merge pull request #7986 from xXPBSXx/docs/debt-pm4-type0
docs(agc): record the PM4 type-0 packets a submission is rejected for
2026-10-20 17:17:21 +13:00
Dean b5813c0740 Merge pull request #7746 from YossiYad/fix/front-face-all-bits-uint-target
test(agc): export the front-face bits through a uint target as uint
2026-10-20 15:52:03 +13:00
hugodearaujo 086e98a42a fix(agc): decode cube descriptors with slices past their last whole cube
# Conflicts:
#	docs/dev/debt/libSceAgcDriver.md
2026-10-19 23:11:53 -03:00
Adrià b50976750d Merge pull request #7640 from Pipodi/perf/texture-cache-scan-admission
perf(agc): refuse uncached textures while the sampled cache's least recently used entry is still in use
2026-10-20 02:57:27 +02:00
xXPBSXxandClaude Sonnet 5.5 6cbfe3e4c5 docs(debt): say that the RX 6400 device loss of the CMASK clear pass is not reproduced
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-20 02:42:50 +02:00
Dean 3aa35dc014 Merge pull request #6730 from EagleBearerYS/perf/agc-remember-evicting-refusals
perf(agc): remember an evicting import request's budget refusal until it could succeed
2026-10-20 12:52:11 +13:00
Dean 053034f41b Merge pull request #7579 from LeoFeitosa/fix/dcc-mip-block-units
fix(agc): track DCC storage images with more than one mip as one unit
2026-10-20 11:52:35 +13:00
Dean 89369fdc6a Merge pull request #6557 from simonbronk/fix/native-msaa-depth-iterate256
fix(agc): import native multisample depth whose HTILE is not ITERATE_256
2026-10-20 11:51:50 +13:00
Adrià 9b4b3cf463 Merge pull request #6941 from kq62/fix/mesh-barycentric-emulation
feat(shader): emulate barycentrics and per-vertex parameters on the mesh path
2026-10-20 00:17:49 +02:00
Dean Galvin 8ea85e6d55 Merge main into pr-7579
# Conflicts:
#	core/libs/prx/libSceAgcDriver/Graphics/include/TextureTiling.hpp
#	core/libs/prx/libSceAgcDriver/Graphics/src/TextureTiling.cpp
#	docs/dev/debt/libSceAgcDriver.md
2026-10-20 11:01:23 +13:00
Adrià a01b3287c6 Merge pull request #7432 from MarcZX10/codex/7017-failed-collect-unwatch
fix(agc): save pending results when a fresh write collect fails
2026-10-19 23:43:48 +02:00
Yossi Yadgar 3bdd430a32 docs(debt): note a float color export into a uint target is accepted 2026-10-20 00:07:54 +03:00
Dean Galvin 5e88d5f83e Merge main into pr-6730
# Conflicts:
#	core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
#	core/libs/prx/libSceAgcDriver/tests/BdaResources.cpp
#	docs/dev/debt/libSceAgcDriver.md
2026-10-20 09:56:39 +13:00
Dean 3756c72dc6 Merge pull request #6479 from EagleBearerYS/perf/agc-host-import-blocks
perf(agc): take the host import budget from the device's memory budget
2026-10-20 09:52:09 +13:00
Dean 524259954a Merge pull request #6457 from EagleBearerYS/perf/agc-host-import-aligned-blocks
perf(agc): import adjacent host ranges as aligned blocks and stop re-trying budget refusals
2026-10-20 09:51:55 +13:00
Dean Galvin f1ac3be50c Merge main into pr-6557
# Conflicts:
#	core/libs/prx/libSceAgcDriver/tests/execution/NativeMultisampleDepth.cpp
2026-10-20 09:15:59 +13:00
Adrià cde1ffdedd Merge pull request #7254 from gjonn/feat/agc-layered-2d-array-color-views
feat(agc): render layered draws into 2D array color views
2026-10-19 22:05:15 +02:00
Adrià f745930f03 Merge pull request #7413 from thuanquang/fix/table-call-hoisted-descriptor
fix(shader): link a table call whose descriptor load sits before its loop
2026-10-19 21:50:42 +02:00
Adrià d7e62d8e25 Merge pull request #7258 from Pipodi/fix/sampled-array-viewed-slices
fix(agc): build sampled array views from the slices they read
2026-10-19 21:16:23 +02:00
battleblob1andClaude Opus 5.5 f4a4b8aea9 fix(recompiler): replay every eight-bit stencil reference a pixel shader may export
Without VK_EXT_shader_stencil_export (NVIDIA), stencil reference exports
are emulated by replaying the draw once per value. An export the prover
could not bound to at most 16 values was refused. The replay shader
compares the export's low eight bits, so an unbounded export now
replays all 256 values, and proven values are reduced to their low
eight bits as the comparison sees them.

Refs #4276

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 21:57:24 +03:00
xXPBSXxandClaude Sonnet 5.5 4e3e810a79 docs(agc): describe the zero-header run in the PM4 type-0 debt entry
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 20:23:05 +02:00
xXPBSXxandClaude Sonnet 5.5 3cf8eec26a docs(agc): record the PM4 type-0 packets a submission is rejected for
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 20:22:44 +02:00
Adrià 544f29106d Merge pull request #7250 from milescoviello/feat/msaa-dcc-refill
feat(agc): take a full DCC fill of a resident multisampled target as its fast clear
2026-10-19 20:17:24 +02:00
Adrià f52509acc7 Merge pull request #7875 from xXPBSXx/docs-agc-cmask-clear-amd-gpl-off
docs(debt): record the CMASK clear pass fault on AMD without pipeline libraries
2026-10-19 19:59:13 +02:00
Adrià 7d89b1f4fb Merge pull request #7865 from xXPBSXx/docs/debt-wait-label-slot
docs(agc): record the queue 0x20 label wait that holds another slot's address
2026-10-19 19:55:35 +02:00
Dean Galvin cda9264590 Merge main into pr-6479 via the rebased #6457
# Conflicts:
#	core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
2026-10-20 06:31:11 +13:00
Dean Galvin 258a62c1ea Merge main into pr-6730 via the rebased #6457
# Conflicts:
#	core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
2026-10-20 06:31:06 +13:00
Dean Galvin e42de06845 Merge main into pr-6457
# Conflicts:
#	core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
2026-10-20 06:30:38 +13:00
Adrià Franch 8706cd8a7d docs(agc): keep the title name out of the scan-resistant admission debt entry 2026-10-19 18:44:04 +02:00
Alex ColliniandClaude Sonnet 5.5 c026550122 perf(agc): refuse uncached textures while the sampled cache's least recently used entry is still in use
Over budget but within a quarter over it, the sampled texture cache refused no use of a texture it does not hold, so a cyclic scan over a working set larger than the budget rotated the whole cache and hit almost never. The first use of a key in a present is now refused (used for its draw, never cached) when the least recently used entry was used in this or the previous present. A later use of the key is refused only when that entry was used in this present, so a texture used several times per present is still admitted on a later use. The refusal does not apply past the quarter-over ceiling, so a budget that falls still evicts.

The test lowers the budget through OverrideCacheBudgetForTest instead of the environment. The debt entry records the unmeasured present window, that a texture used more than once still rotates the cache, and the one A-B-A measurement.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 18:43:53 +02:00
Longziip ae67e2b7f9 fix(agc): write the reread indirect register list when skipping its invalid entries
When the list read at submission is invalid, the worker now always
executes the copy read again where the packet runs. With
APS5_SKIP_INVALID_INDIRECT_REGISTERS=1 only that copy's invalid entries
are skipped, so the valid entries of a partly updated list are written
instead of the stale ones from submission.

testPartlyUpdatedRegisterListSkipsOnlyItsInvalidEntries submits a list
that is invalid at submission, updates it to a valid entry plus an
invalid one before its packet runs, and reads the register back with
COPY_DATA.
2026-10-19 17:29:53 +01:00
Longziip 557ae22bd1 fix(agc): reread an invalid indirect register list where its packet executes
SET_*_REG_INDIRECT lists are read when the command buffer is submitted.
When that copy holds an offset dword that is no register offset, the
queue worker now reads the list again where the packet executes (as the
console PFP does) and uses that copy if it is valid.

PPSA23566 (UFC 6) intermittently submits a SET_CONTEXT_REG_INDIRECT
whose first entry is 0x038f038f or 0x03900390 in both copies, followed by
180 valid pairs, and the title stopped with "extended register semantics
are not implemented". With APS5_SKIP_INVALID_INDIRECT_REGISTERS=1 the
invalid entries are skipped and the other registers are written; without
it the packet throws as before.
2026-10-19 17:29:53 +01:00
Alexandre Sanchez 98ebc9df1b Merge branch 'main' into fix/agc-cached-image-msaa-guard 2026-10-19 18:12:52 +02:00
Adrià 88a6b34bc5 Merge pull request #6966 from ebosido444-ai/fix/agc-relocated-header
fix(agc): resolve a relocated AGC header whose arrays hold the registered bytes
2026-10-19 17:28:19 +02:00
sussyandClaude Sonnet 5.5 742af5fc8d fix(agc): name both missing features when mesh barycentrics cannot be provided
A pixel shader on the mesh path that reads barycentrics on a device with
neither VK_KHR_fragment_shader_barycentric nor VK_EXT_mesh_shader
reported only the missing mesh shaders. Say that the device has neither,
so reports from such devices are told apart from the case the emulation
covers.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 17:26:37 +02:00
sussyandClaude Sonnet 5.5 dd41527ce2 feat(shader): emulate smooth barycentrics on the mesh path
A pixel shader that reads barycentrics on a device without
VK_KHR_fragment_shader_barycentric used to need a vertex shader so a
generated geometry stage could follow it, which a mesh pipeline cannot
have. The mesh program is now compiled a second time with the layout
its pixel shader needs: it writes its clip position as a varying and the
three corner positions of each primitive as per-primitive outputs, and
the pixel shader solves for the weights, for both smooth and linear
interpolation.

The layout is part of the mesh cache key, the stored artifact and the
captured request. Without VK_EXT_mesh_shader the draw still throws, now
saying so. Per-vertex parameters on the mesh path still throw.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 17:26:37 +02:00
plokmklo 9c9128d45c docs(debt): name the pending results that still have no saved guest bytes
Results that land in a unit whose store ran while its blocks were
watched, after those blocks left the watch while nothing was pending,
have neither saved bytes nor a watch: the unwatch hook found nothing to
save and the write-back refuses as before (#7017). The entry named only
the range that leaves the watch without the hook running over it.
2026-10-19 17:01:06 +02:00
plokmklo 1b6419caae fix(agc): run the unwatch hook when a failed collect leaves the write watch
A MarkWritten whose fresh collect fails (a no-access or unwatchable
resident page inside the 64 KiB block span) took the span out of the
write watch without running the unwatch hook, so pending storage-image
results over it kept no saved guest bytes and their write-back refused:
storing storage image results pending over memory outside the write
watch without the guest bytes saved before them is not implemented
(#7017, Palworld PPSA23126 among others).

The hook now runs over the block span before the blocks leave the
watch, as Unwatch and the import fallback do, with the tracker lock
released for it like #6308 does for imports. The debt entry drops the
failed collect from the unsaved cases.

The check makes a collect fail over a no-access arena page and requires
the hook to have covered the block; it needs the WindowsMappings
protection failure, so it runs in the Windows-only section of the write
tracking test.
2026-10-19 17:00:48 +02:00