Commit Graph
5229 Commits
Author SHA1 Message Date
Adrià 9b4b3cf463 Merge pull request #6941 from kq62/fix/mesh-barycentric-emulation
feat(shader): emulate barycentrics and per-vertex parameters on the mesh path
2026-10-20 00:17:49 +02:00
Savvanis SpyrosandClaude Opus 5.5 1027bfbce1 feat(libs): declare sceGameLiveStreamingEnableLiveStreaming and sceKernelPrintBacktraceWithModuleInfo
PS4 titles import both and do not load without them; every call throws and
the debt files list them.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 01:14:16 +03:00
Joey Fisher b4cd843324 fix(agc): fail a template's proof on a released texture and audit it with the full walk
The fast proof of a cached ShaderResources proves each sampled texture
from write stamps, keys and the pending registry. It never asks whether
the sampled lookup would still return the bound Texture, so a template
whose surface memory is unchanged keeps binding an old object:

- After the sampled cache drops or replaces the entry (#6492 marks the
  texture released), Find keeps serving the template until the next
  Insert, and its fast proof passes.
- When the lookup's answer changes without any lookup running (a
  snapshot whose surface became host-imported is viewed through its
  storage image from then on), nothing replaces the entry and the
  template keeps the snapshot until it leaves the resource cache.

The fast proof now fails with 'replaced texture' when a bound texture
is released. A template whose last full walk is older than
APS5_TEMPLATE_AUDIT_MS (default 1000, 0 turns it off) takes the full
walk instead of the fast proof ('audit'), so a different lookup answer
fails the proof and the template is rebuilt.
2026-10-19 16:13:56 -06:00
davidamsellem 5882b2d449 docs: cite the gfx1031 image atomic measurement, float atomics included 2026-10-20 00:09:52 +02:00
davidamsellemandClaude Opus 5.5 e91d7a16bb docs: measure integer image atomics on 32-bit surfaces on gfx1100
The entry stated that image atomics on 32_SINT and 32_FLOAT act on the
raw dword with no measurement behind it. On gfx1100 the 13 integer image
atomics return and store the same raw-dword results on 32_UINT, 32_SINT
and 32_FLOAT, while 16_UINT and 8_8_8_8_UINT controls differ. gfx1100
has no float image atomics, so that part stays open.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-20 00:09:34 +02:00
Adrià 0929be5e8d Merge pull request #7463 from T3cm0/bionic/vrtracker2-before-init
feat(libSceVrTracker2): answer as the console's module before initialization
2026-10-20 00:08:50 +02:00
simonbronk 2b991e8751 fix(json2): keep numeric conversion independent of host locale
Prevent decimal-comma LC_NUMERIC from emitting invalid JSON and silently truncating decimal-point input. Keep 17-digit output, signed underflow and overflow rejection without changing the process locale.

AI-assisted: yes (OpenAI Codex). Windows WinLibs GCC15.2 Release: original shared Json2 fails the final locale regression; fixed guest_json and guest_json_numeric_locale pass (2/2, no skips). Final conventions pass. Only relevant runtime/test targets built; full build/full suite and game/console/Linux/macOS behavior unverified. No performance or coverage increase claimed.
2026-10-20 00:07:10 +02:00
Savvanis SpyrosandClaude Opus 5.5 d42fb3130d feat(libSceNpManager): answer the PS4 account queries for a signed-out user
sceNpGetAccountCountry, sceNpGetAccountDateOfBirth, sceNpGetAccountLanguage
and sceNpGetParentalControlInfo take an online id that matches no user,
sceNpGetUserIdByOnlineId and sceNpCheckPlus report NP as signed out, and
sceNpNotifyPlusFeature is declared and throws.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 01:04:01 +03:00
Dean Galvin 8ea85e6d55 Merge main into pr-7579
# Conflicts:
#	core/libs/prx/libSceAgcDriver/Graphics/include/TextureTiling.hpp
#	core/libs/prx/libSceAgcDriver/Graphics/src/TextureTiling.cpp
#	docs/dev/debt/libSceAgcDriver.md
2026-10-20 11:01:23 +13:00
erickerxhalliandClaude Opus 5.5 13227a33ed fix(libSceMove): throw for a handle that is not open
Track the handles sceMoveOpen issues. A handle that was never opened,
is closed or was opened before sceMoveTerm now throws instead of
succeeding, since the console's INVALID_HANDLE result and its order
against INVALID_ARG are not known. List the no-controller path under
Silent stubs, as libSceHmd and libSceBluetoothHid do, and check the
handle values in the test.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Arbzg9c2DA4DEFKVSvRgYv
2026-10-19 21:58:05 +00:00
Ishmam Ahmed 78634fb0a9 feat(relinker): support --trace-imports for Linux output
The Linux entry stub now passes each traced import through libc.prx's
TraceImport_nid_no_patch before it calls the guest entry, and stores the
returned thunk in the import's slot. The same imports are traced as on
Windows: functions bound through a PLT slot or a GOT slot, without an
addend, and not weak. TraceImport_nid_no_patch is bound eagerly through
an added GLOB_DAT relocation, so a libc.prx without it fails at load.
Each slot's page is made writable with mprotect first, so slots inside a
PT_GNU_RELRO range can be replaced.

