Commit Graph
14017 Commits
Author SHA1 Message Date
Dean 7058a4ce6c Merge pull request #656 from NumberGuan/codex/fix-relinker-alignment
fix(relinker): reject invalid and overflowing alignment
2026-10-06 07:54:58 +13:00
Dean eabf1418de Merge pull request #647 from Celegans12/feat/videoout-strict-colorimetry
feat(videoout): accept the STRICT_COLORIMETRY buffer option
2026-10-06 07:54:15 +13:00
Dean 3c681d5199 Merge pull request #670 from NahuelGenchi/feat/global-atomic-csub
feat(shader): implement global_atomic_csub
2026-10-06 07:54:05 +13:00
Dean d5b7fbc127 Merge pull request #660 from Celegans12/feat/agc-dpp16-row-share
feat(shader): implement the DPP16 row_share controls
2026-10-06 07:53:22 +13:00
Dean 7df0923570 Merge pull request #659 from Celegans12/feat/agc-image-atomics-32bit-formats
feat(agc): implement image atomics on 32_SINT and 32_FLOAT surfaces
2026-10-06 07:52:39 +13:00
Dean bbc6f42881 Merge pull request #667 from adriadam10/test/image-atomics-bitwise
test(shader): cover the bitwise and unsigned image atomics
2026-10-06 07:51:54 +13:00
Dean a509d519a1 Merge pull request #689 from adriadam10/test/flat-global-loads-ci-time
test(shader): split the flat and global loads test to keep it within CI's time limit
2026-10-06 07:51:41 +13:00
Dean 7b1d7cc78a Merge pull request #688 from adriadam10/test/global-atomics-ci-time
test(shader): split the global atomics test to keep it within CI's time limit
2026-10-06 07:50:59 +13:00
Dean 18f1548703 Merge pull request #678 from Celegans12/feat/agc-clip-cntl-dx-linear-attr
feat(agc): accept linear attribute clipping in PA_CL_CLIP_CNTL
2026-10-06 07:50:16 +13:00
Dean 0a081cbe8c Merge pull request #673 from Celegans12/feat/agc-pm4-cond-exec
feat(agc): implement COND_EXEC
2026-10-06 07:49:33 +13:00
Dean 5e68f0ad09 Merge pull request #654 from Celegans12/feat/agc-write-data-cache-policy
feat(agc): accept the WRITE_DATA cache policy
2026-10-06 07:48:51 +13:00
Dean 75aa7f2197 Merge pull request #651 from Celegans12/feat/agc-interpolant-mapping-f16-high
feat(agc): implement the interpolant mapping variant for high-half f16 inputs
2026-10-06 07:48:08 +13:00
Dean d9162684ee Merge pull request #646 from Celegans12/fix/agc-get-is-trinity-mode
fix(agc): store sceAgcGetIsTrinityMode's flag through its out pointer
2026-10-06 07:47:55 +13:00
Dean a974aebf92 Merge pull request #728 from adriadam10/feat/agcdriver-submit-validation-names
fix(agcdriver): name the four SubmitValidation stubs from their NIDs
2026-10-06 07:47:13 +13:00
Dean f8cfceb2eb Merge pull request #725 from adriadam10/feat/agc-unknown-names
fix(agc): name nine Unimplemented stubs from their NIDs
2026-10-06 07:46:30 +13:00
Dean 64e8667e7c Merge pull request #687 from Celegans12/fix/agc-tessellation-feature
fix(agc): log the Vulkan features after tessellation is enabled
2026-10-06 07:45:46 +13:00
Adrià FranchandClaude 5864b20dcb feat(shader): accept every SDWA selector, clamp and omod on v_ldexp_f16
Co-Authored-By: Claude <[email protected]>
2026-10-05 20:31:38 +02:00
Adrià FranchandClaude b8e1936783 fix(shader): accept clamp and omod on every f16 VOP3 result op
clamp (and omod, ignored while f16 denormals are enabled) were refused or
dropped per op: v_{add,sub,subrev,mul,min,max}_f16, v_ldexp_f16,
v_frexp_mant_f16, v_cvt_norm_{i,u}16_f16, v_{max3,min3,med3,div_fixup}_f16.
They now share one clamp on the f16 bits (clampF16Bits).

