Commit Graph
12196 Commits
Author SHA1 Message Date
Adrià c9cabcaf84 Merge pull request #6008 from zmeizy/claude/ldexp-f32-denormal-modes
fix(shader): translate v_ldexp_f32 in f32 denormal modes 1 and 2
2026-10-17 04:14:45 +02:00
Dean f643e61d9c Merge pull request #1693 from julienlgy/feat/razor-cpu-named-sync
fix(libSceRazorCpu): add sceRazorCpuNamedSync export
2026-10-17 15:02:12 +13:00
MarcZX100 871232eede test(agc): wait for preparation workers before linking 2026-10-17 02:00:23 +00:00
lorkydey 4e7e8ac1a9 feat(libc): implement floating-point rounding and exception flags 2026-10-17 03:46:56 +02:00
Get-fix ca75c94cc2 feat(libkernel): load system libraries from their console paths
PS4 programs load system libraries with sceKernelLoadStartModule and
their console path. The OpenOrbis piglet sample loads
/<sandbox word>/common/lib/libScePigletv2VSH.sprx and
libScePrecompiledShaders.sprx, the sandboxed form of
/system/common/lib/ that sceKernelGetFsSandboxRandomWord names. The path
was opened as a guest file and the load failed with ENOENT.

A path in /system/common/lib/ or in the sandboxed /<word>/common/lib/
whose file name ends in .sprx now loads the host libs/<name>.prx, as
libSceSysmodule does for module IDs. Names with a directory part are
not mapped, so such a path cannot leave libs/.
2026-10-17 04:46:19 +03:00
Get-fix 487b9fd4e4 feat(libkernel): read param.sfo when param.json is absent
PS4 titles ship sce_sys/param.sfo instead of param.json. When param.json
is absent, the application metadata now reads the title, title ID,
download data size and user defined parameters from param.sfo, and
/data and /download0 are mounted for it as for param.json. param.json
is still preferred when both files exist.
2026-10-17 04:46:16 +03:00
Dean e1ac3300d3 Merge pull request #6224 from Agnibha007/fix/linux-fixed-base-relocated-phdrs
fix(relinker): rebase the relocated program header table at a fixed Linux base
2026-10-17 14:41:25 +13:00
Dean 2d16248a25 Merge pull request #6153 from MarcZX100/codex/fix-toggle-mouse-capture
fix(libSceVideoOut): preserve mouse-to-stick relative mode
2026-10-17 14:36:50 +13:00
Adrià fd9e577d98 Merge pull request #6007 from zmeizy/claude/cmp-f32-denormal-modes
fix(shader): translate f32 compares in f32 denormal modes 1 and 2
2026-10-17 03:10:56 +02:00
Adrià f1dded21fe Merge pull request #6004 from XairRrR/fix/agc-empty-register-list
fix(agc): write nothing for an empty register list
2026-10-17 03:10:51 +02:00
Dean 7fcc15cb42 Merge pull request #6452 from Amoenus/codex/fix-indirect-fixture-alignment-main0c
test(agc): align the indirect arguments block at run time
2026-10-17 13:53:44 +13:00
Adrià 6caba08643 Merge pull request #6003 from XairRrR/fix/fiber-large-context-stack
fix(libSceFiber): run a fiber on its own context when the context is large
2026-10-17 02:45:04 +02:00
Adrià b1cb3ed43b Merge pull request #5991 from Get-fix/ps4/videoout-ps4-buffers
feat(libSceVideoOut): register PS4 display buffers
2026-10-17 02:44:59 +02:00
Adrià 73d163a255 Merge pull request #5995 from squirlyfoxy/fix-audio-video-sync-for-unity
fix(avplayer): correct audio-video playback timing and sync
2026-10-17 02:44:54 +02:00
Adrià f3263dfbf3 Merge pull request #5949 from Ondra97/codex/fix-fiopen-exclusive-create
fix(libc): create noreplace streams exclusively
2026-10-17 02:30:12 +02:00
ivica00andCursor 6972e882c7 test(shader): pin the rect-list vertex selected at every tessellation corner
A coordinate just below 1 truncates to the wrong vertex. The generated evaluation shader is checked at each corner, and a draw records the vertex that lands on each corner of the rectangle.

