Commit Graph
10481 Commits
Author SHA1 Message Date
Adrià de2f884cc3 Merge pull request #6106 from Zinebyte/fix/deferred-host-dependencies
fix(relinker): scope host dependencies to required guest modules
2026-10-18 18:39:36 +02:00
Adrià 13e48ed290 Merge pull request #5984 from ErenYeager1836/docs/clarify-macos-host-support
docs: clarify macOS host support
2026-10-18 18:34:56 +02:00
Mehran 3518eb8ded perf(agc): copy small draw snapshots into a per-recorder upload chunk 2026-10-18 18:32:00 +02:00
fdfawef324andClaude Opus 5.5 2ae7896b6d fix(libSceNetCtl): keep the callback argument and deliver the state from sceNetCtlCheckCallback
sceNetCtlRegisterCallback and sceNetCtlRegisterCallbackV6 stored only
the function and dropped its argument, and sceNetCtlCheckCallback
returned 0 without calling anything, so a title that polls
sceNetCtlCheckCallback until its callback reports IPOBTAINED never
got the event.

Each callback slot now keeps the function, its argument and the last
event it received; unregistration clears the slot. With no IPv4
callback registered, sceNetCtlCheckCallback returns 0 without querying
the host. Otherwise it takes the state from the same host-interface
predicate as sceNetCtlGetState, IPOBTAINED (3) or DISCONNECTED (1)
(shadPS4 src/core/libraries/network/net_ctl_codes.h L27-29
@15abf68c9b52), marks the IPv4 slots whose last event differs and
calls them on the calling thread with their argument after the lock is
released, so a callback can unregister itself. Delivery once per state
change and slot follows KytyPS5 src/libs/network.cpp @9e41d8320a27
(NetCtlCallbackSlot L3447-3451, NetCtlCheckCallback L3648-3661,
NetCtlRegisterCallback L3687-3707); shadPS4 net_ctl_obj.cpp L47-57
delivers on every check instead, and the debt entry records the
difference and that KytyPS5 calls the callbacks under its lock.
sceNetCtlTerm clears both tables, as KytyPS5 NetCtlTerm (L3625-3633)
does. V6 slots keep their argument but get no event, since no source
says which call delivers them.

NetCtlCallback is now an APS5_VABI pointer, so the Windows build calls
the guest function with the System V ABI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 18:31:00 +02:00
Adrià Franch d5b14eaeba fix(libkernel): link libc into semaphore_trace_tests for MinGW 2026-10-18 18:30:22 +02:00
MarcZX100 edbd209a92 feat(libkernel): trace semaphore lifecycle under sync logging 2026-10-18 18:30:11 +02:00
Adrià aff1f7190d Merge pull request #6102 from DavidSamir/fix/relinker-trap-windows-guest-gs
fix(relinker): trap guest GS accesses in Windows output instead of refusing the module
2026-10-18 18:29:03 +02:00
Karim Masmoudi 57e52c1f03 fix(relinker): report processor 0 from RDTSCP under --to-rosetta
Rosetta sets RDTSCP's ECX to its constant TSC_AUX, 0xAAAAAAAB, which is
not a processor index. --to-rosetta already makes RDPID return processor
0 for the same reason, so code reading the processor through RDTSCP saw
a different value from code reading it through RDPID.