Co-Authored-By: Claude <[email protected]>
2026-10-05 20:30:47 +02:00
Adrià FranchandClaude 55f548d6bc feat(libc): implement wcsrtombs_s
Co-Authored-By: Claude <[email protected]>
2026-10-05 20:29:18 +02:00
Dean fdd6519eac Merge pull request #507 from adriadam10/feat/vop3-integer-clamp
fix(shader): saturate VOP3 integer mad/sad results on clamp
2026-10-06 07:27:34 +13:00
Cliff Syner b9c1c8848f feat(libc): implement strnlen_s
The DQbtGaBKlaw import was a throwing stub (libcCyberUnknown17). It is
the NID of "strnlen_s", which C11 K.3.7.4.4 defines as strnlen that
returns 0 for a null pointer.

The removed stub comment from #358 described its call site as
float -> float, which contradicts the hash-verified name; #492 left the
stub untouched for that reason.
2026-10-05 18:26:06 +00:00
alfalfa-starandClaude Opus 5.5 ee2b3be52f fix(relinker): allow duplicate Linux guest exports that no module imports
Guest modules a title opens with sceKernelLoadStartModule are looked up
through their own handle, so several modules may export the same name:
every Wwise plugin exports g_pAKPluginList. On Linux a duplicate now
fails only when the executable or a guest module imports it, as the
provider would be ambiguous. Windows keeps rejecting duplicates.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 20:21:11 +02:00
Celegans12andClaude Opus 5.5 75e2e7252e fix(agc): log the Vulkan features after tessellation is enabled
The device constructor printed "Vulkan features tessellationAvailable"
before it read VkPhysicalDeviceFeatures and set tessellationShader, so
the line reported 0 on every GPU, including ones that enable the
feature. The rect-list and tessellation paths already read the enabled
value; only the diagnostic was wrong, and it suggested that
tessellation was unavailable.

Print the line right after the feature is enabled. The mesh, depth
clip and unrestricted depth range values it also reports are set
earlier and do not change.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 20:20:50 +02:00
alfalfa-starandClaude Opus 5.5 1d9d5ab491 fix(libs): keep a $ORIGIN runpath in the patched prx libraries
The NID patcher rebuilds .dynstr keeping only the DT_NEEDED and
DT_SONAME strings, so DT_RUNPATH kept a stale offset and the patched
libraries shipped with an empty runpath. A library could then load only
those sibling prx that the executable already loads itself:
libSceVideoOut.prx needs libSceKeyboard.prx, which a title that does
not import libSceKeyboard never loads, so it fails at startup.

