Commit Graph
20967 Commits
Author SHA1 Message Date
Dean b5fd705743 Merge pull request #9990 from xdCloudy/feat/libSceAgcVsh-150-pending-exports
feat(libSceAgcVsh): declare 150 PS5 pending exports
2026-10-24 14:21:58 +13:00
Dean 5540852c54 Merge pull request #9241 from veosett/codex/audit-sdk-symbol-names
fix(tools): flag qualified imports exported only under a NID
2026-10-24 14:21:32 +13:00
Dean ada76e9171 Merge pull request #9000 from Queuse/codex/test-kernel-variant-runtime
test(relinker): run kernel variant imports on Windows
2026-10-24 14:21:04 +13:00
Dean 842d625686 Merge pull request #9812 from Pacuka/fix/agc-mem-semaphore-address
fix(libSceAgc): take the semaphore address second in Acb/Dcb MemSemaphore
2026-10-24 14:20:36 +13:00
Himansh Raj 2562590ab0 Merge remote-tracking branch 'origin/main' into split/macos-build 2026-10-24 06:50:19 +05:30
Dean f45a8d2bdc Merge pull request #9274 from zmeizy/claude/f32-hardware-flush-float-mode
fix(shader): take the hardware f32 flush only in shaders that flush f32 denormals
2026-10-24 14:20:09 +13:00
Dean 72641c92f6 Merge pull request #9841 from JJenkx/windows/libc-logf-msun
fix(libc): compute logf with FreeBSD msun's algorithm, as titles' libc.prx does
2026-10-24 14:19:40 +13:00
xXPBSXxandClaude Sonnet 5.5 020df25d8d docs(agc): note the guest buffer region copied whole over 4 GiB
Records the allocation of a whole guest buffer region as one host buffer and the two stops seen for the same shader on two GPUs.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-24 03:16:55 +02:00
xXPBSXxandClaude Opus 5.5 aa856fdb99 docs(debt): shorten the re-read measurement to its counts
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 03:16:11 +02:00
Danigamer05 c7a611466a fix(pngdec): require image info for large dimensions 2026-10-24 03:12:33 +02:00
Dean Galvin f59787b272 Merge main into fix/linear-target-import-creation 2026-10-24 14:02:06 +13:00
thuanquangandClaude c687e7e353 docs(agc): limit the host placement exception to device buffers and images
Co-Authored-By: Claude <[email protected]>
2026-10-24 08:01:24 +07:00
thuanquangandClaude 8472a51793 docs(agc): say that a refused device allocation falls back to host memory before throwing
Co-Authored-By: Claude <[email protected]>
2026-10-24 07:59:55 +07:00
thuanquangandClaude 17c723d8fa docs(libc): correct stale rmdir, nanf and bad_optional_access debt statements
Co-Authored-By: Claude <[email protected]>
2026-10-24 07:59:41 +07:00
Danigamer05 38582fca52 fix(pngdec): honor the 16-bit input attribute 2026-10-24 02:59:36 +02:00
orezraeyandClaude Opus 5.5 68a4482acd test(libc): stop pinning the unknown ISO week rows in guest_strftime
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 21:54:16 -03:00
Himansh Raj e836e519a8 Merge remote-tracking branch 'origin/main' into split/macos-build 2026-10-24 06:20:19 +05:30
Evgeniy Kazarin de24508db4 Merge main into codex/defer-small-host-imports
# Conflicts:
#	core/libs/prx/libSceAgcDriver/tests/BdaResources.cpp
2026-10-24 08:48:32 +08:00
Dean Galvin a7e1630192 test(agc): give the stencil replay pixel info the depth clamp registers
A pixel shader that exports depth now reads DB_RENDER_OVERRIDE and the viewport
depth bounds (PA_SC_VPORT_ZMIN_0 and ZMAX_0) while its stage info is decoded. The
stencil replay test builds its context registers by hand and left them out, so
the decode threw "missing register at DWORD 0x3" for its depth-exporting shader.
The test now sets the override off and the bounds to 0 and 1, which is what the
decode produced before the clamp.
2026-10-24 13:47:48 +13:00
Adrià 11d6efa06c Merge pull request #9305 from tibzejoker/fix/bit-exact-reciprocal
feat(shader): bit-exact RDNA v_rcp_f32 behind APS5_EXACT_RCP
2026-10-24 02:47:43 +02:00
xXPBSXxandClaude Opus 5.5 81e18a469a docs(debt): note that the zero gap before REWIND packets stays unwritten
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 02:47:28 +02:00
Danigamer05 aaa33a3f3e fix(keyboard): preserve raw keys and ignore the Kana LED 2026-10-24 02:46:30 +02:00
Adrià FranchandClaude Sonnet 5.5 bdbf14f712 test(agc): expect a non-overlapping DMA_DATA copy to stay on the draw pipeline
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-24 02:35:37 +02:00
Ethan Barr ce6865fc0d perf(agc): pipeline queue-0 DMA_DATA by default
Queue-0 DMA_DATA packets drained the draw pipeline unless APS5_PIPELINE_DMA was set, so the packet worker waited on the committer at every small immediate store. Kena PPSA01746 issues 17-23k DMA_DATA packets per 10 s and 11329 of its 20134 pipeline drains per 10 s are opcode 0x50. enqueueDmaPacket now queues DMA_DATA stores and fills unconditionally, and keepsDrawPipeline keeps the pipeline for a copy or fill whose source and destination miss every queued write. The APS5_PIPELINE_DMA switch and its documentation are removed and the tests run the default path.
2026-10-24 02:35:37 +02:00
Himansh Raj 1f94bd06fb Merge remote-tracking branch 'origin/main' into split/macos-build 2026-10-24 06:00:18 +05:30
Dom3005andClaude Opus 5.5 69cdebdbb5 test(libkernel): remove a stale fcntl probe file before the flags test
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 02:28:14 +02:00
Dom3005andClaude Opus 5.5 dd6220698a fix(libkernel): change O_APPEND on a Windows file through fcntl
fcntl(F_SETFL) threw when it changed O_APPEND on a Windows file. The
guest flag already chooses WriteAtEnd, but a descriptor opened with
O_APPEND also carries the CRT's append flag, so _write kept appending
after the guest cleared it. F_SETFL now replaces the CRT descriptor of
every descriptor sharing the open file's status with a duplicate handle
opened with or without _O_APPEND, as libc fdopen does for append mode.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 02:28:14 +02:00
Dean e2b9700a98 Merge pull request #7880 from klosixgaming-arch/fix/shader-indirect-column-phi-pointer
fix(shader): resolve table column pointers through Phi nodes
2026-10-24 13:22:58 +13:00
milescovielloandClaude Opus 5.5 d7d9747e7d fix(shader): key the device's capabilities and extensions by a digest
Every recompile cache key appended the target's capability list and
each SPIR-V extension name one byte per 64-bit word, so on a device that
enables a few dozen extensions most of every key was the same device
description: built and compared on every dispatch and draw, and kept in
every in-memory key and disk cache entry. The two lists now enter the key
as a 128-bit digest over the capabilities and the length and bytes of
each extension name, eight bytes per step.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 00:20:45 +00:00
Himansh Raj 31d44c5055 Merge remote-tracking branch 'origin/main' into split/macos-build 2026-10-24 05:50:17 +05:30
Dean 3b23d18360 Merge pull request #10436 from oneandonlydean/docs/game-bring-up-links
docs: point game status links to the Game bring-up discussions
2026-10-24 13:18:53 +13:00
JJenkx c55a834355 fix(libc): select powf NaN payloads explicitly 2026-10-23 20:17:22 -04:00
JJenkxandClaude Opus 5.5 4fe55c1fbc test(libc): cover powf NaN pairs and pin the msun 9.0.0 revision
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 20:17:22 -04:00
JJenkxandClaude Opus 5.5 a29bf781c8 fix(libc): compute powf like the libc.prx that titles ship
powf returned the host pow, except for base 1, so its last bit and errno
depended on the host: on Windows the bits differ from titles' libc.prx on
3,171,678 of 100,001,089 sampled argument pairs. That libc.prx is the
older form of FreeBSD msun's e_powf.c: a NaN argument returns x + y, so
powf(1, NaN) is NaN rather than 1, and (+-1)**+-inf is NaN. It sets EDOM
for a negative base with a non-integer exponent and ERANGE only in its
final overflow and underflow returns.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 20:17:22 -04:00
JJenkxandClaude Opus 5.5 8b83c68aad fix(libc): compute exp2f with FreeBSD msun's algorithm, as titles' libc.prx does
exp2f returned the host exp2, so its last bit and errno depended on the
host: on Windows the bits differ from the libc.prx that titles ship on
213,306,266 of the 2^32 floats. That libc.prx is msun's s_exp2f.c, setting
ERANGE only in its overflow and underflow branches. The port gives the same
bits and errno as PPSA07923's, PPSA05916's and PPSA13934's copies for every
argument.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 20:16:32 -04:00
Dean Galvin 82b151597a docs: point game status links to the Game bring-up discussions
The README, the Game bring-up discussion form and the converter page now link to the Game bring-up discussions for per-game status and test reports.
2026-10-24 13:15:57 +13:00
dantdmdarealguy 80bcb4bd24 docs(environment): correct the crash indirect memory, log timestamp, language and label flush rows 2026-10-23 19:14:56 -05:00
dantdmdarealguy 0c5e45e9f3 docs: describe the converted module output the relinker prints
The relinker stopped printing a 'Guest module:' line for each converted
module in 56c2a5318; it reports 'Converted modules: N' and lists the
.guest.prx files under app0/ in its runtime layout tree. GAME_TESTING.md
and USAGE.md still told readers to use the files printed as 'Guest module:'.
2026-10-23 19:14:55 -05:00
SuarezPM 9c3ffcf5b0 feat(shader): support 64-bit image atomics through keyed image tables
Table T#s keyed at runtime feeding image_atomic64_* now lower to
OpAtomic* on the table Atomic64View instead of faulting, mirroring
the 32-bit path: gate, dedup identity, binding flags and view
selection. Packed formats and BY element counts still fault; hosts
need VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT for the view format.
2026-10-23 21:14:39 -03:00
Adrià FranchandClaude Sonnet 5.5 a27ab262d4 test(agc): build the Windows-only frame capture tests on Windows only
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-24 02:09:44 +02:00
Adrià FranchandClaude Sonnet 5.5 b7ac6a4903 test(agc): register the frame capture tests that need guest memory capture on Windows only
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-24 02:09:44 +02:00
Adrià FranchandClaude Sonnet 5.5 58a8195422 fix(agc): pass PAGE_READWRITE to the guest arena on every platform
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-24 02:09:44 +02:00
SamandClaude Opus 5.5 a70e108a03 fix(agc): capture memory committed during the frames and count flips per thread
The recorder took its ranges once, at the snapshot, so a title that
committed memory during the captured frames replayed submissions from
memory the capture never had. Each memory delta now adds the allocations
the registry gained since the last one as new ranges with their nonzero
64 KiB blocks, and the header counts them as late_ranges.

