Commit Graph
14017 Commits
Author SHA1 Message Date
Dean 532f3e7b89 Merge pull request #6216 from eljackjoestar-cmd/fix/audioout2-completed-grain-backlog
fix(audio): retain completed AudioOut2 grains until pushed
2026-10-18 02:06:50 +13:00
Maz dd70ca83fe test(libkernel): read absolute links into a buffer that fits 2026-10-17 17:06:37 +04:00
Dean f7d51cb885 Merge pull request #6474 from fdfawef324/claude/audioout2-grain-backlog
fix(libSceAudioOut): count completed AudioOut2 grains in the queue level
2026-10-18 02:05:38 +13:00
Dean 8f8bd8cd09 Merge pull request #6348 from JJenkx/fix/ngs2-ps5-handle-errors
fix(ngs2): use PS5 system and rack handle errors
2026-10-18 02:04:35 +13:00
Ori ShamirandClaude Opus 5.5 bd2197e919 fix(agc): wake an idle queue 0 for completions the draw pipeline adds
With pipelined draws, queue 0 hands the end-of-pipe labels of a
submission to the draw pipeline and can enter its idle wait before the
pipeline commits them. When such a label raises an end-of-pipe
interrupt behind recorded work, the pipeline attaches the delivery to
the batch as a completion and submits it, but queue 0 only reaps when
it saw completions pending before it went to sleep, and nothing woke
it. The batch was then reaped, and the interrupt delivered, only when
the next submission arrived, so a title that waits for that interrupt
before submitting more work stopped.

Queue 0's idle wait now also ends when completions are pending, and
the pipeline's end of a submission (and the REWIND path's open-work
submit) wakes it when they are.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-17 16:04:23 +03:00
Dean d3a926e95f Merge pull request #7094 from Aryansh1520/feat/libSceNpTrophy2-reward-icon
feat(libSceNpTrophy2): declare sceNpTrophy2GetRewardIcon's arguments
2026-10-18 02:04:03 +13:00
Dean 32f28a462f Merge pull request #7093 from thuanquang/test/f16-fma-nan-bits-any-driver
test(agc): accept any NaN where the f16 fma and fma_mix tests expect one
2026-10-18 02:03:22 +13:00
Dean 20f15fd2fc Merge pull request #7103 from pushkarreddyy/feat/libSceVideoOut-color-space-exports
feat(libSceVideoOut): implement color space conversion and blend space exports
2026-10-18 02:02:10 +13:00
pushkarreddyy a295b771eb fix(libkernel): return EFAULT from sceKernelWriteThrottlingStatus for a null status 2026-10-17 18:31:54 +05:30
Dean c4f314d3ac Merge pull request #7104 from Amoenus/codex/test-pooled-buffer-gpu-main184
test(agc): honor GPU selection in pooled buffer checks
2026-10-18 02:01:32 +13:00
Dean c0b37ca726 Merge pull request #7028 from milescoviello/fix/pthread-attr-sched-enotsup
fix(libkernel): return ENOTSUP from pthread_attr_setschedparam and setschedpolicy like libthr
2026-10-18 02:00:22 +13:00
Dean 339e7d5ab7 Merge pull request #7107 from emirplus/fix/check-skips-indented-reasons
fix(tools): recognize indented skip reasons in check_skips list
2026-10-18 01:59:40 +13:00
Dean 097600f2e2 Merge pull request #7106 from emirplus/fix/select-tests-trailing-separator
fix(tools): handle trailing separators in select_tests root paths
2026-10-18 01:58:52 +13:00
Dean 05b235498a Merge pull request #7099 from Lorkydey/feat/libc-safe-error-messages
feat(libc): implement bounded error message APIs
2026-10-18 01:58:23 +13:00
thibautandClaude Opus 5.5 a03ccc6be1 fix(shader): write cache files of 2 GiB and more in chunks
On Windows (MinGW libstdc++) one std::ofstream::write of 2 GiB or more
never returns: the whole temporary file is written but WriteFileAtomically
hangs, the entry is never replaced and the temporary file stays behind.
A Vulkan pipeline cache of 2.1 GB hung every save and left a 2 GB .tmp
per run. Write in chunks of at most 1 GiB.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01XBXM4pgkMHYEtqN1EQni2P
2026-10-17 14:48:47 +02:00
Pouare514 778153c29e fix(import-audit): walk host-to-host .prx dependencies of built libs 2026-10-17 14:47:42 +02:00
Maz 6e331b3823 test(libkernel): compare absolute links by the file they name 2026-10-17 16:46:55 +04:00
JosepBove 3e1b7be111 fix(agc): clear the host depth image on a fill of a depth or stencil plane
A fill that covers a depth surface's whole stencil plane with four equal
bytes, or its whole depth plane with a value in 0.0-1.0, now reaches the
host image through the pending fast clear the next time the surface is
bound, sampled or stored to. An HTILE fill or HTILE clear kernel noted
afterwards replaces the value with DB_DEPTH_CLEAR/DB_STENCIL_CLEAR.
NoteDepthMetadataFill only reacted to fills of DB_HTILE_DATA_BASE, so the
Cohtml UI of Heretic + Hexen (PPSA26525) and DOOM + DOOM II (PPSA21444),
which resets its stencil plane to 1 with a 0x01010101 fill every frame and
then draws with stencil Equal 1 and 2, kept the stencil of earlier frames
and showed black squares and clipped text. agc_driver_depth_plane_fill
pins the rules.
2026-10-17 14:46:27 +02:00
pushkarreddyy a276d2f718 feat(libs): declare missing RUDP and signaling imports for PPSA31327 2026-10-17 18:14:12 +05:30
Alexius0815andClaude Opus 5.5 2b9c131e0c fix(shader): forward gl_ClipDistance through the generated rect-list stages
Since #3878 every vertex program that exports a position also writes
gl_ClipDistance for the all-zero position distance. The tessellation
stages generated for rect lists declared only gl_Position in gl_in, so
their input interface no longer matched the vertex outputs; on MoltenVK
the control stage then reads all-zero positions and every rect-list
draw stops with "rect-list requires finite nondegenerate axis-aligned
positions" (reported in #1).