--to-rosetta now moves RDTSCP into an optional stub that runs the
instruction unchanged and then loads 0 into ECX with a MOV, which
leaves the counter in EDX:EAX and the flags as they were. A site with no
movable instruction after it for the jump is kept, as for RDPID. The
Intel target and a plain relink are unchanged.
2026-10-18 18:27:15 +02:00
Dean d3d8d79c59 Merge pull request #7583 from MarcZX10/codex/fix-video-out-flip-vblank
test(videoout): correct first flip pacing assertion
2026-10-19 05:22:52 +13:00
Adrià 39ff296960 Merge pull request #6097 from XD3V3LOP3RX/fix/host-import-probe-use-stamp
fix(graphics): keep discarded import probes from pinning windows
2026-10-18 18:19:35 +02:00
Maz bb39eba819 fix(agc): decode COLOR_8_8 UINT as R8G8_UINT 2026-10-18 18:17:52 +02:00
MarcZX100 fd872264e2 fix(agc): omit unavailable storage MSAA placeholders 2026-10-18 16:02:26 +00:00
Adrià FranchandClaude Sonnet 5.5 96c692c887 test(agc): expect 32-bit buffer atomics off a DWORD boundary to act on their containing dword
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 17:54:44 +02:00
Nahid DelicandClaude Opus 5.5 7e4ce1ab3d fix(shader): act on the containing dword for unaligned 32-bit buffer atomics
The RDNA2 ISA (8.1.7) ignores the two low address bits of dword or wider
non-formatted accesses in alignment mode DWORD. MXGP 26 (PPSA30839) sets
bits with buffer_atomic_or at odd byte offsets, which recorded an
unaligned BDA fault and dropped the atomic. A 32-bit buffer atomic now
acts on the dword that holds its address; 64-bit atomics off an 8-byte
boundary still fault.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 17:54:44 +02:00
Adrià 81cb863394 Merge pull request #6061 from wachi35676/fix/libc-drive-component-under-mount
fix(libc): keep a drive-letter component of a guest path under its mount on Windows
2026-10-18 17:51:46 +02:00
MarcZX100 75d0e9a7f4 test(videoout): correct first flip pacing assertion 2026-10-18 15:46:12 +00:00
Adrià 91ddd9e3a6 Merge pull request #5998 from MarcZX10/codex/agc-account-kept-storage-images-5961-latest
fix(agc): include retained storage images in recorder budget
2026-10-18 17:37:36 +02:00
Adrià a0f3dc4014 Merge pull request #6091 from Ondra97/codex/fix-cond-canceled-signal
fix(libkernel): preserve condition signals across cancellation
2026-10-18 17:33:22 +02:00
Adrià 9b6837704f Merge pull request #6014 from SandstromPL/fix/agc-msaa-enable-clear-depth-target
fix(agc): rasterize a multisampled depth target without MSAA_ENABLE at the pixel center
2026-10-18 17:26:06 +02:00
Adrià 4ed044d51c Merge pull request #6012 from EagleBearerYS/feat/videoout-performance-overlay
feat(agc,videoout): show an optional performance overlay with F10
2026-10-18 17:26:01 +02:00
Dean 3f4a7f3b22 Merge pull request #6142 from milescoviello/fix/net-setsockopt-kernel-socket
fix(libSceNet): set an option on a libkernel socket through sceNetSetsockopt
2026-10-19 04:23:20 +13:00
Dean 5f37c3e09a Merge pull request #6088 from notaxeltv/feat/libc-cnd-init-default-name-ppsa34015
feat(libc): _Cnd_init_with_default_name_override (PPSA34015)
2026-10-19 04:22:55 +13:00
Dean 029cc57054 Merge pull request #6140 from milescoviello/fix/net-close-kernel-socket
fix(libSceNet): close a libkernel socket through sceNetSocketClose
2026-10-19 04:22:51 +13:00
MarcZX100 5394684198 fix(agc): create legal sampled cache placeholders 2026-10-18 15:02:29 +00:00
fogydes 68f0acf4f7 fix(libSceJobManager): prevent wait deadlock on node exhaustion and clean up lifecycle 2026-10-18 20:30:35 +05:30
Dean e5f18ea99a Merge pull request #7558 from mugurc/fix/libc-app-archive-exit
fix(libc): keep the app0.zar state through exit handlers
2026-10-19 03:51:56 +13:00
Adrià 50fafac3d8 Merge pull request #5993 from Get-fix/ps4/param-sfo
feat(libkernel): read param.sfo when param.json is absent
2026-10-18 16:50:34 +02:00
Adrià 2da44a1873 Merge pull request #5918 from karimibrahim07/fix/libkernel-adopted-stack
fix(libkernel): report the precommitted stack of an adopted thread on Windows
2026-10-18 16:50:30 +02:00
Adrià e00260b6b3 Merge pull request #5994 from Get-fix/ps4/sce-module-code-extent
fix(relinker): stop module syscall scans at the PLT and skip the PS4 loader path
2026-10-18 16:45:24 +02:00
Adrià bb86ca38b8 Merge pull request #5992 from Get-fix/ps4/libkernel-underscore-io
fix(libkernel): export _readv, _writev, _fcntl, _fstat, __sys_socketex
2026-10-18 16:45:19 +02:00
Adrià a01f668ae5 Merge pull request #5930 from Ondra97/codex/fix-net-recvmsg-host-write
fix(libSceNet): guard recvmsg guest outputs
2026-10-18 16:45:14 +02:00
MarcZX100 27497f0474 fix(agc): account for batch-retained evicted storage images 2026-10-18 14:34:09 +00:00
MarcZX100 902b0515a2 fix(agc): account recorded storage images in keep budget 2026-10-18 14:32:59 +00:00
Karim Ibrahim 267cb56a0d fix(libkernel): report the precommitted stack of an adopted thread on Windows
An adopted thread (the main thread, or a host thread that calls
scePthreadSelf) reported its whole Windows stack reservation, and so
did sceKernelIsStack on a host thread before adoption. A relinked
executable reserves 0x210000 bytes for its main thread and commits the
top 0x200000, so the lowest 64 KiB of the reported stack hold only
reserved pages and Windows' guard pages. mprotect fails there, so
HotSpot in Java 25 LAN / DNS (PPSA99869) could not create the main
thread's stack guard pages ("Attempt to allocate stack guard pages
failed").

