On Linux and macOS, fcntl and ioctl threw "descriptor N is neither a
file, a directory, a pipe nor a character device" for a host socket that
is not a guest socket. That is what a standard descriptor is when a
service manager connects it to its journal, or when a test runner starts
the process with a socket as stdin; guest_kernel_fcntl's standard input
check aborts then.
A socket is now its own descriptor kind. Its status and close-on-exec
flags go through the host as for a pipe end, FIONREAD asks the host,
record locks and read-ahead hints fail with EBADF as FreeBSD's
kern_fcntl fails them on a descriptor without a vnode, and O_ASYNC
throws as on a pipe.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Implement scePlayerSelectionDialogGetStatus and scePlayerSelectionDialogClose in libScePlayerSelectionDialog, matching the common dialog lifecycle convention across player dialogs, and add unit test coverage in GuestPlayerSelectionDialog.
This branch imports adjacent registered ranges that fill an aligned
power-of-two block as one import, so the copy check's source and
destination, mapped one after the other, became a single 128 KiB
import, and the source's protection change retired the destination
with it. Map them with an unmapped block between them, so each is its
own import and the check still shows that retiring one import leaves an
unrelated one in place.
Each case re-activates the test device's recorder, and the DCB submit re-activates the recorder of the second device it creates, so the cases no longer depend on the order they run in. PlaneFillCase checks that a plane fill before a UAV clear is overwritten by it and a plane fill after it wins.
Register unwind tables on Windows via configure_windows_unwind so that throwing stubs tested in GuestUserService can be caught without unhandled runtime_error aborting the test runner.
The Windows release of imports retired during a settle read belongs after the whole
overlapsImport block in the not-holding-the-lock branch of WaitForLeasesAndImports, as in
the original change, not inside it. It was placed inside while main was merged in.
The depth remap fields moved to request format 33 when this branch was rebased onto
main's format 32. The replay tests that rebuild older streams now drop and append the
remap tail on top of the linked call fallbacks and the spanned waves flag, and the
depth remap test downgrades to format 32.
A compute shader loads every texel of a 256x192 32_UINT, 32_SINT and
16_UINT texture in SW_64KB_Z_X whose memory holds a known pattern and no
depth surface, from untracked memory and from a guest allocation, and
stores what it read. Every texel must keep its stored bits, NaN, infinity
and denormal patterns included; without the 32-bit fix the 32_UINT read
throws.
Every guest-memory read of a pixel shader that can fault ended the
invocation with its own OpTerminateInvocation, or OpKill without the
extension. A main-menu pixel shader of NHL 27 (PPSA34063) has 216 such
exits and Demon's Souls (PPSA01342) up to 112, and AMD's Windows driver
crashes in vkCreateGraphicsPipelines on those modules
(amdvlk64.dll+0x9e251f).
The guest code is now emitted as its own function: a failed read sets a
private flag and returns, and the entry point calls it and terminates
once when the flag is set. A pixel shader without a fault site keeps a
plain entry point, with no exit and no SPV_KHR_terminate_invocation.
Primitive-ordered pixel shaders keep the old form, as their interlock
instructions must stay in the entry point.
Based on poonasor's design in poonasor/AnyPS5@eb2e2309, ported to
current main.
Co-authored-by: poonasor <[email protected]>