Commit Graph
7963 Commits
Author SHA1 Message Date
orezraeyandClaude Opus 5.5 284884d40b Merge main into fix/libkernel-cond-destroyed-measured-ps5
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 22:12:05 -03:00
Dean 096d770143 Merge pull request #10231 from Felipebmaitan/feat/jobmanager-owned-state
fix(job-manager): keep scheduling state in caller memory
2026-10-25 14:10:59 +13:00
xXPBSXxandClaude Sonnet 5.5 0a17562fc7 docs(debt): note how titles call sceFontRenderCharGlyphImage
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-25 02:08:52 +01:00
Dean Galvin 45046a0cbc Merge main into PR branch (public headers: declare each export once, drop local declarations) 2026-10-25 14:03:49 +13:00
Disaster 878124772c feat(libc): implement _Exp and _FExp 2026-10-25 04:02:47 +03:00
Dean f4aabbb122 Merge pull request #10129 from orezraey/fix/libc-strftime-measured-ps5
fix(libc): format strftime and asctime fields as measured on a PS5
2026-10-25 14:02:08 +13:00
Dean c6b318cfd9 Merge pull request #9165 from MaxLikesCode/fix/pthread-timed-self-lock
fix(libkernel): time out timed locks of a lock the caller already holds
2026-10-25 14:01:45 +13:00
Dean 6bc12fcdf6 Merge pull request #10021 from klosixgaming-arch/fix/font-writing-line-horizontal
fix(libSceFont): resolve a default string direction at creation
2026-10-25 14:00:47 +13:00
Dean 3f97477838 Merge pull request #9338 from MaxLikesCode/feat/usbd-device-calls
feat(libSceUsbd): pass the device, packet size, alternate setting and halt calls through to libusb
2026-10-25 13:59:56 +13:00
Dean 471e062346 Merge pull request #10185 from orezraey/fix/libscecescs-mbcs-strings-measured-ps5
fix(libSceCesCs): terminate and count MBCS string conversions as measured on a PS5
2026-10-25 13:59:06 +13:00
hypermistandClaude Opus 5.5 d96751079c Merge remote-tracking branch 'upstream/main' into fix/psml-base-console
Resolved GuestPsml.cpp by dropping the extern block; the Mfsr2 placeholders in the libScePsml_debug header now carry the implemented signatures and the test uses the library header.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 13:56:59 +13:00
Kyon 0e18750a87 fix(libSceAudio3d): reconcile canonical error declaration 2026-10-25 02:55:32 +02:00
Kyon 4d861d2f29 fix(libSceSulphaDrv): reconcile the public header migration 2026-10-25 02:55:01 +02:00
Alexandre Figueiredo 8b92ee82f2 fix(libSceNpWebApi2): declare the arguments of sceNpWebApi2PushEventRegisterPushContextCallback 2026-10-25 01:51:04 +01:00
Rookie 0297073da2 fix(libc): return the calling thread from _Thrd_id as the console's libc.prx does 2026-10-25 01:45:47 +01:00
Disaster ca84349a42 feat(libc): implement _Thrd_lt 2026-10-25 03:45:02 +03:00
hypermistandClaude Opus 5.5 eac4379921 Merge remote-tracking branch 'upstream/main' into feat/httpcache-cache
Resolved Export.cpp: kept the cache implementation and added the library header include.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 13:41:28 +13:00
hypermist 5e20ae8a98 Merge remote-tracking branch 'upstream/main' into feat/font-get-glyphs-outline-profile-m3 2026-10-25 13:33:11 +13:00
hypermistandClaude Opus 5.5 dfc3c4e5f6 Merge remote-tracking branch 'origin/feat/font-get-font-style-information' into feat/font-get-glyphs-outline-profile
Dropped the pre-restructuring struct block; the outline profile stub stays removed.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 13:33:09 +13:00
milescovielloandClaude Opus 5.5 52f36c8aa2 fix(agc): keep a mipmapped DCC color target's keys on its resident image
DecodeColorBuffer dropped the DCC address of a color target with more than
one mip, so the target's resident image had no keys: it was uploaded from
guest memory under the game's fast-clear keys, and no draw into it marked
them uncompressed. The game's textures over the same chain name the keys,
so they kept sampling the clear (0000 reads as (0,0,0,0)) whatever was
drawn. MXGP 26, Borderlands 4 and Forspoken render such targets.

