Commit Graph
14017 Commits
Author SHA1 Message Date
Dean 6e2c1f8992 Merge pull request #965 from hugodearaujo/feat/agc-async-cond-exec-patch
feat(libSceAgc): implement the async COND_EXEC patches
2026-10-07 15:21:47 +13:00
Dean 8545f330f1 Merge pull request #963 from JAB-dev/feat/agc-registration-max-name-length
feat(libSceAgcDriver): implement sceAgcDriverGetResourceRegistrationMaxNameLength
2026-10-07 15:21:05 +13:00
Dean 8cb1667cd0 Merge pull request #941 from ThisIsAkill/fix/agc-sampler-unused-border-table
fix(agc): accept a table border colour when no axis uses a border mode
2026-10-07 15:20:24 +13:00
Dean 990c69645d Merge pull request #936 from CnRJay/feat/agc-write-data-patch
feat(libSceAgc): implement the WRITE_DATA destination and cache policy patches
2026-10-07 15:19:43 +13:00
Dean 2129a6ef29 Merge pull request #1001 from Dextroid17/fix/application-heap-finalize-order
fix(libc): register the application heap finalizer when libc loads
2026-10-07 15:19:33 +13:00
Dean f8975a8ef8 Merge pull request #1015 from hugodearaujo/feat/agc-dcb-end-of-shader-action-size
feat(libSceAgc): implement sceAgcDcbQueueEndOfShaderActionGetSize
2026-10-07 15:18:50 +13:00
Dean e28b9f4b94 Merge pull request #977 from hugodearaujo/feat/agc-driver-cond-write
feat(libSceAgcDriver): execute COND_WRITE
2026-10-07 15:18:09 +13:00
Dean f1efcc6786 Merge pull request #975 from hugodearaujo/feat/agc-cb-cond-write
feat(libSceAgc): implement sceAgcCbCondWrite
2026-10-07 15:17:27 +13:00
Dean c0eb929c09 Merge pull request #930 from ebarr24/fix/relinker-dynamic-segment-bounds
fix(relinker): reject malformed dynamic segments
2026-10-07 15:16:45 +13:00
Dean 293d1218e9 Merge pull request #684 from nicolasabosch/fix/windows-import-module-binding
fix(relinker): bind Windows imports to their declared modules
2026-10-07 15:16:03 +13:00
Dean e4048a0989 Merge pull request #709 from merwie/fix/videoout-unsupported-output-mode
fix(videoout): report unavailable output modes instead of throwing
2026-10-07 15:15:22 +13:00
Dean 8789a8d1db Merge pull request #978 from ebarr24/codex/libc-memcpy-s-overlap
fix(libc): reject overlapping memcpy_s ranges
2026-10-07 15:15:11 +13:00
Dean a2073010c4 Merge pull request #972 from ebarr24/codex/libc-fscanf-abi
fix(libc): translate Windows fscanf guest arguments
2026-10-07 15:14:30 +13:00
Gjon Gojcevic 1bdc37bb86 test(libSceNgs2.native): write the ParseWaveformFile test file where the guest path resolves
On Linux every absolute guest path is resolved under the working directory, so the temporary file in the host temp directory was not found. The test now asks ResolvePath_nid_no_patch for the host path of a guest path and writes the file there.
2026-10-06 22:14:23 -04:00
Gjon Gojcevic 74a7a1d9f1 fix(libSceNgs2.native): take (path, offset, info) in sceNgs2ParseWaveformFile and reject PCM data that does not fit
The call site of PPSA21402 sets only three argument registers, so the function has no size parameter. A data chunk that runs past the buffer or ends inside a frame returns INVALID_WAVEFORM_DATA instead of being shortened. The test no longer writes padding from a string literal.
2026-10-06 22:14:23 -04:00
Gjon Gojcevic 64230cf95a feat(libSceNgs2.native): implement sceNgs2ParseWaveformFile and parse 16-bit PCM waveforms 2026-10-06 22:14:23 -04:00
Dean 87ab98b9e9 Merge pull request #968 from ebarr24/codex/libc-stdio-binary
fix(libc): preserve guest stdio bytes on Windows
2026-10-07 15:13:48 +13:00
Dean a0f79d5b4f Merge pull request #962 from JAB-dev/feat/ngs2-plain-module
feat(libSceNgs2): build libSceNgs2 from the libSceNgs2.native implementation
2026-10-07 15:13:07 +13:00
hugodearaujoandClaude Opus 5.5 425ed24795 feat(libSceAgc): implement sceAgcDcbClearState
Write the 2-dword CLEAR_STATE (0x12) packet with a 4-bit command, the
packet the driver already validates and executes by restoring the
initial context registers.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 23:06:15 -03:00
Dean 66e0a1e9c5 Merge pull request #1019 from fisherjoey/feat/agc-semaphore-memory-register-multiple
feat(agc): declare sceAgcSetSemaphoreMemory and sceAgcDriverRegisterMultipleResources
2026-10-07 15:04:53 +13:00
hugodearaujoandClaude Opus 5.5 8ab5fab84a feat(libSceAgc): implement sceAgcDcbSetCfRegisterDirect and RangeDirect
Write SET_CONFIG_REG (0x68) packets like the context, shader and user
config register setters: one register from a ShaderRegister, or a range
of values at an offset.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 22:52:29 -03:00
Dean 5f96e1e040 Merge pull request #1018 from Raghav314/feat/ajm-resample
feat(ajm): implement sceAjmBatchJobSetResampleParameters and sceAjmBatchJobGetResampleInfo
2026-10-07 14:47:49 +13:00
hugodearaujoandClaude Opus 5.5 54eeadb3a2 feat(libSceAgc): implement sceAgcWaitRegMemPatchMask
Patch the mask of a wait packet like sceAgcWaitRegMemPatchReference
patches its reference: a 32-bit value written to the low mask word of a
32- or 64-bit WAIT_REG_MEM, rejected above 32 bits.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 22:34:29 -03:00
Celegans12 bcdf19ee4e perf(shader): memoize SPIR-V emission failures
The source entry remembers a resource plan that failed to build, but
not a failed emission: findOrCompileVariant kept only successful
variants, and the first attempt used up the prepared program, so every
request for a program whose emission throws ran PrepareResourceProgram
and the emitter again before the draw was skipped.

