Commit Graph
8546 Commits
Author SHA1 Message Date
fogydes 52ac9dc161 feat(libSceContentDelete): export missing firmware content delete interfaces 2026-10-19 10:55:39 +05:30
fogydes fcdf046855 feat(libSceSysmodule): register missing user and internal sysmodule IDs 2026-10-19 10:51:17 +05:30
Dean Galvin 80fc1061c7 docs(env): list APS5_NO_BARRIER_BATCH in the environment reference
The environment-reference check now requires a row for every APS5_* name a pull request reads; main added that check after this branch was written.
2026-10-19 18:05:27 +13:00
ThatsLeo ac14d6317d perf(shader): flush f32 denormals in hardware when a startup probe matches the emulation
Devices with DenormFlushToZero for f32 run the mixed denormal-flush programs with and
without the hardware mode at startup; when every result matches, add, sub, mul, fma,
floor and ceil in the default rounding mode drop their software flush.
2026-10-19 07:00:13 +02:00
Yunus Shaikh 245cec763f Merge main into fix/agc-sample-location-grid-exact
Resolves sameDecode in DrawRegisterKey.cpp, keeping this branch's sample-order comparison and #6530's merged-coverage comparison.
2026-10-18 21:53:18 -07:00
Doğukan Atlıhan 1ad6c746b8 fix(libkernel): replace anonymous Windows stack mappings 2026-10-19 06:42:30 +02:00
ionut27001andClaude Opus 5.5 46f518997e fix(libc): return jrand48 and mrand48 zero-extended as measured on a PS5
In a payload process on a PS5 (firmware 12.70), jrand48 and mrand48
return the high 32 bits of the new 48-bit state zero-extended to the
64-bit long, as FreeBSD 11.0 does, so a result with bit 31 set comes
back between 0x80000000 and 0xFFFFFFFF. Here they sign-extended it, as
FreeBSD 11.1 and later do with an (int32_t) cast. lrand48 and nrand48
already matched the payload process. The tests now pin its results for
three seeds and the first six mrand48 values after srand48(1), compare
with the host as 32-bit values, and the debt entry records the
measurement.

AI-assisted: yes

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 07:09:32 +03:00
Adrià 3904ce6cf5 Merge pull request #6505 from keravyn-ops/fix/htile-pending-fill
perf(agc): take the HTILE words pending fills leave instead of reading them
2026-10-19 06:03:19 +02:00
Adrià d72c9e3728 Merge pull request #6527 from SandstromPL/feat/libscediscmap
feat(libSceDiscMap): report no disc bitmap from the two disc map queries
2026-10-19 06:02:18 +02:00
Yunus Shaikh acf80cc109 docs(agc): describe the 2x checkerboard in the sample-location debt entry without title ids 2026-10-18 20:58:27 -07:00
Yunus Shaikh a932bcc7d6 fix(agc): take shader cache FormatVersion 41 and word the grid-reference skip as a device limitation
main took FormatVersion 40 with #6486, so this branch moves to 41. The grid-reference test's skip now reads as a device that does not keep depth at custom sample locations, the wording tools/check_skips.py accepts as a device limitation. The sample-location debt entry describes the 2x checkerboard without naming titles.
2026-10-18 20:57:10 -07:00
Yunus Shaikh 18463ff5c2 Merge main into fix/agc-sample-location-grid-exact
#4650 took request serialization version 35 for its depth remap flag, so this branch's sample order moves to 36. The serialization tests drop #4650's trailing byte from every older version they build, as main's do, along with the iteration fields and the sample order.
2026-10-18 20:56:57 -07:00
elliot 11a7b61d72 fix(agc): split oversized dispatches with workgroup offset specialization
A dispatch over maxComputeWorkGroupCount was split into vkCmdDispatchBase
chunks whose base reached the limit, which VUID-vkCmdDispatchBase-baseGroupX-00421
forbids, and NVIDIA refused the split outright.

Compute modules now declare WorkgroupOffset specialization constants (default 0)
that the recompiler adds to WorkgroupId and GlobalInvocationId and keeps
unmaterialized. Each chunk is recorded with vkCmdDispatch from group 0, bound to
a pipeline variant specialized with the chunk's base. The NVIDIA throw is gone;
device-memory LDS splits still throw.