A submission ended a captured frame when the driver's flip count changed
while it was being submitted, and the count was global, so a submission
that overlapped another thread's flipping one ended the frame as well.
The count is now kept per thread.

agc_driver_frame_replay copies its second frame from a block committed
during the capture, and agc_driver_frame_capture_eop checks that a flip
submitted on another thread leaves this thread's count unchanged; both
fail without the fix.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 02:09:44 +02:00
SamandClaude Opus 5.5 268525d612 fix(agc): keep replayed memory, tokens and outputs faithful to the capture
- Order memory deltas and video output registration before the next
  recorded call, and serialize the deadlock breaker with delta application
- Capture the blocks holding shader code with each shader delta
- Reserve explicit and automatic EOP flip tokens under one lock
- Record video output unregistration so replay can close and reopen a handle
- Clear already mapped ranges before restoring the snapshot so elided zero
  blocks replay as zero

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 02:09:44 +02:00
SamandClaude Opus 5.5 dbe034fdf8 fix(agc): end a captured frame once per EOP flip
An EOP flip reservation also ended a frame, and so did the submission
whose EOP release carries the reserved token, so a title flipping with
EOP releases counted each displayed frame twice: a capture of N frames
stopped after about N/2 and could start between the reservation and
the submission that flips. The reservation is now only recorded; a
frame ends at a CPU flip or at a submission that flips.