- ColorTarget.chainDccAddress keeps the keys of a 2D single-layer chain;
  dccAddress stays 0, so the per-draw single-mip key handling is unchanged.
- SurfaceForTarget gives the resident surface those keys, and the image
  then treats them as a multi-mip storage image does: a uniform clear is
  cleared on the GPU at upload, and the first write marks every key
  uncompressed.
- A draw recipe's key check uses the surface's keys.
- sizeof(State) is 840: the recipe codec and CanonicalPipelineState do not
  copy the field.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 00:31:53 +00:00
Queuze e5fcbb775d fix(check-compile): enforce syntax mode 2026-10-24 21:31:23 -03:00
Leonardo d6aeceab3d feat(libSceNetCtl): implement sceNetCtlGetNatInfo
Declare the NetCtlNatInfo structure layout (size, stun_status,
nat_type, mapped_addr) and implement sceNetCtlGetNatInfo.
When the host has an IPv4 interface, reports STUN status OK (2),
NAT type 2 (moderate), and the host's IPv4 address as the mapped
address. Returns SCE_NET_CTL_ERROR_NOT_CONNECTED when no interface
is found. Unblocks session creation in Aliens: Fireteam Elite (PPSA03393).
2026-10-25 02:30:01 +02:00
SwagandClaude Opus 5.5 fe8520917a Merge upstream/main into feat/libressl-error-queue
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 20:29:59 -04:00
hypermistandClaude Opus 5.5 8883a34320 Merge remote-tracking branch 'upstream/main' into feat/vrtracker2-initialize
Resolved Export.cpp and GuestVrTracker2.cpp keeping main's header layout; the new sceHmd2Internal exports are declared in the libSceHmd2 header and the test uses the library headers.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 13:29:54 +13:00
memob cf27259538 feat(libkernel): implement __tls_get_addr
Resolve a FreeBSD/ELF tls_index {module, offset} the way the relinker's
DTPMOD64 values are laid out: on Windows through the PE _tls_index the
module word points at and the thread's ThreadLocalStoragePointer, on
Linux through glibc's __tls_get_addr.
2026-10-24 20:29:20 -04:00
Dean b7865bbb6b Merge pull request #8344 from Retr0G28/fix/socketpair-getpeername-enotconn
fix(libkernel): return ENOTCONN from getpeername once a socketpair peer closed
2026-10-25 13:28:30 +13:00
orezraeyandClaude Opus 5.5 336a738f91 Merge main into docs/libkernel-flexible-flag-8000-measured-ps5
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 21:24:15 -03:00
hypermistandClaude Opus 5.5 4e8c077237 Merge remote-tracking branch 'upstream/main' into feat/font-get-font-style-information
Kept main's Api.hpp declarations and dropped the duplicated struct block from Unimplemented.cpp.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 13:22:32 +13:00
klosixgaming-arch 0e46a0c497 fix(libSceFont): resolve a default string direction at creation
A string created from a text source in the default horizontal form (0x10)
reported 0x10. TEKKEN: DARK RESURRECTION (PPSA31371) passes the reported form
to sceFontCreateWritingLine, which only accepts 0x11 and 0x12, so the call
failed and the layout width was 0.

On firmware 13.42 sceFontCreateString decides the direction for a default-form
source and sceFontStringGetWritingForm returns the stored form. The string
gets 0x12 when its first strong character is left to right, 0x11 when it is
right to left, and 0x12 when it has none. Left-to-right and right-to-left marks
count as strong, embeddings and overrides do not, and text between an isolate
initiator and its PDI is skipped. Explicit 0x11 and 0x12 sources keep their
form.