Co-authored-by: Cursor <[email protected]>
2026-10-17 02:13:25 +02:00
Adrià Franch b35caffd12 fix(libSceRazorCpu): take the label argument of sceRazorCpuNamedSync 2026-10-17 13:06:46 +13:00
julienlgyandCopilot f4a33b7960 fix(libSceRazorCpu): add sceRazorCpuNamedSync export
Resolve the XCuZoBSVFG8 import required by Killzone Liberation by adding sceRazorCpuNamedSync as a no-op returning success when capture is inactive.

Extend the RazorCpu behavior test and document the NID source and unverified console signature and capture behavior.

Co-authored-by: Copilot <[email protected]>
2026-10-17 13:06:36 +13:00
Dean e751dd2057 Merge pull request #6236 from fogydes/fix/playgo-unlisted-chunks-setting
fix(libScePlayGo): let users answer unlisted chunks
2026-10-17 13:05:47 +13:00
Dean 9070237dfd Merge pull request #5676 from MarcZX100/codex/pad-n3ksx62fgno-status
fix(libScePad): return measured status for unknown Pad NID
2026-10-17 13:05:42 +13:00
Dean 72a848ca52 Merge pull request #4533 from Roojool/contrib/g07-pthread-getname
fix(libkernel): answer pthread_getname_np for a joined thread with ESRCH
2026-10-17 13:05:38 +13:00
Mehran acee01a4e6 perf(shader): compile resource plan walks instead of interpreting them 2026-10-17 03:04:48 +03:00
Adrià 85643f75e7 Merge pull request #5997 from Ondra97/codex/fix-storage-evicted-views
fix(agc): release sampled views after storage eviction
2026-10-17 01:56:35 +02:00
fdfawef324andClaude Opus 5.5 7e4b1b7c3d feat(libSceJson2): implement Value::setTypeMismatchHandler and store the element access failure and special float handlers
Value::setTypeMismatchHandler, setElementAccessFailureHandler and
setSpecialFloatHandler were stubs that threw NotImplemented. PPSA07411
calls all three while it sets up its documents.

The title calls them as members of Value: on its root Value before
parsing into it, with the handler and its context, and treats an int
result of 0 as success. They now store the handler and context on that
Value and on the values it holds, and return 0. A Value keeps its
handlers when its content changes (set, clear, operator=,
Parser::parse), and Parser::parse gives the values it creates the
handlers of the Value it parses into, since the title reads the errors
its handlers record after accessing parsed members. A copy does not
carry them.

A typed getter on a non-null value of another type calls the type
mismatch handler with the requested type, the value, null and the
context, and returns its result when it has the requested type, else
the getter's default.