agc_driver_frame_capture_eop reserves and submits six EOP flips with
APS5_FRAME_CAPTURE_FRAMES=3 and checks that the capture starts after
the first flipping submission and holds three frames of one reservation
and one submission each.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 02:09:44 +02:00
SamandClaude Opus 5.5 95d2a76583 feat(agc): capture frames at the driver boundary and replay them offline
APS5_FRAME_CAPTURE=<dir> makes the AGC driver record a few frames of a
title: the shader registrations and ABI resolutions, video output and
EOP flip reservations it made since it started, a snapshot of every
readable guest allocation (the title image included) taken at a frame
boundary once the driver is idle, and for the next frames each
submission, flip and suspend point with the thread that made it, its
serial progress and the guest pages the write tracker saw the CPU write
before it. At the end it stores the presented display buffers as
reference images. APS5_FRAME_CAPTURE_AT_FLIP, _TRIGGER and _FRAMES pick
the frames.

agc_frame_replay maps the captured memory at its addresses and replays
the calls of each captured thread on a thread of its own, in captured
order, through the current build of the driver with no title running.
It paces GPU work to the in-flight depth the title had, releases GPU
waits that the title's CPU threads released without calling the driver
(AgcDriverAwaitedWaits), and reports frame times, released waits and
how closely the replayed display buffers match the references.