The patcher now keeps DT_RPATH and DT_RUNPATH strings, and the prx
libraries are linked with a $ORIGIN runpath instead of the build
directory, so they find each other wherever they are copied.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 20:20:14 +02:00
Adrià FranchandClaude 3f2e5150c2 feat(libc): implement _Xtime_get_ticks
Co-Authored-By: Claude <[email protected]>
2026-10-05 20:16:11 +02:00
Dean 33e9a12159 Merge pull request #511 from adriadam10/feat/sdwa-vop2-float-selectors
feat(shader): accept every SDWA selector on VOP2 float ops
2026-10-06 07:13:44 +13:00
Dean b6c889d208 Merge pull request #625 from DotDebian/fix/mimg-address-instruction-dimension
fix(shader): locate image LOD, mip and sample index by the instruction's dimension
2026-10-06 07:13:30 +13:00
Adrià FranchandClaude 68b71c971a feat(libc): implement _FDtest, _FInf and _FNan
Co-Authored-By: Claude <[email protected]>
2026-10-05 20:10:34 +02:00
alfalfa-starandClaude Opus 5.5 d7f3b7c494 feat(voiceqos): implement sceVoiceQoSInit
A title passes a work memory block and app type 0x20000000, and turns
voice chat off when initialization fails. Initialization now records
the library as initialized and succeeds. A null or empty memory block,
another app type and a second initialization throw, as their error
codes are unknown.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 20:09:25 +02:00
Adrià FranchandClaude ea65b7e5be fix(agcdriver): name the four SubmitValidation stubs from their NIDs
Co-Authored-By: Claude <[email protected]>
2026-10-05 20:03:12 +02:00
Adrià FranchandClaude 357fd7e806 fix(agc): name nine Unimplemented stubs from their NIDs
Co-Authored-By: Claude <[email protected]>
2026-10-05 20:01:01 +02:00
MerijnandClaude Opus 5.5 3b8ef5bc4f feat(libkernel): record exception handlers
sceKernelInstallExceptionHandler and sceKernelRemoveExceptionHandler threw.
They now keep one handler per allowed signal (SIGHUP, SIGILL, SIGFPE,
SIGBUS, SIGSEGV, SIGUSR1, as in shadPS4): another signal or a null handler
returns EINVAL, a second handler for a signal returns EAGAIN, and removing
clears it. Delivery is not implemented and is recorded in the technical
debt; sceKernelRaiseException still throws.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 19:59:03 +02:00
Adrià FranchandClaude 6d81cce0db fix(libkernel): name three Unimplemented stubs from their NIDs
Co-Authored-By: Claude <[email protected]>
2026-10-05 19:58:20 +02:00
Adrià FranchandClaude 85f16c56ee fix(libkernel): name five sceCoredump stubs from their NIDs
Co-Authored-By: Claude <[email protected]>
2026-10-05 19:55:41 +02:00
alfalfa-starandClaude Opus 5.5 ba8c8c4b05 feat(libkernel): implement sceKernelGetModuleInfoFromAddr
A title's libc.prx calls it from __cxa_thread_atexit with flags 2 and
stores the returned module id in the destructor record. The 0x1A8-byte
info reports the name, id, TLS block, init and fini procedures,
eh_frame_hdr and eh_frame, and up to four load segments of the image
containing the address. The id is the loader handle when the image was
opened through sceKernelLoadStartModule and otherwise a stable id from
the same range. Unknown flags and st_size values throw.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 19:55:15 +02:00
Adrià FranchandClaude afe2b14a84 feat(libc): implement div
Co-Authored-By: Claude <[email protected]>
2026-10-05 19:53:39 +02:00
Adrià FranchandClaude fbf0099790 feat(libc): implement std::_Xrange_error and the range_error type
Co-Authored-By: Claude <[email protected]>
2026-10-05 19:49:33 +02:00
MerijnandClaude Opus 5.5 65e5c9932c feat(libkernel): implement sceKernelCheckedReleaseDirectMemory
Release direct memory only when the whole range is allocated: a misaligned
start or length returns EINVAL, a zero length succeeds, and a range that
leaves direct memory or covers an unallocated page returns ENOENT without
releasing anything, as in shadPS4. The check and the release run under
the pool lock.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 19:47:51 +02:00
MerijnandClaude Opus 5.5 d52a5f0169 feat(relinker): relink needed modules outside the module directories
Unity titles keep modules the executable needs in Media/Modules
(PPSA12544: Il2cppUserAssemblies.prx and PS5Util.prx), outside sce_module
and prx, so they were left as host libraries and startup failed to load
them. A DT_NEEDED module of the executable that is not in a module
directory is now searched for under the input directory and relinked like
the others; two ELF files with the name are ambiguous. Guest outputs keep
their directory relative to the input instead of only its last component.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 19:41:59 +02:00
Adrià FranchandClaude e923bea317 feat(savedata): implement the PS4 transfer mount and directory search
Rename the two unknown libSceSaveData.native stubs to
sceSaveDataTransferringMountPs4 (RjMlsR8EXrw) and
sceSaveDataDirNameSearchPs4 (X4MYzukPc3g). There is no PS4 save area:
the mount returns NOT_FOUND like sceSaveDataTransferringMount, and the
search reports zero hits.