--trace-imports now requires libc.prx among the libraries on Linux too,
and is refused with --macos.
2026-10-19 22:56:03 +01:00
Ishmam Ahmed 0bad015e21 fix(libc): keep the Linux call trace report when two threads abort
A thread that lost the race to write the report passed SIGABRT on straight away, and the default action ended the process while the first thread was still writing. It now waits for the report to finish, polling with nanosleep for at most 2 seconds, before it chains. guest_call_trace_abort_race aborts from two threads at once and checks the whole report; it failed 35 times in 50 without the wait. Reported by jotitadev.
2026-10-19 22:56:02 +01:00
Ishmam Ahmed 0454726744 fix(libc): write the Linux call trace report with signal-safe calls only
The SIGABRT handler used stdio and dladdr, so an abort raised while another thread held the stderr lock or the loader lock hung instead of ending. The report is now formatted into a stack buffer and written with write(2). Callers are named from a module list taken with dl_iterate_phdr when imports are traced, and import counts are read without a lock from a fixed record array. The abort test now holds the stderr lock in another thread, which timed out before this change.
2026-10-19 22:55:08 +01:00
Ishmam Ahmed d128ce7bb8 feat(libc): record traced system library calls on Linux
Build the call tracer for Linux as well as Windows. The thunk area is a
memfd mapped twice, writable and executable, and threads are named by
gettid. Linux has no crash report, so the first traced import installs a
SIGABRT handler that prints the last calls and the most called imports,
then passes the signal on to the previous handler.

guest_call_trace and guest_call_trace_abort now run on Linux too.
2026-10-19 22:55:07 +01:00
juanpimg 90acb96a2e docs(debt): name the declared exports and state the ABI caveat 2026-10-19 23:46:13 +02:00
Ararararagi c136ffa1a9 fix(libSceNpCppWebApi): name the exports the NID database resolves
The 73 sceNpCppWebApiUnknown<nn> stubs carried an APS5_EXPORT alias because their
names were placeholders. aerolib names all of them, and each name recomputes to
the NID a title imports, so the alias is dropped and the loader derives the NID
from the real symbol name, as the rest of the library does. Behaviour is
unchanged: every one of them throws.

The stubs are ordered by demangled name instead of by NID, so the Common template
instantiations and the V1/V5 accessors sit together, as the rest of the file
does. No symbol changes: the built .prx exports the same 359 NIDs as main.
2026-10-19 22:44:05 +01:00
Adrià a01b3287c6 Merge pull request #7432 from MarcZX10/codex/7017-failed-collect-unwatch
fix(agc): save pending results when a fresh write collect fails
2026-10-19 23:43:48 +02:00
Claude 25434db37d docs(libkernel): mark pipe read events as the exception to sockets-only
The entry before it still says sceKernelAddReadEvent and
sceKernelAddWriteEvent take only guest sockets. The pipe entry now says it
is the exception, without editing that entry, which an open change to the
shared-memory entry next to it would conflict with.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-19 21:41:26 +00:00
juanpimg 148e5024b7 feat(prx): drop the exports that main and open pull requests provide
The overlap audit against origin/main and the open pull requests found 39 of
the 193 declared exports that must not be declared here:

- 14 that origin/main already exports. The nid_patcher computes the NID of a
  symbol from its name, and a name ending in _nid_postfix exports the NID of
  the base name, so scePadOpen, sceNetInit and the rest are already there.