Fixes #7375
2026-10-18 22:54:33 -05:00
Dean 3ddbc4accc Merge pull request #4650 from Mouad-Scriptz-0/feat/agc-depth-range-remap
feat(agc): remap a viewport depth range the device cannot express into the vertex shader
2026-10-19 16:52:31 +13:00
Yunus Shaikh 21b14210ff Merge main into perf/agc-remember-evicting-refusals
The host-import debt entry takes #6472's budget sentence and keeps this branch's sentence on remembered refusals.
2026-10-18 20:40:45 -07:00
Nithishvelan M 78c945806c docs(libSceVrSetupDialog): clarify PPSA12544 import and export database status 2026-10-19 09:10:42 +05:30
Yunus Shaikh 0644811579 Merge main into perf/agc-host-import-aligned-blocks
The host-import debt entry takes #6472's budget sentence and keeps this branch's sentence on remembered refusals.
2026-10-18 20:40:40 -07:00
Yunus Shaikh 3a9bc814c2 Merge main into perf/agc-host-import-blocks
importBudget keeps this branch's configuredBudget split and takes #6472's HostImportBudget for the default; the host-import debt entry takes #6472's budget sentence next to this branch's report and refusal sentences.
2026-10-18 20:38:28 -07:00
Adrià FranchandClaude Sonnet 5.5 b04f7b81f3 docs: document APS5_NO_PENDING_HTILE_FILLS in ENVIRONMENT.md
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 05:16:10 +02:00
Leonardo 7fdb261e67 feat(libSceVoiceQoS): implement packet and local endpoint attribute functions 2026-10-19 05:12:36 +02:00
klosixgaming-arch 0d4cbd538b fix(agc): compare a CB resolve's sample count with the rasterizer only under MSAA_ENABLE
PPSA08270 (Eternights) stopped after its story intro with "AGC graphics:
CB resolve from a target whose sample count differs from the
rasterizer's". It resolves a 4x 512x512 target into a single-sample one
with PA_SC_MODE_CNTL_0.MSAA_ENABLE off while PA_SC_AA_CONFIG still holds
2x from earlier draws. Without MSAA_ENABLE the scan converter does not
use PA_SC_AA_CONFIG's sample count, so the resolve takes its sample
count from CB0 as it already does when PA_SC_AA_CONFIG is single-sample.
2026-10-19 03:06:07 +00:00
Adrià ba63d412cd Merge pull request #6511 from JJenkx/fix/ssl-ps5-reader-context
feat(ssl): implement context-scoped PS5 certificate PEM reading
2026-10-19 05:01:14 +02:00
Adrià e488debe6d Merge pull request #6508 from fogydes/feat/agc-dcb-atomic-gds
feat(libSceAgc): implement DCB atomic GDS operations and correct size accessor
2026-10-19 04:59:06 +02:00
Dean fa0ac6d5ce Merge pull request #5926 from xXPBSXx/fix/agc-vertex-fetch-overhang
fix(libSceAgcDriver): zero the overhanging record of a vertex fetch
2026-10-19 15:56:44 +13:00
Yunus Shaikh e19cf1ac21 Merge main into fix/agc-heap-mirror-replan-unwatched
The host-import debt entry takes main's budget sentence and keeps this branch's heap-mirror sentence.
2026-10-18 19:55:25 -07:00
Adrià c8e3fcb703 Merge pull request #6507 from karanvora2599/perf/videoout-unordered-cpu-flips
perf(videoout): don't hold a flip thread's CPU flips behind queued work
2026-10-19 04:49:51 +02:00
Adrià d23ed99f84 Merge pull request #6472 from ahir061/fix/agc-host-import-budget-half-heap
fix(agc): keep half the host heap out of the host import budget
2026-10-19 04:49:45 +02:00
To3akaRin 7e8aa10ae6 fix(tools): strip dependency options before syntax checks 2026-10-19 10:43:00 +08:00
Adrià 8a526d4495 Merge pull request #6504 from 0xRickx/feat/libsceimedialog-host-keyboard
feat(libSceImeDialog): take the dialog's text from the host keyboard
2026-10-19 04:39:46 +02:00
Yunus Shaikh 4d52a66fd3 Merge main into perf/agc-remember-evicting-refusals
Main's sameRange for a failed import now takes the import budget, as the HostImport overload does, so a recorded failure is compared against the run the budget would import again.
2026-10-18 19:39:07 -07:00
Yunus Shaikh af6f2ecab8 Merge main into perf/agc-host-import-aligned-blocks
Main's sameRange for a failed import now takes the import budget, as the HostImport overload does, so a recorded failure is compared against the run the budget would import again.
2026-10-18 19:38:07 -07:00
Adrià FranchandClaude Sonnet 5.5 5d5b252bb6 docs(libSceAgc): update TechnicalDebt line for sceAgcDcbAtomicGds
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 04:37:35 +02:00
Adrià ccbd40240f Merge pull request #6497 from giovanniadamo/feat/libsceregmgr
feat(libSceRegMgr): add sceRegMgrNonSysGetInt stub
2026-10-19 04:36:35 +02:00
Yunus Shaikh abf42b2214 Merge main into perf/agc-host-import-blocks
Main's sameRange for a failed import now takes this branch's import budget, as the HostImport overload does, so a recorded failure is compared against the run the budget would import again.
2026-10-18 19:36:25 -07:00
Dean Galvin 41764f27ac Merge main into pr-4650
# Conflicts:
#	core/shader/recompiler/ShaderDiskCache.cpp
2026-10-19 15:36:07 +13:00
Adrià 25648aa121 Merge pull request #6494 from Ondra97/codex/fix-net-accept-inherited-mode
fix(libSceNet): inherit nonblocking mode on accepted sockets
2026-10-19 04:30:22 +02:00
milescovielloandClaude Opus 5.5 42f4382bcf fix(libScePlayGo): list chunks 0 to 999 when only a scenario file is present
A dump with sce_sys/playgo-scenario.json and no chunk table already answers
every chunk id as installed, but scePlayGoGetChunkId listed only chunk 0.
Ghost of Tsushima (PPSA02225) builds its set of installed chunks from that
list and never reads its English audio, two of its music archives or its
opening movie. scePlayGoGetChunkId now lists ids 0 to 999, the room that
title passes.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 02:27:00 +00:00
JJenkx f4630b2144 docs(ssl): record PS5 reader call evidence and remaining limits 2026-10-18 22:17:37 -04:00
Adrià Franch c567384e83 docs(debt): record sceAgcDcbContextStateOp deviations 2026-10-19 04:13:20 +02:00
AhirandClaude Opus 5.5 f970620d95 fix(agc): keep half the host heap out of the host import budget
Imports, type-3 mirrors and the buffers and textures placed in host memory share the driver's system memory heap. On Windows that heap is half the physical memory, so on a 16 GiB machine the old budget (the heap less 2 GiB) let imports hold about 6 of its 8 GiB, and host buffer allocations then overflowed into the 256 MiB device-local host-visible heap and failed. The budget now reserves the larger of 2 GiB and half the largest host heap.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 04:11:15 +02:00
Adrià 40393b0f95 Merge pull request #6487 from klosixgaming-arch/fix/pthread-detach-joiner
fix(libkernel): refuse to detach or rejoin a thread that is being joined
2026-10-19 04:03:57 +02:00
Adrià b4d517ed10 Merge pull request #6334 from hypermoist/feat/libc-dinkumware-atomics
feat(libc): implement the remaining Dinkumware _Atomic helpers
2026-10-19 04:03:52 +02:00
XairRrR 132e69d595 fix(agc): drop the depth plane images of older surfaces a new plane overlaps
Each depth surface stores its plane through a storage image of its own,
kept for the surface's life. A title that switches output resolution
binds new depth targets over memory where the previous targets' planes
were, and the old images stayed live there. Storage images over the same
memory lend each other pending results, so a later store of the new
plane did not reach guest memory and buffer reads kept seeing the old
depth. A bind now drops the images and the pending store of older
surfaces whose planes overlap its plane over another range. A
same-range surface (another stencil or HTILE address) keeps its image.
The scan runs only when a surface or plane image was created since the
surface's last scan.

