The 1-, 2- and 8-byte loads, stores, exchanges, compare-exchanges and fetch
operations, _Atomic_is_lock_free_N, the flag and fence functions and the
lock-based generic _Atomic_copy, _Atomic_exchange and _Atomic_compare_exchange_*,
matching the libc.prx bundled with PPSA08427 including its handling of
invalid memory orders.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Q8tinbP1MUpUaDsbNWnGnu
Remove title IDs from the touched technical-debt entries and state that the null third type-mismatch handler argument is unverified on console.
Co-Authored-By: Codex <[email protected]>
Charge read-only GPU-copy input snapshots and depth-copy linear scratch for their requested bytes while the batch retains them. Exercise both production paths with CPU Vulkan mocks, including the budget boundary and fence-governed resource retention.
Co-Authored-By: Codex <[email protected]>
Resolves the shader debt file bullet by bullet: main's EmitSetAttribute entry, and this branch's PERSP_SAMPLE/LINEAR_SAMPLE and pixel-position entries.
fopen resolved the random device paths to a host file that does not
exist and failed with ENOENT, while open and sceKernelOpen already serve
them from host entropy. A read-only fopen of either path now returns a
stream whose fread fills the buffer with host entropy. setvbuf, feof,
ferror, clearerr, the stream locks and fclose work on it, fflush returns
0 as on a FreeBSD stream that is not writing, other stream functions
throw, and opening the paths for writing throws as in libkernel.
ProsperoTV (PPSA99003) reads its phone pairing code this way and showed
"Code expired or unavailable".
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Queue 0 skips partial and cache flush EVENT_WRITE packets and ACQUIRE_MEM, and nothing ends the
open render pass on them, so the pass hazard tracker is all that orders two draws inside one
pass. A write-only store, a flush and a second write-only store to the same bytes stayed in one
pass with no barrier between them, although the flush orders them on the guest GPU.
At such a packet, the write-only ranges of the open pass now count as written, so a later
write-only store to them is a WriteAfterWrite and begins a new pass. The seal is queued behind
the draws in the draw pipeline (or made at once when it is idle), once per run of flushes after
a draw.
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
A guest buffer the recompiler classifies as only stored to (bufferWritten, not bufferRead, not
bufferAtomic), which no other allocation of the draw overlaps, is a write-only range of the draw.
It conflicts with every read and every other write of the open render pass, but not with the
write-only stores of other draws to the same range: the guest GPU leaves stores of different draws
unordered as well, since no barrier separates them. Before, such a buffer counted as both read
and written, so consecutive draws storing to it each began a new pass with two full barriers.
APS5_NO_WRITE_ONLY_PASSES=1 restores that.
Unreal Engine 4 stores virtual texture feedback from every base pass material that samples a
virtual texture into one buffer per frame: in Stray (PPSA02100) about 90 % of the pass restarts.
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>