Takes #6451's merge of main. Main's spanned-waves flag took request
serialization version 32, so the sample order moves to version 33; a
version 32 request keeps its spanned-waves flag and reads no sample order.
Multisampled color targets now gain storage usage on their first storage
binding; a target whose samples may be reordered still gets it at creation,
and the recorder's storage-usage checks expect that.
Main's one-sample target test expected a pattern varying between pixels
to be refused on a device without a one-sample 2x2 grid; with the grid
fallback it takes pixel (0,0)'s locations instead, so the test now
expects it to be accepted.
A one-sample target drawn by a multisampled rasterizer refused a pixel
shader that reads ANCILLARY with POS_X_FLOAT or POS_Y_FLOAT, because the
sample index made the host shade per sample and moved FragCoord from the
pixel centre. A shader the guest does not iterate now runs once per pixel
with sample number 0, and on this path the rasterizer keeps one sample, so
those draws are no longer refused. Resident Evil Village's (PPSA01556)
2x depth-only pass with SPI_PS_INPUT_ENA 0x2301 was one of them.
Main took request serialization versions 31 (output primitive size) and
32 (spanned waves), and #6683 uses 33, so the pixel iteration fields move
to version 34. A version 32 request keeps its spanned-waves flag and reads
no pixel iteration.
The deferred settle of small Windows imports could only be turned off
through the test hook. The variable turns it off for a run, so a title can
be compared with and without it on one build; unset, nothing changes.
Main's #5905 settles Linux dma-buf imports with settleImport, which is
now built on both platforms. The batched settle of Windows imports under
1 MiB, its counters and adoptSettleDevice's batch reset stay Windows-only,
and ClearHostImports drains the batches only there.
The cached tar held the 3rdparty work trees too, and its extraction fails on
the dangling symlink 3rdparty/zstd/tests/cli-tests/bin/unzstd, which Git Bash
tar can't create. Cache .git/modules alone and let git submodule update check
the work trees out from it, as a clean checkout does.
Co-Authored-By: Claude <[email protected]>
Wolverine re-creates about 340 storage images a second while its dynamic resolution steps; the two unconditional log lines wrote 1.17 million lines to stdout in 25 minutes and took about 11 % of queue worker 0 in a sample.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
#5907 added a case to multisampleTests that clears MSAA_ENABLE on its
2x rasterizer over a one-sample color target, and expected the color
sample-count refusal. With the previous commit, that draw rasterizes
the one-sample target as one sample with the standard location, so the
case now requires that instead.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
On top of #5882, a draw with PA_SC_AA_CONFIG.MSAA_NUM_SAMPLES 2 (4x),
MSAA_ENABLE clear, a one-sample color target and no depth target threw
"a color target's sample count differs from the rasterizer's", which
stops METAL GEAR SOLID: Peace Walker (PPSA18216) at its first
presentation (draw C on #5268). Without MSAA_ENABLE every sample is at
the pixel center, and a one-sample target keeps the coverage of sample
0, so the draw is now drawn as a one-sample draw.
PS_ITER_SAMPLE, ANCILLARY or SAMPLE_COVERAGE pixel inputs and a
sample-mask export throw on this path.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The stencil null feedback fixture splices a storage image array into the
fragment module by hand. spirv-val rejects the result with "Decorate is
in an invalid layout section": the decorations were inserted in front of
the first OpTypeVoid, which the recompiler emits after its Input and
Output variables. The binding also used set 1 with the vertex-group
number of a different heap kind (the 1D array one, not the 2D image the
module declares), so the set layout the driver builds from the binding
metadata (binding / 65 picks the set) put it in set 0 while the module
declared set 1.
Insert the decorations after the existing annotations, declare the image
array type the recompiler emits for a float 2D storage heap, list the
variable in the SPIR-V 1.4 entry point interface like the recompiler
does, and number the binding as the recompiler does for the fragment
stage, in the descriptor set the target uses. When built with
ANYPS5_ENABLE_SPIRV_TOOLS the fixture validates its module against the
Vulkan 1.1 environment.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
On Windows, agc_shader_helpers returned from main with the driver's
threads still running. ExitProcess ends them first, then the DLLs'
static destructors run and wait on what those threads left locked:
the async log's queue mutex in Driver::stop, DeviceUseGate's condition
variable in ~Driver, and condition variables in libkernel's statics.
The test hung after printing its result in about one ctest run of
three on a Radeon 860M (#6791).
Like the other driver tests, it now runs LibcRunShutdown_nid_postfix
before returning, which stops the driver while its threads are alive.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Its callers (NativePositioned_nid_no_patch, the vectored transfer) already hold the
non-recursive per-descriptor lock, so locking again deadlocked every positioned transfer.
Co-Authored-By: Claude <[email protected]>