The control and evaluation stages now declare the vertex program's
gl_ClipDistance array in their per-vertex blocks and forward it. The
generated fourth corner gets the clip distances interpolated with the
same weights as its position, so the all-zero position clip keeps
working for rect lists. Validation accepts gl_ClipDistance as a
tessellation input and as a tessellation-control output.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01QXdkh9PHBCPqGcGQPeikAe
2026-10-17 14:36:51 +02:00
thuanquangandClaude Opus 5.5 ff9bf22281 fix(libkernel): end guest thread, fiber and context frame chains at a zero record
Unreal Engine walks the frame-pointer chain until it reads a return
address of 0 and never checks the frame pointer itself. Guest threads
started with whatever rbp the host code held, so the walk ran into host
start-up frames (glibc's saved rbp 0x21 in a LEGO Batman core dump,
address 8 in Returnal on Windows) and faulted. Fibers ended their chain
with a null frame, and makecontext started its function with rbp 0, so
the same walker read address 8 there too.

Guest threads now start through a thunk that points rbp at a
{saved rbp 0, return address 0} record, as the relinker's entry stub
does for the main thread; the fiber trampolines push the same record,
and the makecontext start function is built with frame pointers so its
frame, over the zero return address makecontext stores, ends the chain.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-17 19:27:53 +07:00
Romans Pokrovskis e040cb7f75 fix(agc): retain the unchanged DCC generation proof 2026-10-17 15:22:26 +03:00
screamm e8627d607b feat(libSceContentDelete): add sceContentDeleteById and sceContentDeleteByPath
Cult of the Lamb (PPSA06465, #2686) stops at start-up on the first one:

    FAIL: unresolved ELF import pXJh3aVk8Ks from libSceContentDelete.prx

Both exports have been on main without an implementation (#2740); the
call itself has not been observed yet.

Orbital (cc408367, tools/ida/db_types.json:541-542) and SharpProspero
(5dfdb4b0, Interop/Content/ContentDelete.cs:25-42) agree on the
signatures: a 64-bit SceContentSearchContentId and a UTF-8 path. The
content library is empty on the host, since libSceContentExport exports
nothing into it, so no id or path can be found. SharpProspero gives only
NoPermission (0x809D5006) and no public source gives the not-found code,
so both calls throw with the id or path named once the null path and the
initialization are checked, like the "not in the host content library"
throws of #3724. sceContentDeleteById moves from
guest_content_unimplemented to the new guest_content_delete test.

NIDs pXJh3aVk8Ks and qC3QW+AltHs match tools/nid_names.py and the shadPS4
aerolib list.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
(cherry picked from commit 928184824a4acdf36a58287034bff8154c861835)
2026-10-17 14:20:14 +02:00
Yossi Yadgar b1fa1b94f1 docs(debt): note how 16-bit interpolation reads its parameters without the extension 2026-10-17 15:18:41 +03:00
Yossi Yadgar 5697cea471 test(agc): draw 16-bit interpolation through the emulated barycentrics
On a device without VK_KHR_fragment_shader_barycentric the draw now
builds the emulation's geometry stage and checks the same results in
wave64 and wave32 as on a device with the extension. It skips only on a
device with neither the extension nor geometry shaders, or without the
Float64 capability the exact sums need.
2026-10-17 15:18:41 +03:00
Yossi Yadgar f397af4ca6 test(agc): check that 16-bit interpolation takes the barycentric emulation
Without barycentrics the test shader now recompiles with the emulation
active instead of throwing, and with them it does not take it. The
offline target declares Float64, which the exact interpolation sums use.
2026-10-17 15:18:41 +03:00
Yossi Yadgar d951775d15 fix(shader): take 16-bit interpolation to the barycentric emulation without the extension
v_interp_p1ll_f16, v_interp_p1lv_f16 and v_interp_p2_f16 read each
vertex's parameter and threw on a device without
VK_KHR_fragment_shader_barycentric. Without the extension the pixel
shader is translated once for fixed-function interpolation and, when
that cannot express it, again with the barycentric emulation, whose
generated geometry stage passes each vertex's parameter as a flat input.
The throw came in the first pass, before the second could run. Without
it the 16-bit parameters keep the shader off fixed-function
interpolation, so it takes the emulation and reads the halves bit for
bit, as v_interp_mov_f32 already does.
2026-10-17 15:18:40 +03:00
Ondra97 785c107979 test(agc): separate binding and cache pressure regressions 2026-10-17 14:10:09 +02:00
Ondra97 432fe5cf94 fix(agc): discard device buffers after memory binding fails 2026-10-17 14:10:09 +02:00
SamandClaude Opus 5.5 86b05a0dc6 fix(agc): keep cached pipelines across lazy buffer pool creation
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-17 13:08:13 +01:00
SamandClaude Opus 5.5 724b16624f fix(agc): restrict lazy sampled view usage
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-17 13:08:11 +01:00
milescovielloandClaude Opus 5.5 e88b7de3c1 fix(libkernel): measure the host stack reserve from the frame address
MeasureStackReserve took the distance from the stack top to a local
variable. In an ANYPS5_ENABLE_ASAN build that local lives on
AddressSanitizer's fake stack (detect_stack_use_after_return is on by
default on Linux), away from the thread's stack, so the reserve could
come out negative. scePthreadCreate then asked the guest arena for a
stack of nearly 2^64 bytes and threw 'guest address space arena
exhausted'. The frame address is on the real stack in every build.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-17 12:06:42 +00:00
Ondra97 5001f87bc9 fix(agc): return slab slots without allocating host memory 2026-10-17 14:05:58 +02:00
Romans Pokrovskis 6eebcc2ce1 fix(agc): exclude neighboring stores from DCC invalidation 2026-10-17 15:05:34 +03:00
Romans Pokrovskis 975c3ee6b3 test(agc): distinguish stores beside resident DCC metadata 2026-10-17 15:04:14 +03:00
Pouare514 82dff58494 fix(libkernel): scope flexible release to tracked ranges with release-then-record 2026-10-17 14:03:19 +02:00
Maz 6ad392dad3 fix(libkernel): report absolute Windows symbolic links
lstat and readlink aborted on an absolute symbolic link because only a relative reparse point was accepted. Read the link text, and still refuse reparse points that are not symbolic links.
2026-10-17 16:03:12 +04:00
Dean c9e6c45de9 Merge pull request #7016 from Amoenus/codex/fix-native-vertex-after6590-main661
fix(agc): refuse native MSAA vertex buffer reads
2026-10-18 00:57:37 +13:00
Dean aa959e355e Merge pull request #7056 from danielcadev/fix/small-device-buffer-retention
fix(agc): keep small device buffers in the small pool tier
2026-10-18 00:57:04 +13:00
AlxcBTW 350b8d2b88 fix(agc): keep the template of another address when a dispatch move is refused
Read-only addresses are not part of the dispatch key, so the fresh build after a refused
move replaced the template that serves the other address, and the two addresses
rebuilt each other. A refused dispatch now uses or builds an entry under the exact key
(read-only bases included) and leaves the movable template alone. The [dispmove] line
counts the rebuilds after a refusal, the builds inserted beside the template and the
dispatches served by an exact entry. Restores the MarkGpuWrites comment.
2026-10-17 13:52:16 +02:00
pushkarreddyy 4bc8e2c683 feat(libSceVideoOut): implement color space conversion and blend space exports 2026-10-17 17:14:24 +05:30
Yunus Shaikh 7246963c96 Merge main into fix/agc-sample-location-grid-exact 2026-10-17 04:42:58 -07:00
Yunus Shaikh 4796eac2df test(agc): check that a read through the BDA table sees a target as with its pass broken
Continuing a pass across a draw that only reads through the table is
right only if no pass end records a target write-back that the read
depends on. agc_driver_address_passes --targets renders a color whose
bytes spell 1.0f into the target, then reads the target's first dword
through the table into the same target, once with a tiled target and
once with a linear one.

The tiled read continues the rendering draw's pass and reads the bytes
from before it: tiled results reach guest memory only by explicit
write-backs, none of which falls between the two draws. The linear read
reads the rendered color: a linear target over a host import is stored
back right after its draw (the store ends the pass), and one without an
import is drawn synchronously. agc_driver_address_passes_targets_split
runs the same cases with APS5_NO_ADDRESS_READ_PASSES=1 and must read the
same bytes; a scratch build that writes the targets back whenever a
draw reading through the table breaks the pass fails it.
2026-10-17 11:42:18 +00:00
Ondra97 85bc66e5c4 test(agc): separate command batch probes from slab return fixtures 2026-10-17 13:41:42 +02:00
Ondra97 4076fcebb9 fix(agc): retain submitted batches when profiling fails 2026-10-17 13:41:42 +02:00
XairRrR 032ee506b2 fix(agc): keep the mesh index descriptor on relocated draw stages
relocateDrawEntry copied a cached variant field by field and left out
meshIndexDescriptor, which the variant gained in #5791 before #4943 merged.
lookupDraw compares a mesh stage's descriptor with the draw's index buffer
words before validating anything else, and no draw has an all-zero one, so
every relocated mesh-path stage was refused as a differing front stage. With
no hits the shader set's relocation trial stopped admitting new aliases too.

The copy now takes the donor's descriptor, so a relocated mesh stage matches
the same index buffer the donor was built for and misses on any other.

agc_driver_mesh_draw_relocation draws a mesh-path triangle whose vertex
buffer descriptor is loaded through a user-data pointer, at eight addresses
with the same contents: the last four now hit the cached draw (before: four
differing front stages, no hit).

AI-assisted: yes
2026-10-17 13:36:47 +02:00
Romans Pokrovskis 3f1dcad6dd test(agc): honor the GPU selector in pooled buffer checks 2026-10-17 14:35:57 +03:00
Dean e09dbc2b42 Merge pull request #6580 from DavidSamir/fix/libc-cnd-timedwait-macos-clock
fix(libc): keep the _Cnd_timedwait deadline in the host clock's unit
2026-10-18 00:34:17 +13:00
Dean bdcd8a67d2 Merge pull request #6173 from PYTHONRETARDE/fix/kqueue-test-deny-sid
test(libkernel): deny the kqueue parent listing to the token user's SID
2026-10-18 00:33:09 +13:00
Yunus Shaikh b2ee0dea7f Merge branch 'fix/agc-sample-location-grid-fallback' into fix/agc-sample-location-grid-exact
The fallback branch's merge of main 1e4ec0e3f7 adds depthCopyFormatTests
to the graphics tests' run list where this branch adds sampleOrderTests.
Run both, this branch's first.
2026-10-17 04:33:00 -07:00