- 23 that an open pull request provides: #6832, #6847, #6852, #7846, #7881,
  #7889, #7890, #6977 and #7690.
- 2 whose technical-debt file an open pull request creates: #7463 and #8094.

The scope is now 30 libraries and 154 exports.
2026-10-19 23:37:57 +02:00
milescovielloandClaude Opus 5.5 d6cd6de586 fix(agc): tie comp-to-single clear records to the image and its mapping
A recorded comp-to-single clear stayed valid for its surface address,
size and sample count until another recognized clear replaced it, so a
surface freed and reallocated on the same memory could import the old
color for its 0x10 DCC keys. The record now also carries the image's
pipe-bank XOR, which RADV assigns per image, and is dropped when an
unmap or allocation removal covers the surface's base.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 21:23:58 +00:00
milescovielloandClaude Opus 5.5 b97a3da15c feat(agc): take comp-to-single clears of 64- and 128-bit texels
RADV's comp-to-single shader stores user data 5 to 8 as the four dwords of
sample 0's texel: v0 from s5, v1 and v2 from s[6:7] through a 64-bit shift by
zero, and v3 from s8. RADV binds the image through a uint view of the texel's
size, up to R32G32B32A32_UINT, so a 64-bit texel takes the first two dwords
and a 128-bit texel all four. 0x10 keys of RGBA16F and RGBA32F targets now
import as a clear to the recorded color instead of being refused.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 21:23:58 +00:00
milescovielloandClaude Opus 5.5 51d6c2f9f2 feat(agc): take RADV's comp-to-single clear of a multisampled DCC target
RADV clears a multisampled DCC target to a color other than 0000, 0001,
1110 or 1111 with radv_clear_dcc_comp_to_single: a compute dispatch stores
the color at the first pixel of every DCC block through a uint storage view,
and the DCC keys become 0x10. The driver refused that view of a resident
target, made a separate target in the view's format otherwise, and couldn't
import 0x10 keys.

The dispatch is now recognized by its code and not run. Its clear color is
recorded for the surface its image descriptor names, and 0x10 keys on a
multisampled target of that surface, size and sample count import as a clear
to that color, for texels up to 32 bits.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 21:23:58 +00:00
wsjardijn dd523997da fix(libSceVideoOut): fall back to 59.94 Hz when display drops below 120 Hz
When a title has configured 119.88 Hz output (mode 15) and the window moves
to a display below 120 Hz, the presenter fell back to std::terminate via a
require() call. Replace the abort with a graceful fallback: reset outputMode
to mode 1 (59.94 Hz), fire the output-mode event so the title is notified,
and continue presenting.

This matches the HDMI output mode renegotiation a real display change
requires: the system falls back to a compatible mode and notifies the
title, rather than terminating the process.

After the fallback:
- sceVideoOutGetOutputStatus reports refreshRate 3 (59.94 Hz)
- sceVideoOutGetResolutionStatus reports refreshRate 3
- vblanks run at 59.94 Hz (every-other-tick skip resumes)
- sceVideoOutIsOutputSupported(mode=15) returns the unsupported error
- sceVideoOutConfigureOutput(mode=15) succeeds again once the window is
  on a 120 Hz display

The console's exact behaviour when a 120 Hz display is lost has not been
measured; this fallback is recorded as unverified in the debt file.

Fixes #7877
2026-10-19 23:21:16 +02:00
David 573d85e2b8 Merge remote-tracking branch 'origin/main' into feat/shader-barycentric-tessellation-last-vertex 2026-10-20 01:20:06 +04:00
Slick Daddy abf83aa4a8 feat(libSceVideodec): implement the video decoder on top of libSceVideodec2
libSceVideodec's five exports were stubs that threw. Decoder creation,
decoding, flushing, resetting and deleting are implemented with the
structure layouts of shadPS4's PS4 library, and the decode runs through
libSceVideodec2, which decodes H.264 with FFmpeg. The picture is copied
into the caller's frame buffer with the pitch aligned to 64 and the coded
height, the chroma after the luma rows, and the picture information holds
the timestamps and the crop offsets.