compileVariant now reports an exception from SpirvEmitter::Emit (and
from SPIRV-Tools validation when enabled), and the source entry keeps
it per code address, binding layout and resource specialization; the
next request for that variant rethrows it before the disk-cache lookup.
Descriptor population depends on the snapshot and an out-of-memory
error is transient, so neither is kept. Nothing reaches the disk cache,
and APS5_NO_FAILURE_MEMO=1 turns the memo off as for plan failures.
2026-10-07 02:49:35 +02:00
raghav314andClaude Opus 5.5 60e16537dc docs: record the AJM resample assumptions in technical debt
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 05:41:46 +05:30
Dean ee391a5614 Merge pull request #1016 from ArjenS-LA/fix/autorun-posix-path-quoting
fix(relinker): quote literal autorun paths on POSIX
2026-10-07 13:11:16 +13:00
Dean e69f196f09 Merge pull request #1006 from Dextroid17/fix/agc-command-tests-full-mode
test(agc): fix the stale 32-bit WriteWait expectation and run the full suite
2026-10-07 13:10:03 +13:00
Joey Fisher 23a6859a51 feat(agc): declare sceAgcSetSemaphoreMemory and sceAgcDriverRegisterMultipleResources 2026-10-06 18:07:53 -06:00
raghav314andClaude Opus 5.5 72be77590c feat(ajm): implement sceAjmBatchJobSetResampleParameters and sceAjmBatchJobGetResampleInfo
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 05:36:31 +05:30
Dean 4b0412fa97 Merge pull request #982 from ebarr24/codex/libc-wide-string-precision
fix(libc): keep wide printf precision on UTF-8 boundaries
2026-10-07 13:03:38 +13:00
Dean fde401d41f Merge pull request #992 from CnRJay/feat/ppsa23566-missing-exports
feat(libs): declare the exports PPSA23566 imports that no library provides
2026-10-07 13:02:56 +13:00
Ethan Barr c6dde16023 fix(libc): preserve invalid allocator result diagnostics 2026-10-06 16:44:58 -07:00
Ethan Barr db49ba97b5 fix(libc): return posix_memalign allocation errors 2026-10-06 16:41:01 -07:00
hugodearaujoandClaude Opus 5.5 26eec5bee6 feat(libSceAgc): implement sceAgcDcbQueueEndOfShaderActionGetSize
The end-of-shader action is written by an inline SDK builder as a
RELEASE_MEM packet, so the size is the 32 bytes that
sceAgcCbReleaseMem writes and that sceAgcAcbQueueEndOfShaderActionGetSize
already returns.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 20:38:14 -03:00
JAB-devandClaude Opus 5.5 e15f1644e3 fix(libSceNgs2.native): reverb as the PS4 libSceNgs2 does
The reverb was a Freeverb-style approximation. It now follows the PS4
firmware 11.00 libSceNgs2.sprx, read and checked against its output: the
input mixed to mono with the library's fixed gains, a 14400-sample buffer
with four reflection taps from the reflection pattern tables and a late
feed, sixteen damped comb filters with a pre-emphasis stage, a signed
selection of combs and four allpasses per output channel, a two-pole room
HF filter, and the library's parameter clamps, crossfades and setup
defaults. The test values are the PS4 library's own output.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 01:26:11 +02:00
Arjen Singh 6ac3ad5d1d fix(relinker): quote literal autorun paths on POSIX 2026-10-06 16:18:01 -07:00
Dextroid17 ea68e850ff test(agc): fix the stale 32-bit WriteWait expectation and run the full suite
WriteWait has truncated the reference and mask of a 32-bit wait since
9c2a7560 ("relaxed checks for what titles send"), but testMemory still
expected a reference above 32 bits to throw, so agc_command_tests failed
when run without arguments. ctest only registers the "defaults" mode, so
the stale expectation was never noticed.

