Commit Graph
284 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à 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à 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à 7a225bb303 Merge pull request #12686 from MarcZX10/feat/pad-rumble-intensity
feat(libSceVideoOut): add ANYPS5_RUMBLE to scale or turn off host controller vibration
2026-10-29 23:46:17 +01: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à 5454cd2e45 Merge pull request #11130 from imellag/perf/macos-mimalloc
feat(libs): let relinked macOS games opt into mimalloc
2026-10-29 12:58:23 +01:00
Adrià b62989b8bb Merge pull request #12432 from kiansaeidnia/feat/agc-dump-shaders-address-filter
feat(agc): APS5_DUMP_SHADERS takes a list of program addresses
2026-10-29 11:23:04 +01:00
Adrià 071ecaba53 Merge pull request #9723 from Sam-mon7/feat/sample-worker-queue
feat(agc): select the queue worker to sample
2026-10-29 10:40:44 +01:00
Adrià 8ab0b15bb4 Merge pull request #9626 from MarcZX10/codex/6139-bounded-registration-preparation
fix(agc): bound registered shader preparation memory
2026-10-29 10:40:33 +01:00
XairRrR 1c82f56296 docs(environment): list _wgetenv among the readers of environment names
The opening paragraph of docs/dev/ENVIRONMENT.md lists the calls through
which the code reads environment names, and so the reads that the
Conventions check holds to a row. It omits _wgetenv with a wide literal.
tools/env_reference.py has recognised that form since 65da8ac106, and the
code reads nine names through it on Windows, among them
ANYPS5_SHADER_CACHE_DIR, ANYPS5_SCREENSHOTS and APS5_DUMP_SUBMITS. The
paragraph now names _wgetenv beside GetEnvironmentVariableW.

AI-assisted: yes
2026-10-29 05:23:51 +01:00
MarcZX10 93d823f523 docs(env): list ANYPS5_HOST_REPORT in the environment reference
The variable is read in VulkanDevice.cpp; the row gives its values and the
refusal of any other.
2026-10-29 02:07:11 +00:00
MarcZX10 6dc9d58c2b docs(env): document ANYPS5_RUMBLE
List the controller vibration strength variable in the libScePad table with its default of 100, the paths it covers, the adaptive trigger effects it does not, and the error an invalid value raises.
2026-10-29 02:06:36 +00:00
Adrià FranchandClaude Sonnet 5.5 949c9cf477 docs(env): point APS5_DRAW_CACHE_INDIRECT at the file that reads it
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-28 16:13:29 -06:00
Joey Fisher 898083cae3 perf(agc): cache CPU-path indirect draws behind APS5_DRAW_CACHE_INDIRECT
cacheDrawStages never admitted a draw an indirect packet runs on the CPU
path, so a title whose draws are mostly DRAW_INDEX_INDIRECT packets with
a patched user word the vertex program reads as a value missed the draw
cache on nearly every lookup whatever its size. On Demon's Souls 97 % of
the draw packets are such draws and the hit rate stayed at 9 % with
APS5_DRAW_CACHE_ENTRIES=32768.

APS5_DRAW_CACHE_INDIRECT admits them. A hit reuses the fragment stage
and skips the first vertex pass; the stage whose user word the record
patches is still re-materialized per record, as the hit path already
provided for.