A guest test decodes the H.264 fixture through the library and checks the
pictures against the reference hashes.
2026-10-20 00:17:11 +03:00
juanpimg 2f0ed638dc feat(prx): declare the missing PS5 3.20 system exports
AnyPS5 resolves a title's imports by NID, so a title that imports a system
function no library provides fails to load with an unresolved import. The
PS5 3.20 export inventory lists 193 such exports across 37 PS5 system
libraries AnyPS5 implements but does not provide.

Declare them as throwing stubs so those titles load and reach their next
blocker. Each declaration calls NotImplemented_nid_no_patch and returns 0;
none of them implements the function. Declarations with a credible
prototype use it and cite the source with a pinned commit, and the rest
are declared without parameters, which resolves the import without making
an ABI claim. The technical-debt files record the limitation per library.

libSceMbus and libSceSystemService are left out because pull request #7821
declares them. libSceAgc is left out because its exports are versioned, so
the 3.20 NID names a different symbol from the one AnyPS5 ships.
libSceAvPlayer.native is left out because it compiles libSceAvPlayer's
Export.cpp.

Names and NIDs come from the PS5 3.20 export inventory at
https://github.com/DNNDHH/PS5-3.20_Libs/tree/b2a77c09cd71c01f34c790cfbe98c751a13262ad
2026-10-19 23:16:55 +02:00
Yossi Yadgar 3bdd430a32 docs(debt): note a float color export into a uint target is accepted 2026-10-20 00:07:54 +03:00
XairRrR 0e9d052541 Merge main into pr-7154
# Conflicts:
#	core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
2026-10-19 23:07:50 +02:00
Dean Galvin 5e88d5f83e Merge main into pr-6730
# Conflicts:
#	core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
#	core/libs/prx/libSceAgcDriver/tests/BdaResources.cpp
#	docs/dev/debt/libSceAgcDriver.md
2026-10-20 09:56:39 +13:00
Dean 3756c72dc6 Merge pull request #6479 from EagleBearerYS/perf/agc-host-import-blocks
perf(agc): take the host import budget from the device's memory budget
2026-10-20 09:52:09 +13:00
Dean 524259954a Merge pull request #6457 from EagleBearerYS/perf/agc-host-import-aligned-blocks
perf(agc): import adjacent host ranges as aligned blocks and stop re-trying budget refusals
2026-10-20 09:51:55 +13:00
mugurc 7701a9b9da feat(libkernel): UDP sockets and name resolution on macOS hosts
The guest socket layer relies on a few Linux calls:

- The equeue wait uses poll with the timeout rounded up to a millisecond;
  macOS has no ppoll.
- A readable stream socket whose peer closed is reported with POLLHUP by
  peeking one byte; macOS has no POLLRDHUP.
- FIONREAD on a datagram socket, and the byte count that fstat and kevent
  report for it, is SO_NREAD, the size of the next datagram; macOS adds the
  source address to FIONREAD.
- socketpair throws for SOCK_SEQPACKET, which has no AF_UNIX pair on macOS.
- gethostbyname replaces gethostbyname_r, which macOS lacks.

