Commit Graph
12196 Commits
Author SHA1 Message Date
erickerxhalliandClaude Opus 5.5 0afb0c58dd test(libSceMove): register guest_move away from the netctl tests
Move the guest_move registration in core/libs/CMakeLists.txt next to the
voice tests so it no longer shares lines with the netctl access point
tests that another open pull request adds.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Arbzg9c2DA4DEFKVSvRgYv
2026-10-19 23:07:47 +00:00
Adrià 7c2334d208 Merge pull request #7477 from SwetabhSingh17/feat/json2-value-operator-bool
feat(libSceJson2): implement Value, Object, Array, and String methods
2026-10-20 01:02:24 +02:00
Adrià 9f9cf38bb0 Merge pull request #7493 from Lindamea1/fix/scenet-tcp-nodelay
fix(libSceNet): support TCP_NODELAY in sceNetSetsockopt and sceNetGetsockopt
2026-10-20 01:01:26 +02:00
JAB-devandClaude Sonnet 5.5 5f6dee64c4 fix(libSceRtc): make sceRtcTickAdd* wrap and ignore range like the console
The seven fixed-unit additions (Ticks, Microseconds, Seconds, Minutes,
Hours, Days, Weeks) now only check the two pointers and store the source
plus the amount modulo 2^64; they no longer return 0x80B50003 for a source
above 9999-12-31 or a result outside the tick range.

sceRtcTickAddMonths and sceRtcTickAddYears no longer reject a source tick
above the 9999 limit. They split the tick into a 16-bit year, add the months
in 32 bits and divide by 12 truncating toward zero. They return 0 without
writing when the 16-bit target year is outside 1 to 9999 or the month sum is
negative and not a multiple of 12; otherwise they write the result.