AI-assisted: yes
2026-10-19 03:49:59 +02:00
XairRrR 84e3b73f16 fix(agc): keep depth planes coherent with buffer reads and writes of their memory
A depth surface lives in its Vulkan image, so a buffer read of its depth
plane saw guest memory the surface never wrote, and a buffer write into the
plane never reached the surface: binding the target again kept the old
depth.

- A single-sample 32-bit depth surface with the 64 KiB Z swizzle
  (DB_Z_INFO SW_MODE 24) keeps a storage image in that swizzle over its
  plane. A bind that writes or fast clears depth marks the plane stale;
  FlushDepthPlanes copies the depth into the storage image and stores it
  into guest memory. It runs from StorageTexture::FlushPending, when a
  buffer upload finishes (over its regions and address space), and before
  a dispatch for each GuestBuffers V# it binds (a cached dispatch reads
  them without an upload). A reused build flushes its in-place buffer
  regions, and an image lookup flushes the range it reads, as do the
  write-stamp proofs that let a cached image or a reused build skip that
  lookup: a stale plane's memory looks unchanged to them.
- Stale planes are kept as ranges under their own lock with an atomic
  hull; a flush that overlaps none returns without the GPU and surface
  locks.
- Every bind of such a surface, and every flush of its stale plane,
  collects the plane's writes. Written by someone else since the surface's
  previous bind, store or reload, the plane is reloaded from memory
  instead of stored, so a guest write after a depth draw is not
  overwritten by that draw's late store. A pending HTILE fast clear wins
  over the reload.
