Commit Graph
8546 Commits
Author SHA1 Message Date
Kovalev Vladislav 3955cd3379 fix(shader): skip unsafe prefixed cache directory traversal 2026-10-19 21:23:28 +06:00
pushkarreddyy a1b6caaf0a feat(libkernel): implement setgid 2026-10-19 20:41:52 +05:30
Nicolas AboschandClaude Sonnet 5.5 462cbf6499 docs(libkernel): shorten the short-sleep debt entry
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 12:09:15 -03:00
David 8a5e742d9d docs(debt): record the macOS JIT shared memory backing and its Rosetta limits 2026-10-19 19:02:04 +04:00
plokmklo 9c9128d45c docs(debt): name the pending results that still have no saved guest bytes
Results that land in a unit whose store ran while its blocks were
watched, after those blocks left the watch while nothing was pending,
have neither saved bytes nor a watch: the unwatch hook found nothing to
save and the write-back refuses as before (#7017). The entry named only
the range that leaves the watch without the hook running over it.
2026-10-19 17:01:06 +02:00
plokmklo 1b6419caae fix(agc): run the unwatch hook when a failed collect leaves the write watch
A MarkWritten whose fresh collect fails (a no-access or unwatchable
resident page inside the 64 KiB block span) took the span out of the
write watch without running the unwatch hook, so pending storage-image
results over it kept no saved guest bytes and their write-back refused:
storing storage image results pending over memory outside the write
watch without the guest bytes saved before them is not implemented
(#7017, Palworld PPSA23126 among others).

The hook now runs over the block span before the blocks leave the
watch, as Unwatch and the import fallback do, with the tracker lock
released for it like #6308 does for imports. The debt entry drops the
failed collect from the unsaved cases.

The check makes a collect fail over a no-access arena page and requires
the hook to have covered the block; it needs the WindowsMappings
protection failure, so it runs in the Windows-only section of the write
tracking test.
2026-10-19 17:00:48 +02:00
Adrià Franch f2558e7be6 docs(libScePlayGoDialog): file the GetResult note under Unknown function info 2026-10-19 16:58:33 +02:00
Nithishvelan M 89e1425662 fix(libScePlayGoDialog): return COMMON_DIALOG_ERROR_NOT_FINISHED for uncompleted dialog
Align scePlayGoDialogGetResult unfinished error code with the other common dialog modules across the tree (0x80B80005, COMMON_DIALOG_ERROR_NOT_FINISHED) instead of 0x80ED0005. Update GuestPlayGoDialog test and technical debt entry accordingly.
2026-10-19 16:58:29 +02:00
Nithishvelan M a9264aa7e9 docs(libScePlayGoDialog): record unverified status check and rename test variable 2026-10-19 16:58:29 +02:00
Nicolas Abosch b131d2db5d Merge remote-tracking branch 'origin/main' into perf/gpu-wake-sleeps 2026-10-19 11:58:20 -03:00
Dean Galvin 88f64ec265 x
# Conflicts:
#	docs/dev/debt/libSceAgcDriver.md
2026-10-20 03:54:33 +13:00
Dean Galvin 1d8d67f8d3 x
# Conflicts:
#	docs/dev/debt/libSceAgcDriver.md
2026-10-20 03:54:32 +13:00
Dean Galvin f3751e96ad Merge main into pr-6457
# Conflicts:
#	docs/dev/debt/libSceAgcDriver.md
2026-10-20 03:54:07 +13:00
Adrià c92eb8da1e Merge pull request #6931 from AnthonyClemens/perf/agc-pipelined-indirect-draws
perf(agc): queue CPU-path indirect draws on the draw pipeline
2026-10-19 16:48:13 +02:00
Adrià 73c59b7be6 Merge pull request #6958 from Pipodi/fix/pipeline-cache-save-try-lock
fix(agc): skip a periodic pipeline cache save while a pipeline creation holds the cache
2026-10-19 16:48:06 +02:00
ps54allandClaude Opus 5.5 b0558ce95f feat(shader): model ds_ordered_count swap
A ds_ordered_count with offset1 bit 4 set swaps the first active lane's value into the GDS counter instead of adding it. Emit it as one device-scope atomic exchange through the same path as the ordered add, and return the counter's previous value to every active lane.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 16:41:03 +02:00
Adrià 863486cc32 Merge pull request #6836 from DavidSamir/fix/libkernel-open-file-limit-macos
fix(libkernel): set the open file limit at load on macOS
2026-10-19 16:38:18 +02:00
Savvanis Spyros fda475e541 Merge branch 'main' of https://github.com/boykopovar/AnyPS5 into fix/savedata-ps4-modules
# Conflicts:
#	core/libs/CMakeLists.txt
2026-10-19 17:33:25 +03:00
Adrià FranchandClaude Sonnet 5.5 d2e5f1b7fe fix(libSceLoginDialog): drop BOM added to the debt file
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 16:30:21 +02:00
pushkarreddyy 91abb61be6 fix(recompiler): use ActiveMaskImplies in SrtTape and restore debt entry 2026-10-19 20:00:18 +05:30
Nithishvelan M 1dbba0243a docs(libSceLoginDialog): document unverified close-before-open lifecycle 2026-10-19 16:30:17 +02:00
Adrià Franch 542fcef382 docs(libSceNpAuthAuthorizedAppDialog): drop BOM and restore the existing debt line 2026-10-19 16:28:46 +02:00
Nithishvelan M 84a6f79fc8 docs(libSceNpAuthAuthorizedAppDialog): document unverified close-before-open lifecycle 2026-10-19 16:28:38 +02:00
David 63e763f443 Merge remote-tracking branch 'origin/main' into feat/shader-barycentric-tessellation-last-vertex
# Conflicts:
#	docs/dev/debt/shader.md
2026-10-19 18:27:34 +04:00
billybobpicklioandClaude Opus 5.5 1ee2996829 perf(agc): skip CPU-path indirect draws that draw nothing before building their stages
An indirect draw read its count and records only after every stage had been captured and
compiled, so a draw whose records all have no vertices or no instances (what GPU-side culling
leaves for most draws in a culled scene) cost a full stage build to draw nothing.

When the front program's last indirect draw took the CPU path, the draw now reads its count and
records first, through the same flush hook, and returns before the stage build when no record
draws. APS5_NO_EMPTY_INDIRECT_SKIP=1 builds them as before. The [draws] profile line counts the
skipped draws. agc_driver_empty_indirect_skip_tests draws one record, two empty ones and one
more, and checks that the empty ones were skipped and the last one draws as the first.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 10:26:35 -04:00
Adrià bcdee66d10 Merge pull request #5782 from SirDarky/feat/shader-mad-f32-gfx1010
docs(debt): record the v_mad_f32 family as measured on gfx1010
2026-10-19 16:19:55 +02:00
thuanquangandClaude Opus 5.5 1ed8eb6d8b fix(shader): sample a 3D T# through DIM 2D_ARRAY as a volume
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 16:19:13 +02:00
Adrià 4f10164198 Merge pull request #6901 from akkadbakkad89/feat/np-cpp-web-api
feat(libs): restore libSceNpCppWebApi for dumps that ship no copy
2026-10-19 16:18:42 +02:00
ShinMalphur 41fe91a13b docs(net): state hardware validation gap first 2026-10-19 20:41:43 +06:30
ShinMalphur 905fa532af docs(net): record process-time behavior source 2026-10-19 20:41:03 +06:30
Adrià c4708fa207 Merge pull request #6916 from MarcZX10/codex/carry-tz-6910
fix(libc): honor guest TZ in time conversions
2026-10-19 16:08:10 +02:00
ntamas94andClaude Opus 5.5 be7068bd81 fix(libSceNet): end IPv4 sceNetInetPton text at whitespace as the PS4 does
PS4 firmware 10.71 converts "1.2.3.4" followed by a space, tab, LF,
VT, FF or CR, and anything after it ("1.2.3.4 x"), to 1.2.3.4 and
returns 1, where host inet_pton returns 0. Leading whitespace, other
trailing bytes (0x01, 0xa0), "1.2.3 " and IPv6 text with whitespace
still fail there.

A failed conversion leaves the destination and sceNetErrnoLoc
unchanged on the console; Winsock inet_pton writes the parsed prefix
before failing, so the conversion now goes through a local buffer.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 16:05:36 +02:00
Adrià ebb478c055 Merge pull request #6939 from milescoviello/fix/systemservice-psmkit-exports
fix(libSceSystemService): declare the PsmKit local process exports
2026-10-19 16:05:00 +02:00
MarcusandClaude Opus 5.5 8768803dd7 docs(debt): record the v_mad_f32 family as measured on gfx1010
v_mad_f32, v_mac_f32, v_madak_f32 and v_madmk_f32 exist only on gfx10.1,
so the RDNA2 oracle can't measure them. Measured on gfx1010 (RX 5700 XT)
in wave32 at IEEE 0 and 1, f32 denormal modes 0 to 3 and round modes 0
to 3, and in wave64, they round the product before the add, flush f32
sources, product (tiny after rounding with an unbounded exponent) and
result in every mode, and choose NaN results like the fma forms.

The behaviour stays left to the driver: translating it on every lane
cost about 15x main on the RX 5700 XT and 23x on an RTX 3070, and a
branch around the exact path still about 6x, so the lowering waits for
the SPIR-V float controls of #981.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 09:54:55 -04:00
Gjon Gojcevic a15694eb94 feat(agc): render layered draws into a one-slice surface as an array of its view's slices
A layered draw into a color view of slices 0 to 5 of a 2D surface whose
CB_COLOR_ATTRIB3 declares one slice was refused. The CB clamps the
render target array index to the view's SLICE_MAX, not to the surface's
slice count, so each layer is written one slice pitch further on.
PPSA01317 renders a 512x512 cube map this way. Such a view now renders as
a 2D array of the view's last slice + 1 slices.

AI-assisted: yes
2026-10-19 15:52:35 +02:00
Adrià 85029a00f5 Merge pull request #6762 from simonbronk/fix/stencil-op-value-export
fix(agc): replace with a stencil operation value the pixel shader exports
2026-10-19 15:45:10 +02:00
Adrià 3efab5ed86 Merge pull request #6914 from moong15/pr/queued-index-read-order
fix(agc): order deferred write-backs after queued draws' index reads
2026-10-19 15:39:49 +02:00
Adrià f4366753aa Merge pull request #6908 from Zinebyte/fix/posix-sleep-cancellation
fix(libkernel): wake POSIX sleep for thread cancellation
2026-10-19 15:39:43 +02:00
Nithishvelan M 6c2ff1df85 feat(libSceNpAuth): export sceNpAuthGetAuthorizationCode and sceNpAuthGetIdToken
Export sceNpAuthGetAuthorizationCode (NID KxGkOrQJTqY) and
sceNpAuthGetIdToken (NID uaB-LoJqHis) in libSceNpAuth, delegating to the
corresponding V3 implementations.

Add test coverage in GuestNpAuth for both calls covering invalid
arguments, signed-out responses on sync requests, deferred async handling,
and unknown request IDs, as well as sceNpAuthGetAuthorizedAppCode. Update
technical debt documentation.
2026-10-19 19:06:14 +05:30
qpavyros edee943afa fix(libkernel): skip untracked shared-memory probes 2026-10-19 15:28:53 +02:00
qpavyros 617696214f feat(libkernel): support named shared memory on Windows 2026-10-19 15:28:35 +02:00
Adrià Franch 6ff980cc2e docs(env): document APS5_VIDEOOUT_TELEMETRY_DIR 2026-10-19 15:27:59 +02:00
Eli Yarson b8607f4ced feat(videoout): write pad and present telemetry to APS5_VIDEOOUT_TELEMETRY_DIR
APS5_VIDEOOUT_TELEMETRY_DIR=<directory> appends one JSON object per line to <directory>/videoout.jsonl: a contract line for the run (commit and pid), a pad line whenever the published pad state changes in its buttons, sticks, L2 or R2, a present line after the first present and every 30 after that with the count and rate the window title shows, and a drops line with the number of lines the writer discarded, reported every ten seconds while it grows and once at a normal exit. A bounded queue of 4096 lines and one writer thread batch the file, so neither the present nor the input path waits for it; a pad change that the full queue refused stays pending for a later publish, and the frame count moves from UpdateTitle's function-static to DisplayWindow so the input path can name the present it belongs to.

Without the variable no file is opened and no thread is started: a present or an input update costs one call that checks a guard variable and returns null.
2026-10-19 15:27:49 +02:00
Dean acbeb8475c Merge pull request #7823 from Chikimaro/feat/libscenet-usleep-inetptonex
feat(libSceNet): implement sceNetUsleep and sceNetInetPtonEx
2026-10-20 02:22:01 +13:00
Alex ColliniandClaude Opus 5.5 185551c59f docs(debt): record the sampled array window and 2D array read limits
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 15:20:58 +02:00
Adrià e01d909086 Merge pull request #6915 from Nixitov/feat/physhm
feat(libkernel): declare physhm_open and physhm_unlink
2026-10-19 15:18:41 +02:00
Savvanis SpyrosandClaude Opus 5.5 c5dbdf1fde fix(agc): name the RELEASE_MEM system counter instead of GDS data
A RELEASE_MEM with DATA_SEL 4 was refused as "GDS RELEASE_MEM data".
amdgpu's GFX10 packet header gives 4 as the 64-bit system counter and 5
as GDS data. Validation now refuses 4 as the system counter, whose
console frequency and epoch are not known, 5 as GDS data and 6 or 7 as
reserved, and the debt file records the system counter.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 16:18:13 +03:00
Josip Parlov acd1e0ef8f feat(libScePad): implement scePadGetAccessibilityControllerState (zBsgF0q8DIM)
The name hashes to zBsgF0q8DIM. Signature and error order follow the
OS 10.01 system module: NOT_INITIALIZED, INVALID_ARG for a NULL output,
INVALID_HANDLE for a bad handle. The emulated pad is not an Access
controller and reports 0.
2026-10-19 15:06:28 +02:00
Josip Parlov d68d797c76 fix(libScePad): return 0 from n3kSX62fgNo after scePadInit, with a pad open or not
The OS 10.01 system module checks only that the library is initialised,
then sends a per-process value to ShellCore over Mbus and returns 0 when
that call succeeds. It does not look at pad handles, so the throw while a
pad is open is gone. 0x809200ff, measured in a process that is not a game,
is the failed Mbus call; a game process is assumed to get 0.
2026-10-19 15:06:08 +02:00
Alexej Szpevák cb9a4c7417 feat(libkernel): support EV_CLEAR on sockets and pipes in kevent on Linux
kevent threw for EV_CLEAR on a socket or the read end of a pipe; Boost.Asio's kqueue reactor, among others, registers every socket that way. On Linux such a knote now watches its host descriptor through an edge watch. It is armed when added, on every later EV_ADD or EV_ENABLE while enabled, and by each host wakeup; when armed it is checked with the level-triggered readiness test and reported with the current data and EV_EOF, or disarmed if no longer ready, as kqueue_scan re-runs the filter; reporting it disarms it until the next edge. Waits block on the watch's epoll descriptor, so a socket that stays readable does not wake them. Windows and macOS still throw. GuestSockets::NativeDescriptor exposes the host socket behind a guest one for the watch.
2026-10-19 15:05:28 +02:00