[Filed by Copilot on behalf of @bghgary]
#1646 adds layerIndex selection for multi-layer ExternalTextures (e.g. NV12 array textures), but ships without an automated regression test.
A synthetic NV12 render test was prototyped (reverted in 8c27c87) but renders inconsistently on the GPU-less CI adapter. The D3D11 WARP software rasterizer appears to sample the R8G8 NV12 chroma-plane single-slice SRV using the luma height instead of the chroma height (H/2), zeroing chroma below H/2 and producing a ~50% pixel mismatch. The same test passes consistently on hardware GPUs, so the path is currently validated on real hardware only.
Task
Add a CI-portable regression test for ExternalTexture array-layer handling that is deterministic on the GPU-less CI adapter. It should cover:
- Single-slice selection across multiple layers — selecting
layerIndex 0, 1, … on a multi-layer source each views the correct slice (distinct per-slice content).
- Full multi-slice / no-
layerIndex path — the default whole-array bind is unregressed.
Approaches to dodge the WARP chroma-height discrepancy: exercise a format/path not subject to it, assert only on the correctly-sampled region, or run on a hardware-GPU runner if one becomes available.
References
[Filed by Copilot on behalf of @bghgary]
#1646 adds
layerIndexselection for multi-layerExternalTextures (e.g. NV12 array textures), but ships without an automated regression test.A synthetic NV12 render test was prototyped (reverted in 8c27c87) but renders inconsistently on the GPU-less CI adapter. The D3D11 WARP software rasterizer appears to sample the R8G8 NV12 chroma-plane single-slice SRV using the luma height instead of the chroma height (
H/2), zeroing chroma belowH/2and producing a ~50% pixel mismatch. The same test passes consistently on hardware GPUs, so the path is currently validated on real hardware only.Task
Add a CI-portable regression test for
ExternalTexturearray-layer handling that is deterministic on the GPU-less CI adapter. It should cover:layerIndex0, 1, … on a multi-layer source each views the correct slice (distinct per-slice content).layerIndexpath — the default whole-array bind is unregressed.Approaches to dodge the WARP chroma-height discrepancy: exercise a format/path not subject to it, assert only on the correctly-sampled region, or run on a hardware-GPU runner if one becomes available.
References