Co-Authored-By: Claude <[email protected]>
2026-10-05 19:41:59 +02:00
MerijnandClaude Opus 5.5 de93a9492c feat(libkernel): load the relinked module for a guest module path
dlopen and sceKernelLoadStartModule passed the guest path to the host
loader, which cannot load the original ELF module. When a relinked module
<path>.guest.prx exists beside it, that module is loaded instead; for a
module the executable already loaded at startup the host loader returns
the same module. PPSA12544 loads /app0/Media/Modules/Il2CppUserAssemblies.prx
at startup and resolves IL2CPP functions through it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 19:41:47 +02:00
Adrià FranchandClaude 9b9194e543 feat(libSceShare): sceShareCaptureScreenshotExtended
Co-Authored-By: Claude <[email protected]>
2026-10-05 19:35:25 +02:00
Adrià FranchandClaude cf7c599087 feat(libs): implement scePlayGoDialogGetStatus
Rename the NOAMxY2EGS0 stub and return the dialog's current status
without advancing it.

Co-Authored-By: Claude <[email protected]>
2026-10-05 19:32:16 +02:00
Adrià FranchandClaude 7bcdc6f578 feat(http): name sceHttpSetInflateGZIPEnabled and sceHttpSetRequestStatusCallback
Co-Authored-By: Claude <[email protected]>
2026-10-05 19:29:54 +02:00
MerijnandClaude Opus 5.5 845e4dd942 fix(libs): drop exports implemented elsewhere
OQ-dzhlnM28, qBS714-Jr3g and tB59hFLH3SA are _sceLibcInternalThreadDtors,
_sceLibcInternalThreadAtexit and _sceLibcInternalForceTlsDestructor,
implemented in libSceLibcInternal by #641. dbOlWdppb4o is implemented by
#651.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 19:26:15 +02:00
MerijnandClaude Opus 5.5 4a548c0ba5 feat(libkernel): implement sceKernelGetOperationMode
NH6xARDOVv8 is the NID of sceKernelGetOperationMode. PPSA12544 passes two
int outputs and logs them as mode and submode; both are reported as 0.
B2n8aDorSH4 and PZQhiiLXRFs are sceKernelSyncOnAddressWait32 and
sceKernelSyncOnAddressWait64, implemented by #633, and are no longer added
as unimplemented exports.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 19:25:52 +02:00
MerijnandClaude Opus 5.5 8f6328242d feat(libs): add exports imported by PPSA12544
Implement scePthreadGetschedparam and scePthreadSetschedparam on top of
the thread priority, POSIX utimes and fsync on top of sceKernelUtimes
and sceKernelFsync, and sceUserServiceGetAccessibilityZoomFollowFocus
like the other accessibility queries. Add the remaining imports of
PPSA12544 as unimplemented exports and record unknown NIDs and
signatures in the technical debt.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 19:25:52 +02:00
Adrià FranchandClaude 4136a04ba7 feat(ulobjmgr): register and unregister object
Co-Authored-By: Claude <[email protected]>
2026-10-05 19:25:46 +02:00
Adrià FranchandClaude ce4bdbf2eb feat(libc): strtoimax and logbf
Co-Authored-By: Claude <[email protected]>
2026-10-05 19:22:12 +02:00
Adrià FranchandClaude f3e783b6cb feat(libs): implement sceNpTrophy2UnregisterUnlockCallback
Co-Authored-By: Claude <[email protected]>
2026-10-05 19:14:49 +02:00