guest_kill requires killpg(1000, ...) to fail with ESRCH, but getpid
returns the host process id. When Windows gives the test process id
1000, group 1000 is the caller's own, killpg succeeds as the test itself
requires for killpg(self, 0), and Require aborts with 0xc0000409. Use
self + 1000, which is never the caller's group.
Devices with DenormFlushToZero for f32 run the mixed denormal-flush programs with and
without the hardware mode at startup; when every result matches, add, sub, mul, fma,
floor and ceil in the default rounding mode drop their software flush.
A per-sample shader under a non-uniform quad sample mask keeps only the invocations whose guest sample the mask names, since gl_SampleMaskIn is reordered before it gates them. The depth export is reordered back, so a depth probe at the mask's host samples runs exactly the guests the mask kept.
The pixel input collector requests FragCoord for a position input, dithered alpha to coverage, a quad mask, varying sample locations or ReordersSamples. The last term is the only one that applies to a shader carrying just an order word, so a pass with an ancillary input and a reordered order must read FragCoord while the same pass with a kept order must not.
An iterated PERSP_SAMPLE on a reordered order that varies across the 2x2 grid indexes locations[quad * 8 + guest]. The check parses the recompiled module and follows each InterpolateAtOffset's offset operand back through its OpLoad to the table's OpAccessChain index, which must be the order word's nibble at the shader's SampleId (GuestSampleIndex, not the host index) or'd with the FragCoord-derived quad term, and the selected order words must be the ones the pass carried.
agc_driver_storage_file_write expects the unrelated surface's image to
stay pending through all twelve cases, and the source image to stay
pending until the write flushes it. Queue 0 stores every pending image
once the queues stay quiet for 50 ms (IdleResultsQuietPeriod), so any
pause of that length on a loaded host flushes them and the test fails
with "an unrelated pending GPU image was flushed".
Each case now takes the GPU mutex, which StoreIdleResults also takes,
right after its producer, and produces again an image the idle store
reached before the hold. The unrelated check moves inside the case,
under the same hold.
WindowsLoadImage backed each PT_LOAD up to its memory size, so the
zero-filled tail of a segment was allocated and copied into its section
before the writer dropped it again: 64 MiB of zero-filled memory cost
131 MiB and 0.2 s for --windows and --macos. Only the file-backed pages are
stored now; a pointer written into zero-filled memory backs just the pages
it touches, and the section keeps the rest as virtual size. A relocation
into the end of a zero-filled area no longer pulls the whole area into the
executable file.
In a payload process on a PS5 (firmware 12.70), jrand48 and mrand48
return the high 32 bits of the new 48-bit state zero-extended to the
64-bit long, as FreeBSD 11.0 does, so a result with bit 31 set comes
back between 0x80000000 and 0xFFFFFFFF. Here they sign-extended it, as
FreeBSD 11.1 and later do with an (int32_t) cast. lrand48 and nrand48
already matched the payload process. The tests now pin its results for
three seeds and the first six mrand48 values after srand48(1), compare
with the host as 32-bit values, and the debt entry records the
measurement.
AI-assisted: yes
Co-Authored-By: Claude Opus 5.5 <[email protected]>
sceNetCtlRegisterCallback and sceNetCtlUnregisterCallback share the
callback table logic with the V6 pair, which guest_sce_net checks, but
the plain pair is not called by any test. The new block mirrors the V6
one (null function, null output, eight slots, the ninth refused, invalid
ids, slot reuse) with the guest-ABI IgnoreNetCtlEvent callback, and checks
that the two tables are separate.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
main took FormatVersion 40 with #6486, so this branch moves to 41. The grid-reference test's skip now reads as a device that does not keep depth at custom sample locations, the wording tools/check_skips.py accepts as a device limitation. The sample-location debt entry describes the 2x checkerboard without naming titles.
#4650 took request serialization version 35 for its depth remap flag, so this branch's sample order moves to 36. The serialization tests drop #4650's trailing byte from every older version they build, as main's do, along with the iteration fields and the sample order.
8237 and 8238 are taken by MeshLayerBase and MeshLayerCount in #6959 and 8240 by DepthRemapBase in another open PR, so buildSpecializedModule would read a mesh module's IDs as workgroup offsets once both land.
A dispatch over maxComputeWorkGroupCount was split into vkCmdDispatchBase
chunks whose base reached the limit, which VUID-vkCmdDispatchBase-baseGroupX-00421
forbids, and NVIDIA refused the split outright.
Compute modules now declare WorkgroupOffset specialization constants (default 0)
that the recompiler adds to WorkgroupId and GlobalInvocationId and keeps
unmaterialized. Each chunk is recorded with vkCmdDispatch from group 0, bound to
a pipeline variant specialized with the chunk's base. The NVIDIA throw is gone;
device-memory LDS splits still throw.
Fixes#7375