Commit Graph
473 Commits
Author SHA1 Message Date
Dean 1fe3ee8d1a Merge pull request #14235 from oneandonlydean/rr/pr2-writer
feat(run-report): write the run report when a game ends
2026-11-05 21:24:09 +13:00
Dean fad31329e1 Merge pull request #15156 from camezaro-intc/feat/netctl-disconnected-env
feat(libSceNetCtl): support APS5_NET_DISCONNECTED for simulated offline state
2026-11-05 17:00:27 +13:00
Dean 436c14263e Merge pull request #9154 from LeandroLP23/feat/pad-dualsense-bluetooth-haptics
feat(pad): stream vibration ports to a Bluetooth DualSense as haptics reports
2026-11-05 16:59:18 +13:00
Dean c42e3a000c Merge pull request #11948 from 00xDisaster/feat/video-out-host-policy-current
feat(libSceVideoOut): limit the guest display to the host resolution
2026-11-05 13:00:08 +13:00
Dean 6b5be5e232 Merge pull request #15887 from TripyFox/perf/agc-draw-device-staging
perf(agc): stage recorded draws' written buffers in device memory
2026-11-05 12:43:15 +13:00
Dean 0ad9710d28 Merge pull request #13044 from Gonic0/perf/agc-linear-writeback-into-import
perf(agc): retile a whole-layer linear storage write-back into the host import
2026-11-05 12:17:45 +13:00
TripyFoxandClaude Opus 5.5 1c3a24f1a2 perf(agc): stage recorded draws' written buffers in device memory
Recorded draws without BDA page tables now take the device-local staging
of written and atomic buffer elements that dispatches use; their
copy-backs are already recorded through MarkGpuWrites. A draw that ends
up synchronous with staged regions is rebuilt unstaged.
APS5_NO_DRAW_STAGING=1 keeps draws' elements in place.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-04 22:41:54 +01:00
LeandroLP23andClaude Opus 5.5 3c949c1dd4 fix(pad): scale the Bluetooth DualSense haptics stream by ANYPS5_RUMBLE
The controller sound card path already scales its samples by ANYPS5_RUMBLE, but
the Bluetooth haptics stream took the vibration port samples before that, so
ANYPS5_RUMBLE=0 still left a Bluetooth DualSense vibrating.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-04 21:47:03 +01:00
Dean 296b1ac934 Merge pull request #15795 from Pipodi/perf/shader-fault-check-dedup
perf(shader): skip fault checks dominated by the same check
2026-11-05 08:18:59 +13:00
Dean c087a68c05 Merge pull request #15682 from oneandonlydean/perf/shader-resources-costs
perf(agc): cut three per-draw costs in ShaderResources
2026-11-05 08:18:42 +13:00
Dean e358f2fc14 Merge pull request #14838 from oneandonlydean/carry-9012
perf(agc): audit a cached template only after the host import set changed
2026-11-05 08:18:22 +13:00
Nicolas GonzalezandClaude Opus 5.5 ea68802148 Merge commit 'b11c7bf84f5d2f636ff60166cc3371bd071e24d5' into HEAD
Resolve the two conflicts in Texture.cpp: keep main's creationHandOvers
counter next to linearImportRetiles, and address the retile's tiled
side through main's new SurfaceGeometry::GuestOffset(layer, mip) in both
the direct-import and the scratch dispatch. A level-major surface does
not keep each layer contiguous, so the whole-layer check that picks the
direct import now skips it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-04 14:03:27 -03:00
Alex ColliniandClaude Opus 5.5 6aee0ff2a4 perf(shader): skip fault checks dominated by the same check
An invalid-descriptor fault check of a GPU-descriptor buffer access, and the
swizzle-selector check of a formatted load, is not emitted when an identical
check on the same descriptor under the same execution guard sits earlier in
the same IR block or in a dominating block. The fault record, the invocation
stop and the host error stay the same; only the pc stored for a fault that two
invocations race to record can differ. APS5_NO_FAULT_CHECK_DEDUP restores every
check.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-04 15:00:27 +01:00
Dean 0097b73ad0 Merge pull request #13858 from EagleBearerYS/perf/agc-reuse-address-draws-in-space
perf(agc): reuse read-only address-based draw builds over their cached address space
2026-11-04 21:31:53 +13:00
Dean afb8a06e51 Merge pull request #6501 from Nesyth/perf/agc-pipelined-sample-dumps
perf(agc): queue occlusion counter dumps behind pipelined draws instead of draining
2026-11-04 21:31:18 +13:00
Dean Galvin b5f5c7fd1f Merge branch 'main' into rr/pr2-writer 2026-11-04 20:19:15 +13:00
Dean e0d323a2a3 Merge pull request #10069 from root-over/fix/agc-probe-f32-denormal-preserve
fix(agc): probe DenormPreserve 32 before requesting it
2026-11-04 18:33:47 +13:00
Dean aa5186e240 Merge pull request #10472 from nikhilpanchal1/perf/agc-image-suballocation
feat(agc): suballocate sampled and storage image memory
2026-11-04 17:48:36 +13:00
Dean Galvin c6daa9a3f2 Merge branch 'main' into perf/agc-reuse-address-draws-in-space 2026-11-04 17:06:15 +13:00
Dean Galvin fcdbf57170 perf(agc): reserve a resource build's vectors up front and skip template records it never uses
A build grew its binding and allocation vectors one element at a time and
tracked occupied binding numbers in a std::set; about 3.7% of the queue-0
worker on one title's hub was allocator time inside builds. The counts are
known before the plan is walked, so the vectors are reserved once and the
binding numbers go in a reserved vector.