Observed by executing the code of libSceRtc.sprx from PS5 firmware 3.20 and
4.03 in an emulator with its imports mocked (entry points 0x32c0-0x3440,
0x3470, 0x37f0 on 3.20; 0x3370-0x34f0, 0x3520, 0x3890 on 4.03), not on a
console. Both firmwares give identical results on the same inputs. Current
firmware was not checked.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-20 00:55:55 +02:00
Dean 0393728fd3 Merge pull request #7005 from TheSovietWaffle/fix/videoout-disable-sdl-wgi
fix(libSceVideoOut): add APS5_NO_WGI to turn off SDL's Windows.Gaming.Input backend
2026-10-20 11:53:01 +13:00
Dean 053034f41b Merge pull request #7579 from LeoFeitosa/fix/dcc-mip-block-units
fix(agc): track DCC storage images with more than one mip as one unit
2026-10-20 11:52:35 +13:00
Dean 2178eb99aa Merge pull request #7042 from thuanquang/fix/f64-add-mul-denormal-flush
fix(shader): flush v_add_f64 and v_mul_f64 denormals by the f64 field
2026-10-20 11:52:04 +13:00
Dean 89369fdc6a Merge pull request #6557 from simonbronk/fix/native-msaa-depth-iterate256
fix(agc): import native multisample depth whose HTILE is not ITERATE_256
2026-10-20 11:51:50 +13:00
Adrià 8b20da70a1 Merge pull request #7546 from ionut27001/fix/libc-rand48-zero-extend
fix(libc): return jrand48 and mrand48 zero-extended as measured on a PS5
2026-10-20 00:51:07 +02:00
Adrià 309ab11eaf Merge pull request #7539 from ionut27001/fix/libkernel-inet-ntop-pad
fix(libkernel): match inet_ntop and inet_pton padding and null pointers as measured on a PS5
2026-10-20 00:51:02 +02:00
Adrià f29546ac4e Merge pull request #7538 from milescoviello/perf/spirv-specialization-arena
perf(shader): keep a specialized module's instructions in one arena
2026-10-20 00:44:44 +02:00
Yossi Yadgar 4c8bdfc8bf test(libSceVideodec2): refuse a null and an empty access unit mid-stream 2026-10-20 01:39:53 +03:00
Yossi Yadgar 9664503056 fix(libSceVideodec2): return access unit errors for a null or empty access unit
sceVideodec2Decode threw for these, which ended the title. Media Player Classic PS5 submits an empty unit when its own converter misreads a length prefix as a start code, and it counts the error and keeps playing on a console.
2026-10-20 01:39:53 +03:00
Adrià 567c5fd630 Merge pull request #7528 from milescoviello/perf/spirv-declaration-cache-probes
perf(shader): probe at most eight declaration cache slots
2026-10-20 00:37:31 +02:00
Adrià e5b65a911a Merge pull request #7518 from milescoviello/perf/ir-reserve-arguments
perf(shader): reserve an IR value's arguments for its opcode at creation
2026-10-20 00:36:26 +02:00
Adrià cb89266437 Merge pull request #7519 from Destroyers212x/test/macos-load-under-rosetta
test(relinker): run the macOS guest module argument check under Rosetta
2026-10-20 00:35:22 +02:00
erickerxhalliandClaude Opus 5.5 95ea06e80b fix(libSceMove): throw when opening for another user or an open slot
sceMoveOpen returned a new handle for any user, type and index, although
the console's result for a user other than the initial user and for a
type and index that are already open is not known. Both now throw, as
libSceHmd2 does for another user. Record which shadPS4 behaviour the
handle and open checks add to.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Arbzg9c2DA4DEFKVSvRgYv
2026-10-19 22:31:58 +00:00
Adrià 3aa4448ed3 Merge pull request #7479 from ErenYeager1836/fix/web-browser-dialog-close-status
fix(libSceWebBrowserDialog): transition to finished on dialog close
2026-10-20 00:30:11 +02:00
raghav314andClaude Opus 5.5 5892c846c7 test(agc): a pixel stage that adds a user word read straight from its SGPR follows a change of that word
The word reaches the data-only mask through userDataRegisterReads (the stage
layout's user-data registers). Dropping those bits from the mask makes the
draw reuse the old stage (it writes 127, expected 191) and verify mode abort.

LLM assistance used.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 03:57:03 +05:30
JJenkx 16acce08df test(shader): round-trip full user-word dependency masks 2026-10-20 03:57:03 +05:30
JJenkx 5bfd1b43a6 test(agc): admit the serial draw key before testing data-only hits 2026-10-20 03:57:03 +05:30
raghav314andClaude Opus 5.5 6bfb4c5a63 perf(agc): data-only draw hits compare only the user words a stage reads
A data-only hit (#494) reused a cached stage only when every user data word
of the stage was unchanged. A stage records the user words it depends on when
it is captured: the words its SRT walk reads as values or bases
(SrtUserDataUse), the words its binding layout forwards into shader data
(userDataRegisterReads), and the vertex fetch table words of its vertex stage
info. A cached stage is now a candidate when only words outside that set
changed; its captured memory is validated as before.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 03:57:03 +05:30
Alexandros Pournaras 0018091176 fix(libSceVideoOut): count window-title FPS on the host clock 2026-10-20 01:23:46 +03:00
David 5032fa60f5 test(libSceVideodec2): check that the thirteen exports report not implemented 2026-10-20 02:20:55 +04:00
SuarezPM bf47697ec0 feat(relinker): lower MCOMMIT and RDPRU for Intel with execution tests
MCOMMIT becomes STC plus NOP padding and RDPRU goes through a
runtime-checked stub returning the host TSC for MPERF/APERF while
other selectors yield zero, with converter and execution tests.

docs/dev/debt/relinker.md records the new lowering and its unverified
assumptions.
2026-10-19 19:19:31 -03:00
Adrià 0d8c51a54e Merge pull request #7478 from ErenYeager1836/fix/cdlg-player-review-close-status
fix(libSceCdlgPlayerReview): transition to finished on dialog close
2026-10-20 00:18:56 +02:00
David b2ce42ff1a feat(libSceVideodec2): export the decoder preset and HEVC functions as not implemented 2026-10-20 02:18:32 +04:00
Adrià efd81c3690 Merge pull request #7503 from milescoviello/perf/reclaim-owned-marks
perf(shader): mark live values of a reclaimed program without a hash set
2026-10-20 00:17:55 +02:00
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
David 2534c106c6 feat(libSceVideodec2): export the library and memory functions as not implemented 2026-10-20 02:16:23 +04:00
Nicolas AboschandClaude Sonnet 5.5 60d5149efa test(libkernel): run guest_sleep_wake_coarse on Windows only
APS5_COARSE_TIMED_WAITS is read under _WIN32 only; on Linux the condition
variable path always ends a sleep when a completion arrives.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 19:15:28 -03: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 3c43ce33a0 test(agc): templates over a released or changed sampled lookup must rebuild
agc_driver_resource_cache_replaced_texture clears the sampled cache
under a template that takes the fast proof and requires the next proof
to fail. agc_driver_resource_cache_lookup_changed checks that a proof
past the audit interval takes the full walk and keeps an unchanged
template, then host-imports the surface (no lookup runs) and requires
the template to stop proving current. Both run over a write-watched
surface so the template takes the fast proof.
2026-10-19 16:13:56 -06: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
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
Adrià 138199da67 Merge pull request #7491 from milescoviello/perf/mse-skip-empty-families
perf(shader): skip masked-select families that have no candidate select
2026-10-20 00:08:44 +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
Adrià a30f58a42c Merge pull request #7486 from ErenYeager1836/test/savedata-dialog-validation-coverage
test(libSceSaveDataDialog.native): cover uninitialized open and null arguments in guest test
2026-10-19 23:57:19 +02: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
Adrià eaa5c92386 Merge pull request #7482 from ErenYeager1836/test/content-delete-error-paths
test(libSceContentDelete): cover null param and uninitialized terminate in guest test
2026-10-19 23:51:07 +02:00
Adrià 7c43dc6bfc Merge pull request #7453 from Agnibha007/fix/unused-filter-fallthrough-padding-abort
fix(relinker): stop the unused-filter CFG walk before trailing zero padding
2026-10-19 23:51:02 +02:00
Adrià 903cbbd5ba Merge pull request #7483 from ErenYeager1836/test/convert-keycode-null-character
test(libSceConvertKeycode): cover null character buffer in guest test
2026-10-19 23:45:51 +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