- A color target flushes the stale planes under it before it retires their
  surfaces, so a target that loads or blends reads the stored depth. A
  retired surface's plane is no longer stale: a later flush never stores
  its old depth over what the new owner of the memory wrote.
- The depth surfaces lock is recursive: a store reached from a flush under
  DepthSurfaceTexture re-enters it.
- Draws pass whether they write depth, so read-only binds do not mark the
  plane stale.

PPSA05684 copies its main depth plane into two ping-pong planes with a
buffer compute, draws the cage's depth into them and fogs its menu from the
result; without this the copy carried nothing and the fog covered the
cliff and the cage.

agc_driver_depth_plane_buffer_memory draws depth 0.5 into such a plane,
fetches vertices from it (the plane must hold 0.5), writes 0.75 into the
memory and draws at 0.5 under LESS (must pass), then checks the depth
written after the reload reaches memory again. On a new plane it writes
memory after a depth draw and before any store: a buffer read must keep
the guest bytes and the next bind must reload them; a guest write before a
depth draw must then lose to that draw. A linear texture at an offset into
a plane must read what memory holds after a flush, also when it is viewed
through its cached storage image after another depth draw. On a plane with
HTILE, an HTILE fast clear after a guest write must win. A color target
that blends ZERO/ONE over a plane just drawn at 0.5 must write back the 0.5
it loaded.

AI-assisted: yes
2026-10-19 03:49:59 +02:00
xXPBSXxandClaude Sonnet 5.5 55b197d31c docs(debt): describe the vertex fetch overhang case without the title
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 03:47:33 +02:00
xXPBSXxandClaude Sonnet 5.5 d01548e81b fix(libSceAgcDriver): zero the overhanging record of a vertex fetch
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 03:47:33 +02:00
PhialsBasementandClaude Opus 5.5 54314ff8a4 test(libSceAgc): find MRT0 through the compact versioned register defaults
The versioned tables hand out compact 12-byte type entries since #7681,
and the MRT0 checks on them were dropped with the pairs. The walk now
takes the entry size: MRT0 is block 78 of the legacy pairs and of the
compact version 13 table, block 73 of version 10, and every versioned
table from 4 holds it. The debt entry names the layout of each entry
point.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 12:39:25 +11:00
Adrià 23629c2847 Merge pull request #6454 from EagleBearerYS/perf/shader-image-table-reuse-v3-pr
perf(agc): share one image table per heap and write epoch through capture, compare, resolution and descriptors
2026-10-19 03:39:03 +02:00
Dean Galvin 4d4ae6e5eb Merge main into pr-4650
# Conflicts:
#	core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
#	core/shader/recompiler/ControlFlow/src/RequestSerializer.cpp
#	core/shader/recompiler/tests/RequestSerializerTests.cpp
2026-10-19 14:32:36 +13:00
klosixgaming-arch 30cbb2fd66 fix(libkernel): refuse to detach or rejoin a thread that is being joined
PPSA34015 (EA SPORTS FC 27) stopped with "Joining guest thread: Access is
denied": scePthreadJoin waited on a thread that another call released
under it, and then waited on its closed handle. As FreeBSD 11.4's
thr_join.c and thr_detach.c do with the joiner field, scePthreadDetach
now returns EINVAL while a thread waits to join the target, a second
concurrent scePthreadJoin returns EOPNOTSUPP, a cancelled join backs out,
and a completed join leaves the thread detached.
2026-10-19 03:30:58 +02:00