A build that binds BDA tables, or a fault buffer while APS5_LOOP_GUARD is
set, can never be reused (noteReusable and NeverReusable refuse it), so it
no longer copies its data words for a template refresh nor records the proof
of its sampled textures for a Revalidate (the lookup log is still cleared).
A fault-only build is reusable and keeps both. APS5_KEEP_TEMPLATE_RECORDS=1
keeps both for every build.
2026-11-04 16:54:14 +13:00
Dean Galvin 55b17f3b3b perf(agc): test in-place read overlap without building the range list
ShaderResources::ReadsOverlap built the whole InPlaceReads vector on every
call. recordDraw calls it once per queued store for every draw that is not
address-based (the touches predicate of AnyQueuedStore), and the queue-0
worker of one title spent about 3% of its time there (InPlaceReads, vector
growth, malloc and free under AnyQueuedStore).

GuestBufferMemory::InPlaceReadsOverlap walks the same regions (the address
space's base regions, then the build's own, each when bound in place) and
stops at the first overlap. The answer is the same as the listed ranges'.

APS5_NO_READS_OVERLAP_WALK=1 builds the list as before.
2026-11-04 16:17:50 +13:00
Dean 28b72af89b Merge pull request #10668 from meh7an/perf/agc-elide-repeated-fills
perf(agc): elide a repeated fill of a range that still holds its pattern
2026-11-04 11:25:53 +13:00
Yunus Shaikh 8942229a70 Merge main into perf/agc-reuse-address-draws-in-space 2026-11-03 11:27:51 -08:00
Dean Galvin 0d55ab0a9a Merge main 086c0686c8 into #6501 (2a66fdf784) 2026-11-04 08:21:45 +13:00
Dean b52e86f043 Merge pull request #9898 from savvaniss/perf/agc-stores-without-drains
perf(agc): keep constant RAM dumps and unregistered labels on the GPU without draining
2026-11-04 08:10:45 +13:00
Dean 1e658521a0 Merge pull request #12120 from meh7an/perf/agc-depth-transfer-passes
perf(agc): read depth planes into storage images in a compute pass
2026-11-04 05:43:40 +13:00
Savvanis SpyrosandClaude Opus 5.5 f160886325 Merge main into perf/agc-stores-without-drains
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-03 17:37:34 +02:00
Dean Galvin a80d36f86c Merge main 4f41f4c375 into #13858 (5479721abf) 2026-11-03 22:05:50 +13:00
Dean Galvin 5733613724 Merge commit '4f41f4c375f5abb487dbd184fbc150f31994d762' into HEAD
# Conflicts:
#	core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
2026-11-03 21:17:31 +13:00
Dean 81605d59ec Merge pull request #12132 from mrfelek/fix/descriptor-web-lane-index
fix(shader): fold descriptor web paths that hold the lane index or texels
2026-11-03 21:10:04 +13:00
Dean fe69769167 Merge pull request #8963 from EagleBearerYS/perf/agc-shared-bda-fault-buffers
perf(agc): share BDA fault buffers in a per-device arena, with 32-byte slots for report-only programs
2026-11-03 21:07:29 +13:00
Dean 1d922bd0b1 Merge pull request #6185 from ee6aba54/fix/agc-changed-copy-back
fix(agc): copy only the dwords a shader changed back from a GPU-copied buffer
2026-11-03 21:07:12 +13:00
Savvanis SpyrosandClaude Opus 5.5 f070b16201 Merge main into perf/agc-stores-without-drains
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-03 09:18:32 +02:00
Dean bd620b35b5 Merge pull request #15004 from JJenkx/fix/trace-unlabeled-imports-20261102
fix(libc): infer missing call trace library labels
2026-11-03 18:13:10 +13:00
Dean Galvin d6e038b9a2 Merge commit 'f6232fcfda70644495273f6b8dd88cf0603463d6' into HEAD
# Conflicts:
#	core/libs/prx/libSceAgcDriver/CMakeLists.txt
2026-11-03 17:57:56 +13:00
camezaro-intc f4594f90d3 feat(libSceNetCtl): support APS5_NET_DISCONNECTED for simulated offline state 2026-11-02 21:58:28 -06:00
felek b5f1d6b44d docs(debt): say which image results a descriptor web fold takes
The descriptor web entry and APS5_STRICT_DESCRIPTOR_WEBS said "texels";
the fold takes image loads and samples only. A path through an image
gather or an image atomic's returned value still throws.