When everything above the bottom allocation granule is committed
read-write, the host stack is now reported from there, as created
guest threads report only their committed stack. Other host stacks
keep the whole range. The committed-pages walk is shared with
StartNativeThread and throws when VirtualQuery fails.
2026-10-18 16:24:10 +02:00
Slick Daddy 536fef3228 fix(libc): format %p the way the console's libc does
The console's libSceLibcInternal.sprx (measured on firmware 12.70 in
#7549) prints %p as bare lowercase hex without a 0x prefix, prints 0 for
a null pointer, ignores #, + and the space flag, counts only the digits
towards the width, pads with spaces on the left (on the right for - and
with zeros for 0 when there is no precision), treats the precision as
the minimum number of digits, prints nothing for a null pointer under
%.0p, and accepts the l length. FormatPointer instead followed FreeBSD
and printed 0x..., which is what a title does not see on hardware.

FormatPointer now prints the digits alone, the narrow Windows formatter
accepts %lp, and Linux routes %p and %lp to the guest formatter instead
of glibc, which prints the FreeBSD form and (nil) for a null pointer.
The wide family still refuses %lp, because the console's swprintf was
not measured with it; it returns -1 as it does for any other conversion
the formatter rejects. The debt note records the pointer cases the
console was not measured with and what the Linux routing means for a
format that mixes %p with a refused conversion.
2026-10-18 16:59:34 +03:00
Dean a62c724c38 Merge pull request #6135 from DavidSamir/fix/videoout-cursor-exports
feat(libSceVideoOut): export the hardware cursor functions as not implemented
2026-10-19 02:54:55 +13:00
Dean f834e249c4 Merge pull request #6129 from fdfawef324/claude/agc-tessellation-refusal-fields
fix(agc): print the VGT_TF_PARAM and VGT_LS_HS_CONFIG fields of a refused tessellation draw
2026-10-19 02:54:51 +13:00
Dean 6bef39cb44 Merge pull request #6122 from fdfawef324/claude/mc-agc-event-write-streamout
feat(agc): accept SAMPLE_STREAMOUTSTATS events without a destination in EVENT_WRITE
2026-10-19 02:54:48 +13:00
Dean 644e384808 Merge pull request #5859 from gjonn/perf/shader-bda-anchors
perf(shader): look up the BDA range of a user-data pointer once at program entry
2026-10-19 02:54:44 +13:00
babyhuey 2d8d3b9dc1 fix(libc): keep the host standard stream when a guest freopen of it fails 2026-10-18 09:12:17 -04:00
mugurc f347461351 feat(libSceSystemService): LoadExec on macOS hosts
sceSystemServiceLoadExec found its own executable through /proc/self/exe
and replaced the process with fexecve after close_range, none of which
macOS has, so on macOS every call except "exit" threw. On macOS:

- the running executable's path comes from _NSGetExecutablePath, resolved
  with std::filesystem::canonical, as libSceNpEntitlementAccess and
  libSceFont already do;
- the target must be an x86-64 Mach-O executable (MH_MAGIC_64,
  CPU_TYPE_X86_64, MH_EXECUTE) that the user may run;
- macOS has no fexecve, so the process is replaced by path with
  posix_spawn and POSIX_SPAWN_SETEXEC; POSIX_SPAWN_CLOEXEC_DEFAULT closes
  every descriptor but the standard streams, as close_range does on Linux;
- before the replacement the exit starts and the shutdown callbacks run
  (LibcStartExit, then LibcRunShutdown), as on Linux, so guest threads
  that call a stopped library wait instead of unwinding;
- descriptor 2 gets the host standard error back before the replacement,
  as on Linux, and guest_system_load_exec_standard_error runs on macOS.

A launch without arguments keeps the Linux execv path, which macOS has.
guest_system_exit finds its own executable the same way on macOS.
2026-10-18 16:05:07 +03:00
mugurc d10c1b43ba fix(libc): keep the app0.zar state through exit handlers
Every path resolution reaches the app0.zar state, which was a
function-local static: it is destroyed during exit before the handlers
registered ahead of its first use run, so a path resolved in such a
handler locked a destroyed mutex. glibc lets that pass; macOS fails it
with EINVAL, and guest_path_lifetime failed there. The state is now
allocated once and never destroyed, as the working directory state
beside it already is.
2026-10-18 16:03:19 +03:00
Gjon Gojcevic ca7f2f60b5 fix(shader): update the DescriptorBinding size assert for samplerCoordinatesIgnored
The new samplerCoordinatesIgnored field adds 40 bytes to DescriptorBinding
under libstdc++ on Linux x86_64, where the size assert is compiled. The
encoder and decoder already carry the field.

AI-assisted: yes
2026-10-18 09:02:32 -04:00
Gjon Gojcevic a2e79fb3fd fix(shader): bind an unnormalized S# normalized when it samples only null images
An S# that forces unnormalized coordinates was refused when it samples a
T# the shader declares 3D, 2D-array, cube or multisampled, since Vulkan
allows unnormalized coordinates only with a single-level 1D or 2D view.
A null T# reads zeros at any coordinate, and a T# whose channels all
select constants is emitted as those constants without a sample, so when
the S# samples no other T# its coordinates cannot change a result. Such
an S# is now marked in its binding (samplerCoordinatesIgnored) and the
driver creates its sampler without FORCE_UNNORMALIZED. The flag is part
of the binding content key and of the shader disk cache, whose format
version is raised to 38. An S# that also samples a real T# while a null
T# of such a shape shares it is still refused. PPSA01317 pairs an
unnormalized clamped bilinear S# with a null 3D T# and a 3D T# whose
channels all select 0 for image_sample_lz in a compute shader during
boot.

AI-assisted: yes
2026-10-18 09:02:31 -04:00
Dean 385ed71f2c Merge pull request #7368 from CrimsonMac/fix/device-lds-mixed-width-atomics
fix(shader): use 64-bit buffer atomics for device-memory LDS
2026-10-19 01:51:59 +13:00
Adrià 5bf2e139ef Merge pull request #7537 from adriadam10/ci/pages-paths
ci(pages): deploy only when the site or the progress changes
2026-10-18 14:40:46 +02:00
Adrià FranchandClaude afe2141a7c ci(pages): deploy only when the site or the progress changes
Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-18 14:40:02 +02:00
Dean Galvin bb2ab91841 Merge branch 'main' into 6445 2026-10-19 01:25:59 +13:00
Dean 6efb7261b5 Merge pull request #7140 from AlexOfTheForest/fix/listen-backlog-data
fix(libkernel): report the accept queue length for a listening socket's read event
2026-10-19 01:21:56 +13:00
Dean dce6a3ed4e Merge pull request #6492 from Pipodi/fix/resource-cache-released-textures
fix(agc): drop resource-cache entries that hold released sampled textures
2026-10-19 01:21:52 +13:00