The UDP test sends on its connected socket without an address, as #7475
does, because macOS, like FreeBSD, fails sendto with an address on a
connected socket with EISCONN. The log test uses a datagram pair with
enlarged buffers instead of SOCK_SEQPACKET.
2026-10-19 23:36:56 +03:00
Alexej Szpevák 675ff30898 feat(libc): scan 16-bit wide conversions in the sscanf family on Linux
sscanf, vsscanf, sscanf_s and vsscanf_s threw on Linux for %ls, %lc, %l[, %S and %C, because glibc stores a 32-bit wchar_t per character into the guest's 16-bit buffer. ScanGuest, the per-directive scanner the _s forms already use, now scans those fields itself: the input is decoded as UTF-8, mirroring the narrow printf family's UTF-8 output, and each character is stored as one 16-bit unit, the width and the _s size counting characters; %ls skips leading white space and stops at the next, %l[ matches an ASCII scanset with ranges and negation, and a %lc field that meets the end of the input early keeps what it read, as FreeBSD's convert_wchar does. sscanf and vsscanf route a format with a wide conversion through ScanGuest and keep the host path otherwise. The UTF-8 decoding and scanset matching live in ScanWideField.cpp, which throws for input that is not UTF-8, a character outside the BMP, a scanset member outside ASCII and positional arguments next to a wide conversion; wide conversions in fscanf still throw.
2026-10-19 22:30:07 +02:00
Dean Galvin adf8e05f46 Merge main into pr-7042
# Conflicts:
#	core/shader/recompiler/Translation/include/Translation/TranslationContext.hpp
#	core/shader/recompiler/Translation/src/Float64Instructions.cpp
#	docs/dev/debt/shader.md
2026-10-20 09:25:06 +13:00
Dean 6d89a7bd8a Merge pull request #7036 from thuanquang/fix/f64-rounding-denormal-flush
fix(shader): flush f64 floor, ceil, fract and frexp denormal inputs
2026-10-20 09:22:37 +13:00
Dean 6b981a212c Merge pull request #7675 from valenciana-nc/fix/recvmsg-guest-validation
fix(libkernel): fail recvmsg with EFAULT on guest memory it cannot read or write
2026-10-20 09:21:54 +13:00
Adrià 12ee57a39b Merge pull request #7396 from ErenYeager1836/fix/playgo-dialog-get-result-not-finished
fix(libScePlayGoDialog): return error for uncompleted dialog in scePlayGoDialogGetResult
2026-10-19 22:18:46 +02:00
Adrià 602d8e66b1 Merge pull request #7429 from ps54all/feat/shader-ds-ordered-count-swap
feat(shader): model ds_ordered_count swap
2026-10-19 22:17:42 +02:00
Dean Galvin f1ac3be50c Merge main into pr-6557
# Conflicts:
#	core/libs/prx/libSceAgcDriver/tests/execution/NativeMultisampleDepth.cpp
2026-10-20 09:15:59 +13:00
Adrià cde1ffdedd Merge pull request #7254 from gjonn/feat/agc-layered-2d-array-color-views
feat(agc): render layered draws into 2D array color views
2026-10-19 22:05:15 +02:00
Adrià 7fe0790e59 Merge pull request #7388 from pushkarreddyy/feat/recompiler-waterfall-image-table
feat(recompiler): support waterfall select conditions and key bounds in pointer image tables
2026-10-19 22:04:09 +02:00
Dean f1861e4141 Merge pull request #7855 from KernelPanicNT/fix/pngdec-create-max-width
fix(libScePngDec): reject a maximum image width above 1000000
2026-10-20 08:52:31 +13:00
Adrià dfd22c1887 Merge pull request #7428 from mrfelek/fix/ngs2-setup-clears-callback
fix(libSceNgs2): clear the voice callback on sampler and mixer setup
2026-10-19 21:52:05 +02:00
Dean aea539e17a Merge pull request #7854 from KernelPanicNT/fix/userservice-initialize-priority
fix(libSceUserService): check the thread priority on initialization
2026-10-20 08:51:52 +13:00
Adrià f745930f03 Merge pull request #7413 from thuanquang/fix/table-call-hoisted-descriptor
fix(shader): link a table call whose descriptor load sits before its loop
2026-10-19 21:50:42 +02:00
voidlakhan 0d24f581f4 docs(ampr): preserve existing debt entries 2026-10-19 19:47:08 +00:00
Johan David e4898783b6 feat(agc): sample the draw committer with APS5_SAMPLE_COMMITTER
Queue 0's draw committer records the draws the packet worker hands
over. When the worker's APS5_SAMPLE_WORKER stacks wait in
DrawPipeline::Enqueue, the committer is the thread that bounds the
frame, and only APS5_SAMPLE_THREADS sees it: 40 addresses, 12 frames
deep, without whole stacks.

APS5_SAMPLE_COMMITTER=<file> attaches the worker's sampler to the
committer when its thread starts and writes the same two files. Both
use one start function, and StopWorkerSampler stops both.
2026-10-19 14:45:14 -05:00
XairRrR a1c0f34f4b Merge main into pr-7154
# Conflicts:
#	core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
2026-10-19 21:43:06 +02:00
Leonardo 2b64ff202c Merge branch 'main' into feat/voiceqos-packet-attribute 2026-10-19 21:42:23 +02:00
Adrià 8075b6af19 Merge pull request #7398 from ErenYeager1836/fix/login-dialog-close-status
fix(libSceLoginDialog): transition to finished on dialog close
2026-10-19 21:38:18 +02:00