The element access failure and special float handlers are stored but
not called: the error code the console passes to the first and the
FunctionType it passes to the second are unknown. A failed element
access on a value carrying the first throws instead of reaching the
null-access callback. Serializing a non-finite real already threw; with
the second set it throws naming the unknown FunctionType. The technical
debt entry records what is inferred.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-17 01:39:31 +02:00
Nesyth e04111bb54 perf(agc): record a DMA copy of up to 64 KiB on the GPU when the GPU still stores into its source 2026-10-17 12:22:58 +13:00
Adrià 16a9191c60 Merge pull request #5986 from oneandonlydean/fix/mouse-reset-absolute-position
fix(libSceMouse): implement sceMouseResetAbsolutePosition with the arguments its callers pass
2026-10-17 01:22:56 +02:00
Mouad-Scriptz-0andClaude Fable 5.1 0a9ee3698a perf(recompiler): keep LDS loads branched and drop the LDS sentinel
NVIDIA's compiler predicates a branched LDS load at no cost, while the
selected form costs about 2.5 instructions per dword and splits a
ds_read_b128 into four loads (RTX 4060 measurements by @karanvora2599 in
loads therefore keep the branch of main, in workgroup, function and device
memory alike, and the sentinel dword that only they read goes away: the LDS
array is the program's dwords plus the lock again, and the device-memory
decision reserves the lock alone. The sentinel budget tests become lock
budget tests at that boundary, and the guarded-load test pins the branch.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-17 12:19:09 +13:00
jweidenh 21a3bd5606 fix(recompiler): reserve LDS sentinel and lock headroom 2026-10-17 12:18:50 +13:00
jweidenh ae56b9558c test(agc): exercise LDS sentinel boundaries on native devices 2026-10-17 12:18:50 +13:00
jweidenh d914130cc3 test(recompiler): cover LDS sentinel budget boundaries 2026-10-17 12:18:50 +13:00
Mouad-Scriptz-0andClaude Fable 5.1 ccaeeed416 fix(recompiler): point selected guest loads at locations nothing writes
A load selected instead of branched still accesses memory, so its fallback
element must be one no write can race with: scratch keeps element 0, LDS in
workgroup or function memory reads a sentinel dword appended after the
program's LDS and lock, and storage buffers read element 0xfffffffe, which
robustBufferAccess2 turns into a zero load without a memory access. The
device enables robustBufferAccess2 when it has it and the target carries the
flag; without it, and for LDS in device memory, buffer loads keep their
selections. The aligned high word of a buffer read re-reads the low word's
element instead of word 0. agc_guarded_memory_loads traces the emitted loads
in both device modes.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-17 12:18:50 +13:00
Mouad-Scriptz-0andClaude Fable 5.1 6dbbf4d7d9 perf(recompiler): select guest memory loads instead of branching around them
LDS, scratch and direct storage-buffer loads load element 0 when the lane is
inactive or the address is out of bounds and select 0 as the result, instead of
opening a selection per guard. Stores, atomics, formatted and physical-address
accesses keep their branches. A branch guard cost four blocks per lane half, and
the host compiler's time grows with the block count: PPSA11142's merged PSP
vertex program emitted 16,983 blocks and 1,710 conditional branches, 5,907 and
868 with the selects.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-17 12:18:28 +13:00
fma-rc c020d73a5b fix(libc): catch exceptions that libstdc++ throws inside the prx libraries on Linux
The nid_patcher turns each *_nid_no_patch_cut alias into a second dynamic
symbol with the same name as the plain alias exported next to it, seven
names in all. With those duplicates, LD_DEBUG=bindings shows libstdc++ keeping its own __cxa_allocate_exception, __cxa_throw,
__cxa_begin_catch, __cxa_end_catch, __cxa_rethrow, __gxx_personality_v0
and _Unwind_Resume while taking __cxa_init_primary_exception,
_Unwind_RaiseException and std::terminate from libc.prx. An exception
thrown inside libstdc++ (std::stoi, a stream with exceptions enabled) got
a libc header laid over a libstdc++ allocation, reached the libc
personality as a foreign exception, matched no typed handler and ended in
"terminate called without an active exception". The plain aliases already
export these names, so the duplicates go.

libstdc++ also describes std::__ios_failure with __iosfail_type_info, a
class that privately derives from __si_class_type_info at the same
address. Kind now follows such single same-address bases to the
__cxxabiv1 class, so catching std::ios_base::failure or std::exception
matches a stream failure.

The plain aliases came in a4c519b26 next to the cut aliases from
14f8c16ac.
2026-10-17 01:17:45 +02:00
Adrià 4272979b31 Merge pull request #5953 from jagrat04/feat/libSceSsl-certificate-readers
feat(libSceSsl): implement certificate serial and name entry readers
2026-10-17 01:16:05 +02:00
Adrià 8c90c879e0 Merge pull request #5990 from Get-fix/ps4/windows-libc-for-libkernel
fix(relinker): search libc.prx for libkernel-only Windows executables
2026-10-17 01:16:00 +02:00
Adrià 4a9c1d5cd0 Merge pull request #5982 from milescoviello/fix/depth-surface-later-level
fix(agc): treat a view past a depth surface's first level as memory
2026-10-17 01:15:56 +02:00
Adrià 29a546d378 Merge pull request #5978 from MarcZX100/codex/libc-explicit-exit-finalizers-5931
fix(libc): run guest finalizers before driver shutdown
2026-10-17 01:07:47 +02:00
Adrià af0fff7627 Merge pull request #5974 from mohammad-alosta/fix/ngs2-geom-apply
fix(libSceNgs2): implement a minimal sceNgs2GeomApply pass-through
2026-10-17 00:52:37 +02:00
Adrià 11d1557bd7 Merge pull request #5084 from 0xRickx/fix/libscesystemservice-host-time-zone
fix(libSceSystemService): report the host time zone and summer time
2026-10-17 00:52:32 +02:00
Yunus Shaikh 84cae0bda0 fix(agc): pick the overlay's palette entry with constant indices
On RADV the overlay's fragment shader read parameters.palette[paletteIndex]
as palette[0] for the text and graph rectangles, so they were drawn in the
panel's colour (0,0,0,0.6) and darkened the panel a second time instead of
drawing white or green. On an AMD Radeon RX 7600 (NAVI33) with Mesa 26.0.8,
agc_performance_overlay failed in its SDR case at "'6' of 'FPS: 60.0' glyph
pixel 2,0 is not white text: 0x4280161290": 0xff1e140a is the clear colour
(191,128,64) darkened by 0.4 twice, where the panel alone gives 0xff4c331a.
An integrated Radeon 660M failed at the full panel's first glyph.

The shader was valid SPIR-V: a flat uint input indexing a push-constant
array (the palette at offset 0, the extent at 48). The index is per
rectangle, and fragments of the panel and of its glyphs share waves, so it
varies within a wave; RADV read that divergent index into the push-constant
array as 0. The shader now reads each entry at a constant index and selects
one by the colour index. Every case passes on that RX 7600 with this change,
full panel included, and still passes on llvmpipe from the same Mesa.
2026-10-16 15:45:52 -07:00
Leonardo b868190bc2 fix(libSceVoiceQoS): take 4-arg local endpoint and relax unverified rejections 2026-10-17 00:39:37 +02:00
Yunus Shaikh be77a9d7bd fix(agc): release the lookup log's capacity after a build past its bound
A build keeps all of its own lookup records, so one over many textures
grows the thread-local log far past the 1024-record bound, and the vector
kept that peak capacity for the life of the thread: 2048 records after a
1500-texture build, on every thread that ever ran one.

When the outermost build or full walk ends, the log is trimmed back to
the newest 1024 records, as logLookup would have kept, and its capacity
is released once it exceeds one and a half times the bound. A log within
the bound never reaches that capacity, whether the vector grows by
doubling or by half, so ordinary builds do not reallocate. Nothing reads
the log after a build ends: captureValidation runs inside it and clears
it, a full walk clears it before its lookups, and resolveImageTables
reads only the record its own lookup just added.
2026-10-16 22:34:20 +00:00
Adrià Franch 883e4b64f6 test(libc): use 16-byte alignment the mock storage satisfies 2026-10-17 00:24:27 +02:00
Adrià Franch a6fd136a30 test(libc): pin aligned new alignment argument, zero size and new-handler retry 2026-10-17 00:24:27 +02:00
notaxeltvandCursor cd4b52f05a feat(libc): allocate through operator new with align_val_t
Co-authored-by: Cursor <[email protected]>
2026-10-17 00:24:26 +02:00
Crimson e55144bfe5 fix(libc): build the working directory path without deprecated u8path 2026-10-17 01:18:48 +03:00
hamb3r ebc6ea3ba5 Merge branch 'main' into fix/shader-msaa-array-descriptor-shape 2026-10-17 01:18:47 +03:00
SandstromPLandClaude Opus 5.5 e8614de271 fix(agc): rasterize a single-sample scan into a multisampled depth target at the pixel center
A draw with PA_SC_AA_CONFIG.MSAA_NUM_SAMPLES 0 and MSAA_ENABLE clear
into a 4x depth target threw "the depth target's sample count differs
from the rasterizer's", which stops METAL GEAR SOLID: Peace Walker
(PPSA18216) at its first presentation. Such a draw now rasterizes the
depth target's sample count with every sample at the pixel center, as
a single-sample scan into a multisampled color target already does.
radeonsi programs this MSAA_ENABLE and PA_SC_AA_CONFIG with the depth
buffer's own sample count when GL multisampling is disabled, and GL
then gives full coverage with every depth and stencil sample set from
the pixel center.

Triangles and rectangles are accepted. Points, lines, alpha-to-coverage,
DB_EQAA Z interpolation or overrasterization, a pixel program reading
the sample index and a sample-mask export throw on this path, as does
a single-sample color target next to the multisampled depth target.
The primitive check is shared with the single-sample MSAA_ENABLE rule,
whose behaviour and messages are unchanged.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-17 00:17:51 +02:00
Adrià 57f2a59010 Merge pull request #5975 from milescoviello/fix/indirect-vertex-extent
fix(agc): copy an indirect draw's vertex buffer only up to its last element
2026-10-17 00:15:56 +02:00
Adrià c1d72d9335 Merge pull request #5890 from Piglit09/phase1/tls-protected-entry
fix(relinker): protect Windows TLS code entry roots
2026-10-17 00:15:50 +02:00