The test follows the table reported on the pull request. Which characters are
strong is decided by Unicode block ranges here, not by the full bidi class
tables.
2026-10-24 19:21:23 -05:00
Queuze 348c6fd80b test(check-compile): combine syntax fixes 2026-10-24 21:18:08 -03:00
orezraeyandClaude Opus 5.5 d677bc6353 Merge main into fix/libkernel-posix-thread-attr-measured-ps5
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 21:17:39 -03:00
milescovielloandClaude Opus 5.5 a938dd8f20 feat(libc): write the called imports to APS5_TRACE_CALLS_FILE every 10 seconds
A traced run that ends without a crash or an abort never reports which
imports it called. With APS5_TRACE_CALLS_FILE set, the first traced import
starts a thread that rewrites that file every 10 seconds with every import
called so far, most called first.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 00:15:39 +00:00
MaxandClaude Opus 5.5 55ff5484d6 fix(libkernel): time out timed locks of a lock the caller already holds
scePthreadMutexTimedlock on a mutex the caller holds, and
scePthreadRwlockTimedrdlock and scePthreadRwlockTimedwrlock on a rwlock
it holds for writing, returned EDEADLK at once. The console returns
ETIMEDOUT, as the prosper console oracle measured. They now sleep until
the timeout and return ETIMEDOUT, as FreeBSD libthr does. The POSIX
timed locks call these and change with them.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 02:15:31 +02:00
Yunus Shaikh 7a4b965d6f feat(libSceSystemService): forward sceLncUtilLoadExec to sceSystemServiceLoadExec
sceLncUtilLoadExec takes the same path and null-terminated argument
list, which the SystemService call passes on to it on the console. It
returns sceSystemServiceLoadExec's result: the same parameter errors,
the same refusals for paths it cannot start, and "exit" ends the title
in the same way.
2026-10-25 00:15:25 +00:00
Yunus Shaikh c2eb0a2404 feat(libSceSystemService): report the running title as not suspended
sceLncUtilIsAppSuspended, sceSystemServiceIsAppSuspended and
sceLncUtilIsSpeculativeLaunch write false for the running title's app
ID. The title that calls them is running and has no shell to suspend
it. It was started from the host rather than by sceLncUtilLaunchApp,
so no LncLaunchParam asked for a speculative launch. Another app ID
and a null output still throw.
2026-10-25 00:15:25 +00:00
Yunus Shaikh f5afb8755c feat(libSceSystemService): report the running title's user
sceLncUtilGetAppLaunchedUser, sceSystemServiceGetAppLaunchedUser and
sceShellCoreUtilGetUserFocus write the initial user for the running
title's app ID. That is the user sceUserServiceGetInitialUser and
sceUserServiceGetForegroundUser report. Another app ID and a null user
pointer still throw.
2026-10-25 00:15:25 +00:00
Yunus Shaikh 695041093b feat(libSceSystemService): answer the running title's app ID lookups
sceLncUtilGetAppId and sceLncUtilIsAppLaunched accept the running
title's ID as sceSystemServiceGetAppId does, and
sceLncUtilGetAppIdOfRunningBigApp returns what
sceSystemServiceGetAppIdOfRunningBigApp returns. Both big-app lists
write the running title's app ID as their only entry, because AnyPS5
runs one title. Another title ID, a null pointer and a list capacity of
0 still throw.
2026-10-25 00:15:25 +00:00
Queuze f560447782 Merge remote-tracking branch 'origin/main' into codex/check-compile-phase-options 2026-10-24 21:10:27 -03:00
Queuze b38b41aa8a fix(check-compile): enforce syntax mode 2026-10-24 21:10:27 -03:00
Yunus Shaikh afd5c4a20e feat(libkernel_sys): wait for AMM command buffer completion
sceKernelWaitCommandBufferCompletion waits for an AMM submission as
libSceAmpr's sceAmprAmmWaitCommandBufferCompletion does: 0 once the
submission has run, SCE_KERNEL_ERROR_ESRCH for an id that was never
submitted. The signature follows ampr_emu's libkernel hook targets,
where the libSceAmpr wait forwards to it.

