The still-waits check in CommittedAbis timed out after 200 ms, which the
other thread's front-end build alone could reach before it ever waited on
the preparation lock. It now waits until that build has started, gives the
thread 500 ms, and also requires the pixel shader's committed ABIs to be
unchanged. The build counter is read after background registration
preparation has settled, so an earlier test's preparation can't count.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A one-sample depth surface was bound to the copy shader's sampler2DMS,
which Vulkan only allows for a multisampled view. The shader is now
built in a single-sample and a multisample variant, and the copy picks
one by the surface's sample count. The copy also no longer requires the
guest-memory import state of native multisample depth sampling: it reads
the host image the draws rendered into. Its barriers name the host stage
their host access bits need, as the CMASK clear's do.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A draw with DB_RENDER_CONTROL.DEPTH_COPY copies one sample of the
Z_32_FLOAT depth surface into color target 0. It now runs as a compute
pass that fetches that sample and stores it into the R32 float target,
when the draw covers the whole surface without depth or stencil tests.
With COPY_CENTROID the sample is the first one the draw covers, which is
sample 0 under the full sample mask the driver requires, as radeonsi
programs its per-sample DB to CB copies.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Nine of the twenty-one exports implement the no-device path: the lifecycle
pair accepts every call and keeps no state, the device queries answer the
empty list, the not-exists 0 and the device-not-found error, the map
requests answer device-not-found with their outputs untouched, and the
getdents family answers device-not-found on open and not-supported with
zero bytes on the read of a never-opened descriptor. The argument
validation of the register, unregister, unmap and getdents-close exports
is implemented and answers 0x80f40002; past it they keep their markers,
because no reference establishes their success path. The device-info
record and two prototypes follow SharpProspero, the rest shadPS4, each
pinned in the debt entry.
The second run views slices 0 through 8102. A device whose
maxImageArrayLayers is above 8102, such as RADV, accepts that view
instead of refusing it, and then samples the layer the coordinate
selects. The expected texel still clamped the layer to the three-slice
window of the first run, so a sample at layer 5 read 107/255 where the
test wanted layer 2's 147/255.
The libSceLibcInternal of a payload process on a PS5 (firmware 12.70) seeds
the additive feedback generator with a good_rand that reads its argument as an
int32, turns 0 into 123459876 and applies x = 16807 * (x % 127773) - 2836 * (x / 127773),
adding 0x7fffffff to a negative result. Its default state is the state after
srandom(1), not a precomputed table.
Replace the good_rand, build the default state by seeding it with 1 and add a
guest test that pins the first values of a fresh process, the values after each
measured seed and the saved state words of every measured initstate size.