Commit Graph
21299 Commits
Author SHA1 Message Date
Dean 04a9eb4fa2 Merge pull request #15465 from mrfelek/fix/snapshot-allocation-churn
fix(agc): accept a resource snapshot when only unrelated allocations moved
2026-11-04 10:08:59 +13:00
Dean 0e7d4a25ef Merge pull request #13021 from JAB-dev/feat/agc-publish-native-d32s8-guest-planes
feat(agc): publish a written native multisample D32S8 surface to its guest planes on a guest read
2026-11-04 10:08:52 +13:00
Dean db0f0c4d44 Merge pull request #11586 from JJenkx/feat/http2-ssl-callback
feat(http2): deliver TLS certificate verification callbacks
2026-11-04 10:08:47 +13:00
Dean 086c0686c8 Merge pull request #13207 from kyon-eth/feat/media-app-storage-320-exports
feat(libSceMediaAppSharedStorage): declare 16 callable exports
2026-11-04 08:13:39 +13:00
Dean 5a20baa0cc Merge pull request #15466 from JJenkx/fix/agc-drop-depth-results-over-unmapped-memory
fix(agc): drop depth and stencil plane results over memory unmapped since they were drawn
2026-11-04 08:13:33 +13:00
Dean 2cb1a5256f Merge pull request #15457 from atinseau/codex/agc-kept-blocks-reupload
fix(agc): forget the blocks kept for the CPU when an upload restamps their units
2026-11-04 08:13:27 +13:00
Dean f5736cf169 Merge pull request #15437 from oneandonlydean/fix/vouched-lookups-arena-block
test(agc): allocate the image table cache bounds test block in the guest arena on Linux
2026-11-04 08:13:21 +13:00
Dean beb03a06a1 Merge pull request #15436 from JJenkx/fix/linux-main-stack-adopted-attributes-20261103
fix(libkernel): refresh adopted thread bounds when entering the main stack
2026-11-04 08:13:16 +13:00
Dean 6d22701a29 Merge pull request #15321 from MarcZX10/r4/r50-ajm-bodies
fix(libSceAjm): check batch job buffer counts before the 8-bit cast
2026-11-04 08:13:04 +13:00
Dean 45ba19f149 Merge pull request #15318 from MarcZX10/r2/r54-video-decoders
fix(libSceVdecsw): consume rejected units and reject oversized access units
2026-11-04 08:12:58 +13:00
Dean bd4a6078d8 Merge pull request #15299 from Prophet069/fix/agc-key-miss-attribution
fix(agc): attribute resource key misses past the first binding
2026-11-04 08:12:51 +13:00
Dean 3c0794a780 Merge pull request #15298 from Prophet069/fix/agc-staging-shadow-budget
fix(agc): leave written regions unstaged while device-local memory is short
2026-11-04 08:12:46 +13:00
Dean 084631c345 Merge pull request #15292 from olegon85/feat/libscehttp-dbg-setprintf
test(libSceHttp): pin the supplied-module answer of sceHttpDbgSetPrintf
2026-11-04 08:12:40 +13:00
Dean 6eb5665c38 Merge pull request #15287 from AlexWhitehouse/feat/shader-sdwa-int-to-f32-destinations
feat(shader): accept SDWA destination selects on v_cvt_f32_i32 and v_cvt_f32_u32
2026-11-04 08:12:34 +13:00
Dean ff42cf8fdc Merge pull request #15273 from Matt10n3/codex/appcontent-quota-overflow
fix(libSceAppContent): reject overflowing download quotas
2026-11-04 08:12:22 +13:00
Dean b87467e812 Merge pull request #15257 from hyvvs/fix/avplayer-http-transport-timeout
test(avplayer): allow HTTP transport CI load margin
2026-11-04 08:12:16 +13:00
Dean 183b3ce70a Merge pull request #15251 from BunnyFl/fix/libscenpmanager-sandbox-info
feat(libSceNpManager): answer sceNpGetSandboxInfo as firmware 13.42 does in the production environment
2026-11-04 08:12:06 +13:00
Dean 590c04615c Merge pull request #15248 from GiannisG1/test/htile-mask-lifetime-other-device-before-reimport
test(agc): check the other device's HTILE before the first device imports again
2026-11-04 08:12:00 +13:00
Dean 6cd2899cc6 Merge pull request #15244 from AlexWhitehouse/feat/shader-sdwa-integer-bitscan-destinations
feat(shader): accept SDWA destination selects on integer bit scans and bfrev
2026-11-04 08:11:55 +13:00
Dean 7960a0bcb2 Merge pull request #15237 from johnohhh1/fix/tests-file-position-unicode-temp
fix(tests): open file position scratch stream under Unicode TEMP
2026-11-04 08:11:39 +13:00
Dean e687143e68 Merge pull request #15229 from al3w0f205/test/voicechat-request-action-and-numbered-requests
test(libSceVoiceChat): cover offline responses for sceVoiceChatRequest0, sceVoiceChatRequest1 and sceVoiceChatRequestAction
2026-11-04 08:11:34 +13:00
Dean b11031f512 Merge pull request #15155 from Pipodi/perf/spanned-ballot-one-barrier
perf(shader): build a spanned wave's ballot from the native subgroup ballot
2026-11-04 08:11:28 +13:00
Dean 88844509d6 Merge pull request #14998 from JJenkx/fix/videodec2-pps-replacement
fix(libSceVideodec2): keep AVC picture info after a PPS is replaced under the same SPS
2026-11-04 08:11:22 +13:00
Dean e2b29c8047 Merge pull request #14880 from Gonic0/perf/agc-scalar-guard-aligned
perf(shader): check only the carry on scalar buffer reads bound to their exact range
2026-11-04 08:11:15 +13:00
Dean c915f22fd8 Merge pull request #14866 from milescoviello/fix/bda-stop-lane-reads
fix(shader): keep pixel invocations running after a BDA fault in a program that reads lanes by index
2026-11-04 08:11:05 +13:00
Dean 723ee06871 Merge pull request #14799 from chitters2004/perf/guarded-committed-read
perf(agc): read committed guest pages directly on Windows
2026-11-04 08:10:59 +13:00
Dean 0e7df59efb Merge pull request #11557 from JAB-dev/feat/agc-staged-packed-partial-writes
feat(agc): draw partial writes of multisampled 4_4_4_4 targets into a temporary target
2026-11-04 08:10:52 +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 0bf0563442 Merge pull request #9183 from fma-rc/fix/shader-gather-3d-volume
fix(shader): gather a 3D image's image_gather4_lz from one slice as measured
2026-11-04 08:10:40 +13:00
mrfelek 5061d3e9ca fix(agc): retry a resource snapshot when a page it read changed backing
The snapshot check that let Materialize accept an attempt during which the
guest allocation generation moved looked only at the registered image
views. A remap of the memory the capture read descriptors from left those
views unchanged, so the attempt was accepted with descriptor words read
before the remap. The generation check on main did not cover this either:
ShaderMemory keeps the pages it read across attempts, so a retry read the
same cached words.