AI-assisted.
2026-11-02 23:58:12 +01:00
Yunus Shaikh 0b8260120b Merge main into perf/agc-reuse-address-draws-in-space 2026-11-02 14:46:11 -08:00
Dean a5c53e975c Merge pull request #12980 from Gonic0/fix/agc-min-lod-pinned-level
fix(agc): bind a T# minimum LOD through an S# that holds the LOD at 0
2026-11-03 11:35:28 +13:00
Dean 1f272537eb Merge pull request #12764 from Pipodi/perf/flat-private-aperture-1028
perf(recompiler): back compute scratch with a device buffer slot pool
2026-11-03 11:35:12 +13:00
Yunus Shaikh 831bf996ca Merge #8963's main merge into perf/agc-reuse-address-draws-in-space 2026-11-02 10:27:49 -08:00
Dean Galvin 0436cebf95 Merge commit 'a4eca2a056bf3bbbec98ab42e9d28163e4ea9cb8' into HEAD
# Conflicts:
#	core/libs/prx/libc/CMakeLists.txt
2026-11-03 06:36:13 +13:00
Dean Galvin 972242f204 Merge commit 'a4eca2a056bf3bbbec98ab42e9d28163e4ea9cb8' into HEAD
# Conflicts:
#	docs/dev/ENVIRONMENT.md
2026-11-03 06:36:10 +13:00
Dean 94653ac192 Merge pull request #13169 from Rengundom/feat/preparation-input-capture
feat(diagnostics): capture shader inputs before preparation
2026-11-03 06:27:35 +13:00
Dean 8009be68d7 Merge pull request #13159 from Gonic0/perf/agc-gds-on-gpu
perf(agc): back the GDS with anonymous shared memory on integrated GPUs and keep its DMA_DATA on the GPU
2026-11-03 06:27:29 +13:00
Nesyth 2a66fdf784 Merge main into perf/agc-pipelined-sample-dumps 2026-11-02 16:31:10 +01:00
Nicolas GonzalezandClaude Opus 5.5 fe18496c95 feat(agc): apply a T#'s MIN_LOD clamp in the shader without VK_EXT_image_view_min_lod
MoltenVK has no VK_EXT_image_view_min_lod, so since #130 the first T#
with a MIN_LOD clamp above its base level threw. ASTRO BOT (PPSA21564
01.007.000) hits it on the title screen, about four minutes after boot.
MoltenVK does offer shaderResourceMinLod, which maps the SPIR-V MinLod
operand to Metal's min_lod_clamp.