Tests: agc_frame_capture (file format) and agc_driver_frame_replay
(two captured frames of CPU writes and DMA copies replayed and
compared). Docs: BUILD.md, ENVIRONMENT.md and the libSceAgcDriver debt
file.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 02:09:44 +02:00
JAB-devandClaude Sonnet 5.5 db06672a36 Merge branch 'main' of https://github.com/boykopovar/AnyPS5 into fix/ngs2-pan-ps5
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-24 02:08:01 +02:00
orezraeyandClaude Opus 5.5 974e0a89f2 fix(libc): follow the console's week rule and write composites part by part
%U and %W take the weekday as (tm_wday + 7) % 7 and (tm_wday + 6) % 7
with the C remainder, which fits the PS5 rows of libSceLibcInternal.sprx
and of the libc.prx titles ship. A composite conversion is written part
by part, each part all or nothing. %G, %g and %V throw for a tm_yday
past the year and a tm_wday below -6, where no rule fits the console.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 21:06:30 -03:00
JAB-devandClaude Sonnet 5.5 b307813438 test(libSceNgs2): pin the PS5 pan codes, NaN LFE level and radian wrap throw
The tests now check the SDK values of the pan error constants, that 0 params leaves the output untouched, that a NaN param angle keeps its LFE level with 7 speakers, and that a param one float below the first speaker in radians throws. The throw messages and the debt entry say the PS5 module did not return within 60 s for those inputs instead of claiming it never returns.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-24 02:06:01 +02:00
Himansh Raj d468863885 Merge remote-tracking branch 'origin/main' into split/macos-build 2026-10-24 05:30:38 +05:30