ShaderMemory now records the guest allocations behind each page when it
first reads it. The runtime hook, now snapshotCurrent, drops every page
whose allocations changed, so the next attempt reads it again, and accepts
the attempt only when no page changed and the image views are current.

agc_shader_memory gains a directly bound sampled array image case through
the real CaptureRegisteredViewsCurrent (an unrelated mapping during the
attempt is accepted and keeps the view, a resize of the image's own range
is retried) and a capture whose descriptor page is remapped mid-capture,
which must return the descriptor written after the remap.

AI-assisted.
2026-11-03 17:58:17 +01: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
Dean 7f43f9cb1f Merge pull request #11901 from 00xDisaster/fix/dcc-key-proof-cache
perf(agc): reuse sampled DCC key proofs across scans
2026-11-04 05:43:34 +13:00
Dean 31ab214934 Merge pull request #11002 from SandstromPL/fix/libkernel-guest-sigpipe
fix(libkernel): let a guest ignore or catch SIGPIPE on Linux
2026-11-04 05:43:27 +13:00
Dean e154438fc4 Merge pull request #10159 from EagleBearerYS/port/fable-fix-pending-key-proof
fix(agc): keep a DCC target's refresh proof while its keys are pending driver stores
2026-11-04 05:43:20 +13:00
Dean 6457b9a0e4 Merge pull request #9672 from ntamas94/up/ps4-depth-sample-extent
fix(libSceAgcDriver): sample a PS4 depth buffer through a T# smaller than its padded extent
2026-11-04 05:43:13 +13:00
Dean 16c425c5c5 Merge pull request #8748 from LeandroLP23/perf/agc-pool-host-placed-device-buffers
perf(agc): keep device buffers placed in host memory for reuse while the device heap is full
2026-11-04 05:43:06 +13:00
Dean 798d61627a Merge pull request #8346 from MarrasFederico/feat/appinstutil-no-install
feat(libSceAppInstUtil): answer for an installer service that never installs
2026-11-04 05:43:01 +13:00
Dean 3a2ce76ace Merge pull request #6273 from SoRadGaming/perf/windows-widen-collects
perf(agc): widen small epoch collects to their 64 KiB block on Windows
2026-11-04 05:42:55 +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
JJenkxandClaude Opus 5.5 ce8aaf32db test(agc): check a pending depth fill and a partial unmap against a remapped plane
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-03 09:15:56 -05:00
JJenkxandClaude Opus 5.5 317296719d fix(agc): order unmaps against a plane's draws and clears, and drop only the depth units they cover
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-03 09:15:56 -05:00
Nicolas GonzalezandClaude Opus 5.5 434c5429ea test(agc): read through an oversized V# before any store
Scalar and vector loads through a present oversized unregistered V#
must return 0 before anything is stored through it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-03 11:15:21 -03:00
Nicolas GonzalezandClaude Opus 5.5 abe6cb3683 fix(agc): zero the placeholder of an oversized V#
A present V# beyond the storage buffer range is bound to its own
placeholder, which was created without a fill. A new device allocation
or a pooled block is not zero, so loads through such a V# read
uninitialized or stale bytes instead of 0. Zero it like the empty
buffer.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-03 11:15:21 -03:00
Nicolas GonzalezandClaude Opus 5.5 4284c39bc3 fix(shader): keep the size check of scalar reads through a V# whose size is not whole DWORDs
Where robust loads are not exact, a driver may round a binding's range up
to a DWORD (RADV does), so a V# of 7 bytes gets a length of 2 DWORDs and
the length check passes the DWORD at byte 4 that the V# size excludes.
Specialize the low two bits of the V# size in the free fourth word of the
buffer's specialization slots, key the binding plan and the result memo
on it, and keep the carry-only guard only when both the base and the size
are whole DWORDs.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-03 11:15:20 -03:00
Nicolas GonzalezandClaude Opus 5.5 207b88fca9 test(agc): give the mock context the placeholder of an oversized V#
The mock graphics context set only the null V# placeholder, so binding an
unregistered V# past the range limit now found no buffer.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-03 11:15:20 -03:00
Nicolas GonzalezandClaude Opus 5.5 7bbbf70eda fix(agc): bind a present V# beyond the storage buffer range to its own placeholder
A present V# whose size exceeds maxStorageBufferRange and whose base is not
registered was bound to the same 16-byte placeholder as a null V#. Its
guest checks pass, so a store through it could write that placeholder,
and a later scalar read through a null V# (which now relies on the length
check alone) would return the stored word instead of 0. Bind such a V# to
a separate placeholder, so the zeroed one is only bound for V#s the guest
checks treat as not present and no store reaches it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-03 11:15:20 -03:00
Nicolas GonzalezandClaude Opus 5.5 b6c87fa45f perf(shader): check only the carry on scalar buffer reads bound to their exact range
A scalar buffer read through a static V# checks the carry, that the V# is
present and the offset against the V# size in 64 bits, and then the
offset against the binding's length. When the V# base is DWORD aligned,
the binding starts at the base and spans the V# size (less where it is
cut), and a V# that is not present is bound to the empty placeholder, so
the length check alone gives the same value once that placeholder reads
as zero. Zero the placeholder when it is created and keep only the carry
check there. A base off a DWORD boundary keeps every check, since its
view is rounded up a DWORD. Devices with exact robust loads have no
length check and are unchanged.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-03 11:15:20 -03:00
JJenkxandClaude Opus 5.5 e5efdda687 test(videodec2): keep the other-SPS check from requiring a refusal
A PPS that refers to a second SPS is valid H.264; the decoder only does
not read picture metadata from it yet. The check now keeps what it had
before: nothing is written past the declared size, and a query that
throws changes nothing but the validity word.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-03 08:17:19 -05:00
mrfelek 9e07f78acb fix(agc): accept a resource snapshot when only unrelated allocations moved
ResourceMaterializer::Materialize retried whenever the guest allocation
generation moved during an attempt, and threw "runtime resource snapshot
did not stabilize" after three. Any allocation change moves it, so a
title that maps memory while it loads can move it during every attempt.
PPSA22408 aborted that way during loading in 2 of 2 runs with #11346 and
its COND_INDIRECT_BUFFER change, and in about 1 of 3 otherwise.