On a device with shaderResourceMinLod, without the extension and
without graphics pipeline libraries, the new target flag
shaderImageMinLod moves the clamp into the shader:

- DescriptorBindingBuilder writes each direct image's clamp, relative
  to the view's base level and bounded by its last level and MAX_MIP,
  as a float specialization constant at MinLodBase + image.
- Samples of direct images take it as the MinLod operand, or as an FMax
  on an explicit LOD when the clamp is above 0, combined with an
  instruction's _cl clamp.
- The image view no longer chains the clamp there; image table entries
  with a clamp are still rejected, and devices with the extension are
  unaffected. APS5_NO_IMAGE_VIEW_MIN_LOD forces the shader lane.
- It throws when the clamp sits above a paired S#'s MAX_LOD or has no
  mip filter, follows an explicit LOD or gradient with a nonzero S# LOD
  bias, pairs with a run-time S# or different min and mag filters, or
  meets image_get_lod, gathers at a clamp of a level or more, or the
  emulated depth-compare or 11:11:10 sample.
- ValidateShaders accepts CapabilityMinLod when the device enables
  shaderResourceMinLod.
- The flag is written after hostInterpolationFirst as request
  serialization version 53; older versions read it as false.

The gaps, including llvmpipe applying the S# bias after the clamp, are
recorded in docs/dev/debt/shader.md.

Tested on an M-series Mac (MoltenVK 1.4.2, x86_64 under Rosetta):
image_sample_lod_clamp samples a T# with fractional and level clamps
over BASE_LEVEL 0 and 1 in both lanes, and fails without the shader
clamp or with an absolute one; graphics, shader disk cache, shader
memory and request serializer tests pass. PPSA21564 renders the title
and reaches the warp sequence after it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-02 11:58:37 -03:00
Giuseppe Magliano 2359fe01bf fix(agc): probe DenormPreserve 32 before requesting it
Since #8697 every device with shaderDenormPreserveFloat32 and an independent
f32 denormal behaviour gets DenormPreserve 32. RADV on Vega (GCN 5, Mesa
26.0.8) miscompiles the preserving forms of the transcendental ops: its
v_log_f32 lowering picks the denormal scale with a v_cndmask_b32 that reads
two SGPRs, which GFX9 cannot do, so log2(2.0) is 25.0 in some lanes and
agc_driver_log_near_one, vop1_float_unary, fp16_overflow and
float16_result_modifiers fail.

ProbeFloat32DenormPreserve runs v_log_f32, v_sqrt_f32, v_rsq_f32, v_rcp_f32
and v_exp_f32 on normal values with and without the mode, after the flush
probe. The mode only changes denormal handling, but Vulkan does not require
these ops to be correctly rounded, so Float32ResultsAgree accepts each of
the 256 result pairs when they are no further apart than the width of the
interval the Vulkan precision bound allows around the exact result (sqrt's
bound inherited from 1.0 / inversesqrt(), an absolute 2^-21 for log2 inputs
in [0.5, 2.0]). When one falls outside, float32DenormPreserve
stays off and the device keeps its default f32 denormal handling.
2026-11-02 14:39:32 +01:00
Dean 46622fff7c Merge pull request #12752 from MarcZX10/feat/language-auto
feat(libSceSystemService): take the console language from the host with ANYPS5_LANGUAGE=auto
2026-11-03 02:39:32 +13:00
Dean aab20786cd Merge pull request #12616 from Raghav314/perf/capture-pending-branches
perf(agc): leave a capture's branch over a pending GPU write unpruned instead of waiting
2026-11-03 02:38:59 +13:00