Commit Graph
7981 Commits
Author SHA1 Message Date
fogydes 919e5f64f1 feat(libSceVorbisDec): export missing firmware Vorbis decoder interfaces 2026-10-20 20:09:32 +05:30
Adrià 75787d2f64 Merge pull request #6696 from al3w0f205/feat/player-selection-dialog-support
feat(libScePlayerSelectionDialog): add common dialog lifecycle and tests
2026-10-20 16:36:40 +02:00
Dean GalvinandJoey Fisher 1cb64823ef Merge main into fix/template-texture-audit
Co-authored-by: Joey Fisher <[email protected]>
2026-10-21 03:35:29 +13:00
Yuri Olive 9a6f7c1bac chore(tools): drop the codepage generator, kept in the PR description 2026-10-20 11:25:58 -03:00
Dean 5f7e30233e Merge pull request #7340 from teepean/perf/write-only-pass-continuation
perf(agc): draws that only store to a buffer continue one render pass
2026-10-21 03:23:29 +13:00
milescovielloandClaude Opus 5.5 f1cafaca07 fix(libSceNgs2): refuse a destroy from inside its own system's render
A voice callback runs during its system's render. A rack or system
destroyed from that callback was freed while the render still walked
it, which corrupted the heap. sceNgs2RackDestroy and
sceNgs2SystemDestroy now throw when the calling thread is rendering
that system; the console's behaviour there is not measured.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 14:23:07 +00:00
Yuri Olive e5543aad64 chore(tools): add the sceImeFilterText codepage generator 2026-10-20 11:20:19 -03:00
Romans PokrovskisandMarcZX100 02dde0f517 feat(agc): expose expanded FMASK for tracked native owners
Import an eight-fragment DCC-cleared owner with disjoint watched metadata, capture its independent CB FMASK address and XOR, and expose expanded indices only for an exact matching native view. Reject standalone compressed reads, descriptor mismatches and metadata writes. Exercise direct/registered/prepared dispatches and invalidation with a cold GPU fixture.

Descriptor metadata normalization builds on Romans Pokrovskis and MarcZX100 work in #4790; standalone CPU decoding remains outside this change. Expanded indices follow AMD PAL c5e800072a32f68b6ccc4422936d96167c6e0728. Written with AI assistance.

Co-authored-by: MarcZX100 <[email protected]>
2026-10-20 17:10:00 +03:00
Adrià 5f7aa5570c Merge pull request #7563 from babyhuey/feat/libkernel_sys-fstatat
feat(libkernel_sys): implement fstatat
2026-10-20 16:08:26 +02:00
Adrià 6e9279c51a Merge pull request #7829 from JJenkx/fix/shader-bda-anchor-read-sync114
fix(shader): retain adjacent anchor byte loads on RADV
2026-10-20 16:05:32 +02:00
Adrià d28cb2a66e Merge pull request #7785 from pushkarreddyy/fix/savedata-umount2-icon-null
fix(savedata): return parameter error on null arguments in umount2, loadIcon and saveIcon
2026-10-20 16:01:09 +02:00
erickerxhalliandClaude Opus 5.5 b70a75d177 docs(libSceImeDialog): state which Term code and parameters the debt means
Say that 0x80bc0002 is this library's sceImeDialogTerm result rather
than a SharpProspero claim, and that the exports still throwing are
declared with shadPS4's parameters except sceImeDialogForTestFunction.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Arbzg9c2DA4DEFKVSvRgYv
2026-10-20 14:00:43 +00:00
XairRrR 4a2aecc21c Merge main into pr-7154 2026-10-20 15:57:09 +02:00
Jan ŠléglandClaude Opus 5.5 8b8219dcef feat(agc): run registered merged hull programs (binary type 3)
A registered type-3 hull program holds the local and the hull part of a
tessellation draw in one binary, addressed through SPI_SHADER_PGM_LO_LS
(SH 0x148) with no SPI_SHADER_PGM_LO_HS: the local part runs on the lanes
below s3[7:0] and writes LDS, an s_barrier follows, and the hull part runs
on the lanes below s3[15:8] and may store the registers the local part
filled. The draw decode asked 0x148 for a type-5 local half, and
PPSA11386 (007 First Light) stopped in its level load with "registered
program refers to an incompatible shader binary type".