Tested: agc_driver_draw_cache_reuse_indirect (three DRAW_INDIRECT draws
patching an unfolded user word: one insert and one hit with the knob,
none without), the other draw_cache_reuse, key_miss, register_key and
draw_cache_relocation tests on lavapipe and an RTX 5070 Ti.
2026-10-28 16:13:29 -06:00
Adrià d4cb89300f Merge pull request #12354 from Queuse/codex/document-loop-guard-limit
docs: clarify the shader loop guard limit
2026-10-28 14:58:00 +01:00
Emanuele 4c75091972 feat(libs): let relinked macOS games opt into mimalloc 2026-10-28 14:50:31 +01:00
Adrià bd15a91f99 Merge pull request #11696 from Astronaut10/perf/agc-shape-memo
perf(agc): repeat a draw shape's resident targets and pipeline instead of looking them up again
2026-10-28 14:49:03 +01:00
Adrià ca814b7bfa Merge pull request #12094 from MarcZX10/docs/environment-value-kinds
docs: correct kinds, defaults and sources of thirteen environment variable rows
2026-10-28 14:47:33 +01:00
Adrià bf31ed6c3f Merge pull request #12091 from MarcZX10/docs/environment-reference-accuracy
docs: correct eleven rows of the environment variable reference
2026-10-28 14:47:22 +01:00
KianandClaude Opus 5.5 ae305dfd5d feat(agc): APS5_DUMP_SHADERS takes a list of program addresses
A comma-separated list of hex program addresses (optional 0x prefix) now
writes only those programs' requests, so one expensive shader can be
captured without serializing every request a title prepares. Any other
value, such as 1, keeps writing every request. A filtered-out program
returns no name, so diagnostics never point at a file that was not
written, and it stays eligible for a later list.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 23:26:48 +10:00
Queuze f5a61dc3c5 docs: clarify the shader loop guard limit 2026-10-28 07:27:36 -03:00
Cesar MoraandClaude Opus 5.5 2b349ff156 perf(agc): repeat a draw shape's resident targets and pipeline instead of looking them up again
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 08:33:40 +01:00
Adrià fddf0ffb75 Merge pull request #9129 from EagleBearerYS/fix/agc-draw-cache-byte-budget
fix(agc): bound the draw cache by bytes
2026-10-28 08:07:42 +01:00
Dean ccfb96757f Merge pull request #11307 from dantdmdarealguy/perf/agc-depth-plane-copies-recent-presents
perf(agc): keep recently sampled depth plane copies up to twice the budget
2026-10-28 18:17:14 +13:00
Yunus Shaikh 332b5f3d28 Merge main into fix/agc-draw-cache-byte-budget
# Conflicts:
#	core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCacheStatistics.cpp
2026-10-27 20:08:17 -07:00
Adrià a37797da92 Merge pull request #11637 from B-Howell/codex/videoout-display-index-current-main
feat(libSceVideoOut): allow selecting the initial display
2026-10-28 03:49:48 +01:00
Dean b643e2a6b8 Merge pull request #11363 from JJenkx/feat/agc-selected-image-readback-20261026
feat(agc): capture selected live storage images without writeback
2026-10-28 13:46:57 +13:00
MarcZX10 dfe6db8b58 docs: spell out the APS5_DISPATCH_CACHE_ENTRIES default
dispatchCacheEntries picks 8192 only for more than two variants, 16384
for one or two and 4096 when stamp validation is on.
2026-10-27 20:22:48 +00:00
MarcZX10 009be80e18 docs: point APS5_EBOOT at the code that reads it
libSceSystemService reads the variable when it prepares a launch, and an
empty value counts as unset; GuestSystemExit.cpp only checks that it is
not defined.
2026-10-27 20:22:48 +00:00
MarcZX10 8592867658 docs: correct the default of APS5_FRAME_CAPTURE_AT_FLIP
FrameRecorder reads the variable with a fallback of 0 and raises it to 1
when it picks the boundary, so the effect of the default is the same as
1 but the default is 0; a value that is not a number throws.
2026-10-27 20:22:48 +00:00
MarcZX10 f281b02025 docs: document APS5_LOG_STATS as a string
AsyncLog.hpp compares the value with 0, so the value is interpreted and the variable is not a
presence switch.
2026-10-27 20:22:48 +00:00
MarcZX10 bd8a7b9315 docs: document APS5_LABEL_TRUST_LATE as a string
Recorder.cpp compares the value with 0, so the value is interpreted and the variable is not a
presence switch.
2026-10-27 20:22:48 +00:00
MarcZX10 4da9369e17 docs: document APS5_KEYS_FILL_CLEAR as a string
Texture.cpp acts only on the value 1, so the value is interpreted and the variable is not a
presence switch.
2026-10-27 20:22:48 +00:00
MarcZX10 13a973de6f docs: document APS5_HOOK_FLUSH_CPU_BLOCKS as a string
Recorder.cpp acts only on a value that starts with 0, so the value is interpreted and the variable is not a
presence switch.
2026-10-27 20:22:48 +00:00
MarcZX10 8cf29166bd docs: document APS5_EXACT_DRAW_WRITES as a string
WrittenBuffers.cpp compares the value with 0, so the value is interpreted and the variable is not a
presence switch.
2026-10-27 20:22:48 +00:00
MarcZX10 c4239be970 docs: document APS5_COPY_READ_TRACKING as a string
Recorder.cpp compares the value with 0, so the value is interpreted and the variable is not a
presence switch.
2026-10-27 20:22:48 +00:00
MarcZX10 71e4a80c7e docs: document APS5_STRICT_DESCRIPTOR_WEBS as a string
ResourceTracker.cpp compares the value with 0, so the value is interpreted and the variable is not a
presence switch.
2026-10-27 20:22:48 +00:00
MarcZX10 017847c3bb docs: document APS5_IMAGE_TABLE_STRICT as a string
ResourceMaterializer.cpp compares the value with 0, so the value is interpreted and the variable is not a
presence switch.
2026-10-27 20:22:48 +00:00
MarcZX10 89e8dbee00 docs: document ANYPS5_NO_SHADER_CACHE as a string
ShaderDiskCache.cpp ignores an empty value and 0, so the value is interpreted and the variable is not a
presence switch.
2026-10-27 20:22:48 +00:00
MarcZX10 2fe21dbd99 docs: document APS5_SKIP_TIMING_TESTS as a string
PreciseWait.cpp tests the first character for 0, so the value is interpreted and the variable is not a
presence switch.
2026-10-27 20:22:48 +00:00
MarcZX10 c95f8f80e0 docs: say the APS5_SAVEDATA_TRACE limit is per logging site
SAVEDATA_TRACE keeps a static counter in each use, so the default limit
of three applies to every site separately.
2026-10-27 20:15:57 +00:00
MarcZX10 c688fede63 docs: give the range and default of APS5_TRACE_EVENTS
TraceThread::ParseCapacity rejects 0 and anything above 4,194,304, and
DefaultCapacity is 262,144.
2026-10-27 20:15:57 +00:00
MarcZX10 1aac7817b5 docs: keep the host read-only state in the USB passthrough row
HostVolumes records ReadOnly from the mount options (or the Windows
read-only volume flag) and the export reports it, so passthrough is not
always writable.
2026-10-27 20:15:57 +00:00
MarcZX10 e6410e8daa docs: mark the Windows-only debug variables
The timer selftest, the job worker pinning and the page query trace are
compiled only under _WIN32; elsewhere the variables are ignored.
2026-10-27 20:15:57 +00:00
MarcZX10 8ff8758c37 docs: document APS5_TIME_SCALE as a number string
The value is parsed with strtod, so fractional factors work, as the row
already says; the integer kind contradicted it.
2026-10-27 20:15:57 +00:00
MarcZX10 11a036fa09 docs: state the interval limit of APS5_TRACE_BENCH
TraceBench::Keep retains MaximumIntervals = 240 and counts the rest as
dropped.
2026-10-27 20:15:57 +00:00
MarcZX10 29b1aaa480 docs: say what APS5_TRACE_SKIPS adds
reportSkip already writes each distinct skip once; the variable only
enables the 'again' lines for repeats.
2026-10-27 20:15:57 +00:00
MarcZX10 fb7b465ad7 docs: point APS5_SPIRV_OPT at its production reader
The SPIR-V backend reads the variable; the test only repeats the read.
2026-10-27 20:15:57 +00:00
MarcZX10 d035b7afe3 docs: describe the perf pair switches as recompiler switches
APS5_NO_PERF_FRONTEND_PAIR and APS5_NO_PERF_LAYOUT_PAIR are read by the
shader recompiler itself, which the shader disk cache lists among its
output-neutral switches, not only by the shader-memory test the rows
pointed at.
2026-10-27 20:15:57 +00:00
MarcZX10 b47d7e50d3 docs: document APS5_SRGB_SHADER_DECODE as a string
TextureFormat.cpp compares the value with "1" and "copy" and ignores
anything else, so setting it to an arbitrary value does not behave like
a presence switch.
2026-10-27 20:15:20 +00:00