main 1e4ec0e3f7 adds depthCopyFormatTests to the graphics tests' run
list right after UnwrittenSampleLocationTests, where this branch adds
sampleLocationGridFallbackTests. Run both, this branch's first.
APS5_PAD_INPUT_FILE commands can set bit 0x200000 or 0x400000 to put a
finger on the left or right half of the touchpad, as the TouchLeft and
TouchRight keys do, so scripted runs can press touchpad combinations.
tools/pad_input.py queues them as touch-left and touch-right.
AI-assisted: yes
On Linux, FIONREAD on a datagram socket reports the next datagram only,
where FreeBSD's sbavail counts every queued byte, so a read mark above 1
there could never fire. kevent now throws for it as before; stream
sockets and marks of 1 are unchanged.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The segment-prefix-at-eof case from #6401 only catches the 1-byte read
past the input when the relinker is built with AddressSanitizer, and no
CI job did that. The new job builds the relinker alone in Debug with
ANYPS5_ENABLE_ASAN and runs the tls_function_coverage tests. It has to
be Debug: at -O3 GCC no longer emits the stray load, so a Release ASan
build passes with the fix reverted.
The bundled PSNCore.prx of PPSA06888 calls sceNpTrophy2GetRewardIcon
with (context, handle, reward_id, buffer, size): once with a null buffer
to read the size, then with a buffer of that size. The function still
throws because the reward icon data is unknown.
Co-Authored-By: Claude Haiku 5.5 <[email protected]>
agc_driver_f16_fma_denormal_modes and
agc_driver_fma_mix_f16_denormal_modes compared NaN results (inf * 0)
bit for bit with the RX 6700 XT's, but the NaN bits of f16 arithmetic
and of v_fma_mix_f32 with f16 sources are left to the driver, so the
tests fail on NVIDIA (0x7fff for 0xfe00). Rows whose expected value is
a NaN now accept any NaN; every other row is still exact.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A draw that only reads through the table now leaves its pass open to
the next draw, so its ordering against guest memory written through a
buffer descriptor rests on the pass hazard tracker's unknown-read rule
alone. Two cases cover it in agc_driver_address_passes: a draw that
reads through the table what the previous draw stored through a buffer
descriptor begins its own pass and sees the store, and a draw storing
through a buffer descriptor after one that read through the table
begins its own pass. Both fail when the tracker drops that rule.
The scan listed stores, memory copies and atomics, and took only typed
OpTypePointer declarations as physical pointer types. A module that
wrote guest memory through an untyped PhysicalStorageBuffer pointer
(SPV_KHR_untyped_pointers), through a GLSL.std.450 Modf or Frexp output
pointer, or with a cooperative matrix store would have been taken for
one that only reads through the BDA table, and its draws would have
continued a render pass they must end. The recompiler emits none of
these today, so no module's answer changes.
Untyped physical pointer types now count as physical pointer types, an
extended instruction with a physical pointer operand counts as a store,
and the cooperative matrix stores store through their pointer operand.
Pointer type declarations no longer add their storage class to the
pointer values.
The tests build modules for every write form the scan knows, the reads
it must not take for writes, and the three forms above.
With MBEDTLS_SELF_TEST, ecp.c counts point additions, doublings and
field multiplications in unsynchronized globals. Handshakes on separate
connections run in parallel, each under its own session lock, so the
counters race; ThreadSanitizer reports it on the parallel transport
test. Nothing calls the self-test functions.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RoU3ZF76A6uR8sCA7NMLch
Brings in main's connection verify options, minimum version, ALPN and
certificate readers. The conflicts in libSceSsl/Export.cpp and the
libSceSsl debt entry take the resolution from blawesom's rebase of this
pull request (blawesom/AnyPS5 rebase/6828 at 925c37aa0): SslConnection
keeps main's verifyOptions, minimumVersion and alpn next to the session,
and the debt entries follow main's structure.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RoU3ZF76A6uR8sCA7NMLch
kevent threw for NOTE_LOWAT. On a socket's EVFILT_READ it now sets the
low-water mark as FreeBSD 11's filt_soread does: the event fires once the
buffered bytes reach it, or at end of file or on a listening socket, and
a later change of the knote replaces it. EVFILT_WRITE takes a mark of 1,
where the host's writability stands in for a free byte; other write marks
and marks below 1 still throw. A pipe ignores the mark, as filt_piperead
does.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Since #5978, StartExit only parks the other guest threads and exit runs
LibcRunShutdown itself, so LoadExec's three exits (the converted
executable on Windows and Linux, and the host executable) now call
LibcStartExit and then LibcRunShutdown, as exit does.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Metal Gear Solid 4 (PPSA18194) aborts on main when its launcher starts
the game: sceSystemServiceLoadExec runs the guest shutdown, a render
thread that then calls into the stopped AGC driver gets ProcessShutdown
back from LibcAwaitExit, and the exception unwinds into title code,
which terminates the process before the new executable starts.
LibcAwaitExit parks a thread only once an exit has been requested, and
LoadExec ran the shutdown without requesting one. It now starts the
shutdown the way exit does, so such threads wait until the process is
replaced.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A latched press is cleared when the pad is initialized and when the title reads through
scePadRead, and is dropped if the title does not read it within 100 ms, so an old press
cannot show up later as a fresh press. A latched L2 or R2 press also carries the analog
value it was published with, so the button bit and the analog value agree.
scePadReadState only returned the latest input, so a tap that began and ended between two reads was never reported. Latch the pressed buttons when input is published and fold them into the next ReadState.
StorageTextureBudget gave the storage image cache a quarter of the VK_EXT_memory_budget
budget of the largest device-local heap (capped at TextureCacheBudget, never below 512 MiB)
whatever else the heap held, while SampledTextureBudget takes what that budget leaves after
the heap's other use. On a 10 GB card the storage cache kept 2024-2170 MiB into a level load
whose depth and render target allocations then failed with VK_ERROR_OUT_OF_DEVICE_MEMORY
with the heap at its reported budget where a run logged it.
The storage image budget is now what the reported budget leaves after the heap's use other
than the cached storage images, the unused part of the sampled textures' 2 GiB floor and an
eighth of the budget; the caps at a quarter of the budget and at TextureCacheBudget and the
512 MiB floor stay. The sampled budget still reserves TextureCacheBudget for the storage
cache, at least the storage cap, and the storage budget reserves the sampled textures alive,
so neither counts bytes the other may take; while the sampled textures alive stay within
their floor the sampled budget falls first, then the storage budget, and above it both fall
together. The budget line also prints when the storage image budget moves by more than a
tenth, with its previous value, and StorageTextureCacheBudget is exported for the execution
test.
Co-Authored-By: Claude Fable 5.1 <[email protected]>
On a Unix stream socketpair the write event's data drops by at least the bytes sent while the peer has not read them, and comes back to the idle value once the peer drains them. Off Linux the test only checks that the value stays positive and never grows.
A socket's EVFILT_WRITE and sceKernelAddWriteEvent reported the whole SO_SNDBUF in data, however much was already queued. FreeBSD 11.4's filt_sowrite reports sbspace, the space still free. On Linux the queued bytes from SIOCOUTQ are now taken off SO_SNDBUF. Windows has no query for the queued bytes and macOS is not wired up, so both keep reporting SO_SNDBUF; the debt entry says so.
The fcntl tests only ever held locks in the guest's own process, where FreeBSD's lf_blocks never reports a conflict, so the host lock path that answers F_GETLK was not exercised. A forked process now holds a read lock, a write lock and a write lock to the end of the file through the host. F_GETLK with F_UNLCK reports only the write locks, F_RDLCK the same and F_WRLCK the read lock, each with the owner's pid and SEEK_SET; F_SETLK over the read lock fails with EAGAIN, and nothing is reported once the owner exits.