A new SrtRuntime hook, imageViewsCurrent, checks whether the image views
a snapshot registered still match their allocations. The driver backs it
with CaptureRegisteredViewsCurrent, the check its dispatch cache already
uses. Materialize accepts an attempt whose generation moved when the
check passes, and retries as before when it fails or no hook is set.

AI-assisted.
2026-11-03 14:15:48 +01:00
atinseau 8589151274 fix(agc): forget the blocks kept for the CPU when an upload restamps their units
#14302 records the blocks a storage write-back keeps for the CPU with the
unit's generation, and keptForCpu holds while the unit keeps that
generation: new GPU results then leave the unit's pending-since as it
was, so a CPU store made before them still wins at the next write-back.
A re-upload ends the record by giving the unit a new generation. On
memory outside the write watch the generation is 0 before and after the
upload, so the record held for good: every later result of the unit kept
the pending-since of the first, the CPU store that the upload had just
taken counted as newer than the new results, and the next write-back
kept the CPU's bytes over them.

The contention checks of agc_driver_image_atomics show it: their texel is
in a global array outside the write watch. After the image_atomic_add
check, the umax check rewrites the texel while the add's results are
pending, the umax dispatch keeps those bytes and re-uploads them, and the
read-back dispatch kept them again, so the texel read back its initial 5
instead of the largest stored value.

An upload now forgets the kept blocks of each unit it restamps, since the
image takes the guest bytes there.
2026-11-03 13:07:17 +01:00