#6503 took request serialization 36 for its float32 flush flag, so this branch's sample order moves to 37. The version relabels in ShaderMemory.cpp and RequestSerializerTests.cpp drop both trailing flags and the sample order.
Fresh outputs whose names differ only in case, or that the volume treats as the same name otherwise, were not detected outside Windows. On default macOS APFS, for example, Ä/ä, Ω/ω, Ж/ж and canonically equivalent NFC/NFD names refer to the same file, so one output silently overwrote another.
Outside Windows, create the first name in an identity directory next to the outputs and check whether the second name resolves to it. This lets the filesystem decide instead of folding text, so case-sensitive volumes still report distinct names.
drem, dremf, remainderl and remquol now set EDOM themselves for an
infinite x or a zero y, as fmodl does. Apple's libm never sets errno and
MinGW skips it for long double, so the host could not be relied on.
Guest long is 64 bits, but the host long is 32 bits on Windows. The
lrint, lround and scalbln exports now take and return std::int64_t,
round through llrint and llround, and clamp scalbln exponents to the int
range, where the result is already infinite or zero. The test uses
INT64_MAX instead of LONG_MAX and covers remainderl, dremf and a 2^40
lrint result.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A DMA_DATA whose destination is nowhere writes no memory, so the draws ahead of it have nothing to order against. RADV issues one per draw, and each drained the pipeline and idled the queue worker until the committer caught up.
Co-Authored-By: Claude Fable 5.1 <[email protected]>
The checked release tested that the range was allocated, released the pool lock and then
unmapped a snapshot of its views. Two concurrent checked releases of one range both passed the
test and took the same snapshot; the second then unmapped views the first had already removed
and terminated on "unmap address is not registered" instead of returning ENOENT.
A release now claims its pages in the pool under the pool lock before it looks at the views,
and frees them, dropping the claim, after the unmap. A checked release of pages another release
has claimed returns ENOENT as if they were already free; a plain release waits for that release
to finish. The pages stay allocated while claimed, so they still cannot be reallocated during
the unmap's lease wait.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Primitive type 19 (DI_PT_QUADLIST, 0x13) is used by Unity and other engines for UI quads, sprites and font glyphs. Because Vulkan lacks native quad-list primitive topology, quad draws are expanded on the CPU into indexed triangle lists with 6 indices per 4-vertex quad, respecting the first/last provoking vertex configuration and discarding incomplete trailing vertices. Adds unit tests and documents the functional debt.
dl_iterate_phdr takes the loader lock. Calling it with the base cache
mutex held inverts the order against a thread inside dlopen whose
constructor throws and reaches FindFrameFast. Probe first, then lock
only for the lookup and the insert; racing misses compute the same
bases and emplace keeps the first.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
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]>