Update the expectation to the truncating behaviour (the packet keeps the low
halves) and register the full mode as agc_commands so the packet, marker,
flip, register and memory cases are checked again.

Closes #1005.
2026-10-06 18:58:45 -04:00
Adrià ab9437e34d feat(libkernel): implement scePthreadTestcancel and pthread_testcancel (#834) 2026-10-07 11:43:32 +13:00
Dean 23ba389799 Merge pull request #993 from CnRJay/fix/mutexattr-settype-einval
fix(libkernel): return EINVAL for unknown mutex attribute types
2026-10-07 11:43:11 +13:00
Adrià 09f8782378 feat(libSceAudio3d): implement sceAudio3dTerminate (#830) 2026-10-07 11:42:29 +13:00
Dean 25f311fa00 Merge pull request #559 from Phi1ow/implement-login-dialog
feat(logindialog): implement the libSceLoginDialog state machine
2026-10-07 11:41:57 +13:00
Dean b5c1d08bd9 Merge pull request #553 from Phi1ow/implement-userservice-foreground-and-ids
feat(userservice): implement foreground user, registered list, user colour and NP account id
2026-10-07 11:41:16 +13:00
Dextroid17 cc7bda30e7 fix(libc): register the application heap finalizer when libc loads
The finalizer was registered with std::atexit from the heap handshake, which
runs after libc's own __cxa_atexit runner and the title's exit callbacks
register theirs. std::atexit runs handlers in reverse registration order, so
the heap was torn down first: an exit user that allocated then threw
"application heap: allocator has been finalized" out of a destructor path,
which terminates the process.

Register the finalizer from a namespace-scope object instead, so it is
registered when libc is loaded and therefore runs last, and make finalize()
idempotent rather than throwing on a second pass.

application_heap_exit_order registers a guest exit callback that allocates
through the heap and aborts with "application heap: allocator has been
finalized" on the previous code.
2026-10-06 18:40:06 -04:00
ChadandClaude Opus 5.5 df98b8899e feat(libs): name the PPSA23566 stubs from the shadPS4 NID list and implement sleep
20 of the 31 NIDs have names in shadPS4's aerolib list. They are declared
under those names; POSIX sleep is implemented. The NpPartner001 and Psml
MFSR2 exports stay unnamed.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 17:28:39 -05:00
Celegans12 a40fe0b415 fix(shader): throw for constant lane reads outside the host subgroup
A pixel, vertex or tessellation stage whose wave is wider than the host
subgroup runs one guest lane per invocation, so lanes at or above the
subgroup size have no invocation. v_readlane_b32 still shuffled from
them, which Vulkan leaves undefined; a wave64 pixel minimum loop that
reads lanes 31 and 63 can then wait for a value no live lane holds and
hang the GPU.

At one lane per invocation outside compute, a v_readlane_b32 of a
constant lane at or above the host subgroup size, and v_permlanex16_b32
on a subgroup of 16 lanes or fewer, now fail SPIR-V emission. Lanes in
registers still build, so s_ff1_i32_b64 waterfalls are unaffected,
and neither check applies to compute or to two lanes per invocation.

v_permlane16_b32 and v_permlanex16_b32 take the source lane's EXEC from
a ballot, as DPP does, instead of a shuffle from a possibly inactive
invocation.
2026-10-07 00:25:55 +02:00
Celegans12 baa202d241 feat(agc): implement 10_11_11 unorm images through 32-bit uint views
GFX10 image format 30 (10_11_11_UNORM: X and Y are unorm11 in bits
0-21, Z is unorm10 in bits 22-31, per Mesa's gfx10 tables) has no
Vulkan format, so its sampled and storage descriptors threw at decode.

Format 30 now takes the R32_UINT route of 10_11_11_UINT: the driver
binds the raw dwords as R32_UINT and the shader extracts each field and
converts it with the buffer format helpers (NormalizeFormatComponent on
loads, EmitFormatStoreComponent on stores); DST_SEL 1 reads 1.0f.
Samples, gathers, LOD queries, 16-bit data and loads or stores whose
DST_SEL names the missing W channel throw.

Converted textures are now viewed with an identity component mapping,
since the shader applies DST_SEL itself: a 10_11_11_UINT view whose X
selector was not X lost the packed dword. DCC clear codes 0001 and 1110
of a converted texture throw instead of filling one R32_UINT channel.
2026-10-07 00:11:27 +02:00
Dean c1241ad0dc Merge pull request #979 from hugodearaujo/fix/video-recording-open-signature
fix(libSceVideoRecordingP): correct the sceVideoRecordingOpen signature
2026-10-07 11:11:12 +13:00
JABandClaude Opus 5.5 e289b56e6f feat(libSceNgs2.native): implement sceNgs2RackGetInfo, sceNgs2VoiceGetPortInfo and sceNgs2VoiceQueryInfo (#958)
RackGetInfo reports the rack's handles, buffer, id, uid, option limits,
render count and active voices. VoiceGetPortInfo reports a port's matrix,
volume and destination. VoiceQueryInfo answers info id 0x4001 with the
voice channel count and throws for other ids. Assumptions are recorded in
TechnicalDebt.

Co-authored-by: Claude Opus 5.5 <[email protected]>
2026-10-07 11:10:30 +13:00
Dean ebad6db846 Merge pull request #923 from Fishybeing/docs/barycentric-fallback-entry
docs: describe the barycentric fallback in TechnicalDebt accurately
2026-10-07 11:07:12 +13:00
Dean 2b45df4706 Merge pull request #905 from gookie-dev/feat/pad-vr-controller-exports
feat(libScePad): declare the VR controller exports
2026-10-07 11:07:02 +13:00