The draw decode now gives a registered type-3 program both the local and
the hull role and marks the tessellation configuration mergedHull. The
local stage only passes gl_VertexIndex and gl_InstanceIndex in a 16-byte
record. The hull stage runs the whole program, one invocation per output
control point: v2 and v5 come from the record of control point
min(gl_InvocationID, inputs - 1), v3 is the relative vertex id, and the
LDS becomes a per-control-point output array that a control point writes
in its own record and reads in any record of its patch after the barrier.
Registers live across the barrier stay in the invocation.

The hull stage of a merged program runs at one lane per invocation on
every device (HostSubgroupSize 1). Its lanes are gl_InvocationID, not host
subgroup invocations, so the s_cbranch_execz around the local part tests
the invocation's own lane. With the device's subgroup it took a subgroup
ballot, and lavapipe, whose subgroup stages lack the tessellation control
stage, rejected the draw ("subgroup capability 61 is unsupported for
shader stage 2").

The lowering refuses more input than output control points, LDS writes
outside the own record, reads outside the patch's records, barriers that
some invocations do not reach or that sit in a loop, reads or writes of
another lane's register, outputs beyond the device limits, and fetch
subroutines. Type 3 is prepared with its stage group like type 5 and
takes its float mode from RSRC1_HS. The hull user-data address (SH
0x102/0x103) is optional for a merged program: s[0:1] take it, unchecked,
when the draw sets it and are zero otherwise.

Both stages refer to one binary, so a draw lists each code and header
region once (AppendProgramMemory); a request's memory regions must not
overlap. An indirect draw's record words go into every program whose user
data holds the register, so the hull stage of a merged program reads
them too.

mergedHull is part of the recompile cache key, the draw decode comparison
and the request serialization (version 39).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 15:55:50 +02:00
hypermistandClaude Opus 5.5 906f18f609 fix(libc): convert multibyte text as UTF-8 like the console's C locale
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RbLgECLQ2bpDM7oe2urGZK
2026-10-21 02:51:59 +13:00
Daniele Giovane f923961c66 fix(shader): reject temporary owners for borrowed memory regions 2026-10-20 15:47:24 +02:00
orezraeyandClaude Opus 5.5 2a0f252396 feat(libSceNpManager): accept game presence callbacks while signed out
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 10:43:48 -03:00
Dean 52f7807a55 Merge pull request #6581 from Thomas73737/feat/libscefont-words
feat(libSceFont): implement handle and glyph attributes
2026-10-21 02:43:40 +13:00
Dean 634fad812d Merge pull request #6513 from JJenkx/fix/audio-propagation-preserve-mix
fix(audio-propagation): preserve existing destination mixes
2026-10-21 02:41:53 +13:00
Luis Gerardo Aguilar dc6da1b96a fix(agc): ignore a stencil clear on a target without a stencil plane
A depth-only target has no stencil storage for STENCIL_CLEAR_ENABLE to
write. Titles that clear depth and stencil together on such a target
were rejected; the depth clear and colour writes now proceed. A
read-only stencil plane is still rejected.
2026-10-20 08:41:29 -05:00
erickerxhalliandClaude Opus 5.5 bdebcbde96 feat(libSceImeDialog): close an open dialog in sceImeDialogForceClose
sceImeDialogForceClose threw. It now closes a running or finished
dialog the way sceImeDialogTerm does, without writing the typed text to
the title's buffer, and returns NOT_IN_USE (0x80bc0107) when no dialog
is open. The behaviour follows shadPS4 and the error code is the one
SharpProspero lists for PS5. The ImeDialog guest test covers each case.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Arbzg9c2DA4DEFKVSvRgYv
2026-10-20 13:39:58 +00:00
T3cm0andClaude Fable 5.1 289fd5d7c3 feat(libSceHmd2): answer 18 slot and output-writing exports before initialization as the console does
The hmd2s and hmd2n sweeps left 19 libSceHmd2 exports that either write
into their arguments or take a slot number rather than a pointer first.
A third probe called the writers with zero-filled and with 0xAA-filled
buffers, dumping every byte that changed, and the slot exports with a
first argument of 0, 1, 2, 3, 4, 5, 8, 16, 255 and -1. Before
sceHmd2Initialize, six writers put fixed bytes in their output (a 2 and
a zero byte; 0x2000 and 0x100 as 64-bit sizes; four floats; six or
twelve floats of 0 and 0.5 followed by 0x8a720003), and twelve exports
accept a slot of 0 to 1, 2 or 3 and answer 0x8a720009 above it, with
0, -1, 0x8a721002, 0x8a721003, 0x8a72002c or 0x8a72100f for a valid
slot. They are bound here, by NID, to 14 handlers with the measured
checks, returning their value while the library is not initialized and
throwing if sceHmd2Initialize ever succeeds.

The one export whose answer depends on the contents of an in-out
structure stays unimplemented and is described in the debt file.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-20 08:36:40 -05:00
T3cm0andClaude Fable 5.1 e29cefad8e feat(libSceHmd2): answer 62 pointer-checking exports before initialization as the console does
The hmd2s sweep left 81 libSceHmd2 exports that answer 0x8a720008 to
all-null arguments but something else to zeroed buffers. A second probe
called each of them six times before sceHmd2Initialize, every argument
pointing at a zeroed 16 KiB buffer except one, to find which arguments
are the checked pointers. 62 exports answer 0x8a720008 exactly when one
of a fixed set of arguments is null and their all-present code otherwise:
48 check the first argument, 10 the second, 6 the first two, 2 the first
and third, 2 all six. They are bound here, by NID, to 18 handlers with
that many pointer parameters, each returning ParameterNull for a null
checked pointer and otherwise the measured code (0x8a720004 for 20 of
them, 0 for 11, 0x8a721002 for 10, -1 for 5, 0x8a720009 for 7,
0x8a72002c for 3, and 0x8a720003, 0x8a721003, 0x8a721010 and 0x800d0203
for the rest) while the library is not initialized, throwing if
sceHmd2Initialize ever succeeds.

Left out: 7 exports that write output and 12 whose first argument is a
handle or slot number rather than a pointer. The debt entries list every
NID with its aerolib name where one exists.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-20 08:36:40 -05:00
T3cm0andClaude Fable 5.1 0cf58b569d feat(libSceHmd2): answer 125 exports before initialization as the console does
A sweep of the 281 libSceHmd2 exports on a PS5 (firmware 13.60), each
called from a payload before sceHmd2Initialize once with every argument
null and once with every argument pointing at a zeroed 16 KiB buffer,
found 127 that answer the same code both ways and write nothing. 125 of
them are bound here, by NID, to one handler per answer: 45 return 0, 16
return 0x8a720008, 15 return 0x8a720004, 12 return -1, 10 reprojection
exports return 0x8a72000b, 9 return 0x8a720002, 9 return 0x8a720009, 5
return 0x8a721002 and one each returns 0x8a72002c, 0x8a721003, 0x400 and
0x20000. Each handler returns its measured value while the library is not
initialized and throws if sceHmd2Initialize ever succeeds, because the
initialized behaviour is not measured; since b378541e79 it fails with
UnsupportedFeature here, so these are the answers titles get.

Left out: the export that returns a pointer-like value, the one answering
0x8a72000a (which sceHmd2Initialize also returns for some applications),
the exports that answer differently to null and to zeroed arguments or
write output, the 16 that crashed the probe, and the exports that main,
its aerolib name where one exists.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-20 08:36:21 -05:00
orezraeyandClaude Opus 5.5 1dbf3b4ac2 feat(libScePlayGo): store the language mask scePlayGoSetLanguageMask sets
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 10:35:28 -03:00
Yuri Olive 02998c3bd0 fix(libSceAudio3d): leave the functions #6148 implements 2026-10-20 10:32:08 -03:00
Yuri Olive 2db8581076 Merge branch 'main' of https://github.com/boykopovar/AnyPS5 into feat/audio-missing-exports 2026-10-20 10:32:01 -03:00
Yuri Olive c0af902132 Merge remote-tracking branch 'origin/main' into feat/ime-filter-text
# Conflicts:
#	docs/dev/debt/libSceIme.md
2026-10-20 10:30:49 -03:00
orezraeyandClaude Opus 5.5 812958b096 feat(libSceNpWebApi2): implement the internal and presence initializers
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 10:27:47 -03:00
hypermistandClaude Opus 5.5 b5e9882630 feat(libc): add the wide stream scanf family
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RbLgECLQ2bpDM7oe2urGZK
2026-10-21 02:25:08 +13:00
frankea 73bc20e93d Merge branch 'main' of https://github.com/boykopovar/AnyPS5 into ps5-measured-1340
# Conflicts:
#	docs/dev/debt/libSceAgcDriver.md
2026-10-20 09:21:31 -04:00
Werner cd1efc9fca feat(agc): render into depth mip levels
Decode DB_Z_INFO.MAXMIP and DB_DEPTH_VIEW.MIPID and render into the
selected level of a 64 KiB Z_X mip chain as a surface of its own, at
the level's offset and extent from ComputeElementMipLayout, as color
target mips do. Slices of a mip chain step by the size of the whole
chain. Multisampled depth mips, other swizzles, levels in the packed
mip tail and HTILE on a mip chain still throw. LEGO Builder's
Journey (PPSA05496) stopped at its first scene on
"depth mips (DB_DEPTH_VIEW MIP_LEVEL) is unsupported".
2026-10-20 15:20:31 +02:00
Adrià b5f9c21bbc Merge pull request #7680 from gohansharma79-svg/codex/avplayer-paused-preview-20261019
fix(avplayer): deliver the first paused picture after audio starts
2026-10-20 15:19:02 +02:00
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
milescovielloandClaude Opus 5.5 741e706b19 fix(libSceNgs2): let a rack or system destroy wait for other threads' rack locks
A destroy waited only for another thread's render, so destroying a rack
that another thread had locked freed it under that lock. Destroys now
wait like renders and rack locks do, and the render owner field that
only those waits read is gone.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 13:16:13 +00:00
xXPBSXxandClaude Sonnet 5.5 26f861dd27 feat(libkernel): accept MSG_WAITALL in recv, recvfrom and recvmsg on a stream socket
soreceive_generic keeps a MSG_WAITALL receive on a stream socket waiting until
the buffer is full, the peer closes or an error occurs. The three calls failed
every flag but MSG_PEEK and MSG_DONTWAIT with EOPNOTSUPP. A stream socket now
passes the flag to the host receive; a datagram socket ignores it, as a record
is delivered whole.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-20 15:12:33 +02:00
hypermistandClaude Opus 5.5 9204f9d64f feat(libSceAgcDriver): add the retail debug, capture and GPU reset results
Export 24 absent driver calls with the constant results and output
zeroing of the retail libSceAgcDriver.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RbLgECLQ2bpDM7oe2urGZK
2026-10-21 02:10:55 +13:00
Gabrieljr42 78bf409ec5 feat(libSceAjm): parse CRC-protected and non-stereo MP3 metadata frames
Parse Xing/Info and LAME tags across candidate offsets covering both CRC-protected and unprotected streams, and accept VBRI headers at byte 36 for non-stereo / MPEG-2 frames. Reject non-Layer-3 streams with SCE_AJM_ERROR_INVALID_PARAMETER without throwing.

Progress: sceAjmDecMp3ParseFrame implemented (libSceAjm.native: 19/40 -> 20/40, 50.0%)
2026-10-20 10:08:57 -03:00
Sam 96ff1330eb fix(agc): leave the float-controls probe's pipelines out of compute captures
The start-up f32 denormal flush probe already stays out of the pipeline
counters and the pipeline journal, but APS5_DUMP_COMPUTE_PIPELINES still
captured its pipelines. On a device that runs the probe, every capture
directory gained twelve driver-internal records that count toward the
128-record limit, and agc_compute_pipeline_capture_run found 14 captures
for a fixture with two programs.
2026-10-20 15:01:44 +02:00
Savvanis SpyrosandClaude Opus 5.5 58a2a4962f fix(relinker): follow fs loads and report pointers taken as data between PS4 unwind functions
A relocation or lea target outside the unwind functions of a PS4 image
is now decoded up to its first jump, return or trap, or to the start of
the next unwind function, which also bounds the transfer check of the
tail rule. A target whose run holds an fs:[disp32] access, the form the
linear TLS sweep roots, is followed as code. The other targets taken as
data are counted in one message and kept as entry points that the
Windows TLS rewrite may not overwrite. The analysis merges nested
unwind ranges like the scans.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 15:48:42 +03:00
Savvanis SpyrosandClaude Opus 5.5 1ea49c741f fix(relinker): tighten the syscall skip between PS4 unwind functions
The skip of syscall patterns outside the unwind functions let some real
syscalls through. The scan now merges nested and overlapping unwind
ranges with the instruction scanner's MergeCodeRanges, so a pattern
inside an outer function is refused. A constant syscall number is also
looked for in the bytes in front of the pattern, whatever alignment the
decoding took: a mov eax, mov rax or xor eax, eax that ends at the
pattern or before register moves and zeroings that leave rax alone. The
decoded lookback requires each instruction to end where the next one
starts. Guest modules without PT_SCE_DYNLIBDATA get no unwind ranges,
so their scan stays strict even when their unwind table is read.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 15:48:42 +03:00
Dean 44e3389c88 Merge pull request #7807 from mazen320/fix/windows-stderr-dup2
fix(libkernel): keep host stderr off a guest dup2 onto descriptor 2
2026-10-21 01:45:30 +13:00
shanu337 df9b2fcdcc fix(libSceSystemService): stub sceSystemServiceOpenTournamentOccurrence 2026-10-20 18:13:31 +05:30
Swetabh Singh f3dec86695 feat(libc): implement memmem and memccpy 2026-10-20 18:12:52 +05:30
thuanquangandClaude 4508090000 docs(agc): drop the stale signature note from the ACB atomic GDS NID entry
Co-Authored-By: Claude <[email protected]>
2026-10-20 19:40:52 +07:00
thuanquangandClaude 66a2bfe4c2 docs(videoout): point the buffer label entry at sceVideoOutSubmitEopFlip
Co-Authored-By: Claude <[email protected]>
2026-10-20 19:40:34 +07:00
milescovielloandClaude Opus 5.5 850b807cf2 fix(libSceNgs2): let rack locks and renders exclude each other across systems
Rack locks and renders were tracked per system, so a voice callback
that locked a rack of another system could deadlock with that system's
render, or with a thread holding rack locks in both systems. Rack locks
and renders now exclude each other across threads and systems, as the
single internal lock did, while a thread nests them and other calls go
ahead.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 12:33:33 +00:00
thuanquangandClaude e7d4a818d0 docs(shader): say that the whole ancillary word has the render target index at bits 16-28
Co-Authored-By: Claude <[email protected]>
2026-10-20 19:32:07 +07:00
thuanquangandClaude 8751b7c7ec docs(shader): say that the whole packed ancillary word carries the layer field too
Co-Authored-By: Claude <[email protected]>
2026-10-20 19:30:40 +07:00