guest_kernel_sys submits a map written by sceKernelWriteMapCommand,
waits for it and uses the mapped page, and checks ids 0 and past the
last submission.
2026-10-25 00:09:03 +00:00
Yunus Shaikh 92f7271cc6 feat(libkernel_sys): write the AMM map, unmap, remap and protection commands
The twelve AMM kernel writers record into a caller buffer the command
their libSceAmpr command buffer sibling appends, built with the shared
encoder: sceKernelWriteMapCommand, sceKernelWriteMapWithGpuMaskIdCommand,
sceKernelWriteMapDirectCommand, sceKernelWriteMapDirectWithGpuMaskIdCommand,
sceKernelWriteUnmapCommand, sceKernelWriteRemapCommand,
sceKernelWriteRemapWithGpuMaskIdCommand, sceKernelWriteMultiMapCommand,
sceKernelWriteMultiMapWithGpuMaskIdCommand,
sceKernelWriteModifyProtectCommand,
sceKernelWriteModifyProtectWithGpuMaskIdCommand and
sceKernelWriteModifyMtypeProtectWithGpuMaskIdCommand.

The signatures follow ampr_emu's libkernel hook targets: the sibling's
arguments as 64-bit values between the destination and the size output.
A null destination only reports the size and a null size output only
writes, as for sceKernelWriteModifyMtypeProtectCommand. Invalid ranges,
offsets and protections return the sibling's SCE_KERNEL_ERROR_EINVAL and
write nothing; protection or mask bits above 32 are rejected too.

guest_kernel_sys compares each writer with its sibling on valid and
invalid arguments, in both modes.
2026-10-25 00:07:53 +00:00
Felipebmaitan b31ed5dc5b test(job-manager): refresh Linux reference on current prerequisites 2026-10-24 21:06:46 -03:00
Felipebmaitan 0d4025f98f fix(job-manager): refresh compute shutdown on public headers 2026-10-24 21:06:30 -03:00
Felipebmaitan 55efb35489 fix(job-manager): refresh GPU barriers with shared API types 2026-10-24 21:06:13 -03:00
Felipebmaitan 043c7de79a fix(job-manager): refresh profiler with shared API types 2026-10-24 21:05:57 -03:00
Felipebmaitan 8ab682946a fix(job-manager): refresh owned state on current prerequisites 2026-10-24 21:05:40 -03:00
Felipebmaitan 42bff60650 fix(job-manager): share registration imports and fixture types 2026-10-24 21:05:21 -03:00
Felipebmaitan 43efd58266 fix(job-manager): reconcile lifecycle with public headers 2026-10-24 21:05:08 -03:00
thibautandClaude Opus 5.5 ad047899bb perf(agc): grow the pipeline store from 1024 up to 4096 entries
The graphics pipeline store kept a fixed 1024 entries and the pipeline journal replayed at most
1024 records, and a replayed pipeline that found the store full was dropped. A title whose
working set is larger rebuilt the rest at the draw on every run, and evicted pipelines it kept
using were rebuilt again and again.

The bound now starts at 1024 and doubles up to 4096: a journal replay that does not fit grows it
instead of dropping the pipeline, and so does eviction churn (a ghost list of evicted keys, checked
every bound/32 evictions: more than half of them came back). It never shrinks during a run;
APS5_PIPELINE_STORE_ENTRIES still fixes it. The journal loads its last 4096 records by default
(APS5_PIPELINE_JOURNAL_ENTRIES). Resident pipelines are bounded by count, not bytes.

agc_driver_recorder_tests --benchmark-pipeline-store-memory [count] (opt-in, not registered)
builds count graphics pipelines with one fragment module each through CachedPipeline and prints
process private bytes and VK_EXT_memory_budget heap usage before and after: with the triangle
shaders about 59 KiB host and no device memory per pipeline on an RTX 4090, 100 KiB host and
8 KiB device-local on a UHD 770.

Tests: agc_pipeline_store_growth (fails on main), agc_pipeline_store_fixed_bound,
agc_pipeline_store_replay_growth (replays on one thread: the mock Vulkan is not thread-safe).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_017SNUYRd7sRKZrMYpquAsnU
2026-10-25 02:02:41 +02:00
Dean cf528e78c6 Merge pull request #9160 from yabanana/feat/kernel-sys-thread-queries
feat(libkernel_sys): identify the initial pthread
2026-10-25 12:57:53 +13:00