Legend
ποΈ - Requires backend/yaml work
π - Testable
Vertex Shader
Semantics
Functional
Niche / vendor behavior
Pixel Shader
Semantics
Functional
Niche / vendor behavior
Hull Shader
ποΈ Stage-level prerequisites (must land before any test below):
- Extend
Stages enum with Hull.
- Patch-list topologies (
PatchList<3>, PatchList<4>, ..., PatchList<32>) per backend.
- HS attribute reflection:
[domain], [partitioning], [outputtopology], [outputcontrolpoints], [patchconstantfunc], [maxtessfactor].
- Tessellation pipeline state on each backend (D3D12 already supports it; VK needs
tessellationShader feature; MTL via metal-irconverter).
Semantics
Functional
Niche / vendor behavior
Domain Shader
ποΈ Stage-level prerequisites:
- Extend
Stages enum with Domain.
- DS pipeline state on each backend (paired with HS).
Semantics
Functional
Niche / vendor behavior
Geometry Shader
ποΈ Stage-level prerequisites:
- Extend
Stages enum with Geometry.
- GS pipeline state on each backend.
[maxvertexcount(N)] and [instance(N)] reflection.
- Variable input topology (
point, line, triangle, lineadj, triangleadj).
- Output stream types (
PointStream<T>, LineStream<T>, TriangleStream<T>).
Semantics
Functional
Niche / vendor behavior
Cross-cutting / Pipeline
Topologies
Pipeline state
Multi-stage pipelines
Cross-backend determinism
Legend
ποΈ - Requires backend/yaml work
π - Testable
Vertex Shader
Semantics
GraphicsSystemValues.testfor graphics-stage system-value semanticsΒ #1142Functional
Float32vertex attribute formats (Int32,UInt32,Float16,Int16,UInt16) - πUNorm8,SNorm8,UNorm16,SNorm16) - πmul(MVP, position)instead of pass-through) - πStructuredBuffer<T>read from VS - πByteAddressBufferread from VS - πRWStructuredBufferwrite from VS (different UAV path than PS-side write) - πTexture2D.SampleLevel(...)from VS (no derivatives in VS) - πTexture2D.Load(...)from VS - πSV_Positionwith W β 1 (verify perspective divide downstream) - πINSTANCE) - ποΈBaseVertex- ποΈNiche / vendor behavior
nointerpolationinteger varying - πNaN/InfinSV_Position(must be clipped, no rasterized output) - πPixel Shader
Semantics
SV_Position(input)GraphicsSystemValues.testSV_PrimitiveIDGraphicsSystemValues.testfor graphics-stage system-value semanticsΒ #1142SV_IsFrontFaceGraphicsSystemValues.testfor graphics-stage system-value semanticsΒ #1142SV_ClipDistance[n](input) - πSV_CullDistance[n](input) - πSV_Depth(output) - πSV_DepthGreaterEqual(output) - πSV_DepthLessEqual(output) - πSV_Target1..SV_Target7(MRT) - ποΈSV_StencilRef(output) - ποΈSV_SampleIndex(input) - ποΈSV_Coverage(input) - ποΈSV_Coverage(output) - ποΈSV_InnerCoverage(input) - ποΈSV_Barycentrics(input) - ποΈSV_RenderTargetArrayIndex(input from VS/GS) - ποΈSV_ViewportArrayIndex(input from VS/GS) - ποΈFunctional
discardtest/Graphics/discard.test(Add pixel shaderdiscardtestΒ #1119)ddx_fine,ddy_fine,fwidthtest/Graphics/..clip()intrinsic (companion todiscard) - πddx/ddy(default precision) - πddx_coarse/ddy_coarse- πfwidth_coarse/fwidth_fine- πnointerpolation(flat) - AddInterpolationModifiers.testfor HLSL pixel-shader interpolation modifiersΒ #1151noperspective- AddInterpolationModifiers.testfor HLSL pixel-shader interpolation modifiersΒ #1151centroid- AddInterpolationModifiers.testfor HLSL pixel-shader interpolation modifiersΒ #1151linear- AddInterpolationModifiers.testfor HLSL pixel-shader interpolation modifiersΒ #1151EvaluateAttributeAtCentroid- πEvaluateAttributeSnapped- πEvaluateAttributeAtSample- ποΈsample- ποΈRWBuffer<T>- πRWByteAddressBuffer- πRWTexture2D- πTexture2Dwith all sample overloads (Sample,SampleBias,SampleGrad,SampleLevel,SampleCmp,Gather) - πNiche / vendor behavior
QuadReadAcrossX/Y/Diagonal) under partial coverage - πSV_Position.xyexactly at pixel center(x + 0.5, y + 0.5)- π[MinDepth, MaxDepth](clipped vs clamped vs undefined) - πSV_IsFrontFacefor zero-area / degenerate triangles - πdiscard+SV_Depthwrite interaction (depth must not be written) - πclip()withNaN/Infoperand - πHull Shader
Semantics
SV_TessFactor(3 / 4 / 2 floats by domain) - ποΈSV_InsideTessFactor(1 / 2 / 0 floats by domain) - ποΈSV_OutputControlPointID- ποΈSV_PrimitiveID(HS input) - ποΈHullSystemValues.testβ bundled test - ποΈFunctional
InputPatch<T, N>reading from VS output - ποΈOutputPatch<T, M>to DS - ποΈSV_TessFactor = 0(entire patch discarded) - ποΈSV_TessFactorclamping at[maxtessfactor]- ποΈNiche / vendor behavior
Inf/NaNhandling (spec says clamped to max) - ποΈ> 64(spec says clamp; observe driver behavior) - ποΈDomain Shader
Semantics
SV_DomainLocation(float2for tri/quad,floatfor isoline) - ποΈSV_PrimitiveID(DS input) - ποΈSV_Position(DS output to rasterizer) - ποΈSV_ClipDistance/SV_CullDistance(DS output) - ποΈDomainSystemValues.testβ bundled test - ποΈFunctional
tri(barycentricSV_DomainLocation) - ποΈquad(UVSV_DomainLocation) - ποΈisoline- ποΈinteger- ποΈfractional_even- ποΈfractional_odd- ποΈpow2- ποΈtriangle_cw- ποΈtriangle_ccw- ποΈline- ποΈpoint- ποΈSV_Position) - ποΈNiche / vendor behavior
fractional_*partitioning vertex-count is implementation-defined within bounds β assert with tolerance, not exact - ποΈSV_DomainLocationprecision near 0 / 1 boundaries - ποΈoutside.x(density) vsoutside.y(detail) β easy to invert - ποΈGeometry Shader
Semantics
SV_PrimitiveID(GS input β auto-generated per input primitive) - ποΈSV_GSInstanceID(when[instance(N)]is used) - ποΈSV_RenderTargetArrayIndex(GS output) - ποΈSV_ViewportArrayIndex(GS output) - ποΈGeometrySystemValues.testβ bundled test - ποΈFunctional
if (cond) stream.Append(v);β some primitives produce 0 outputs - ποΈ[instance(N)]GS instancing β N invocations per input primitive - ποΈtriangleadj(6 vertices: 3 triangle + 3 neighbors), use neighbor data for silhouette detection - ποΈ[maxvertexcount(1024)]β spec minimum upper bound; verify large outputs - ποΈRestartStrip()mid-output - ποΈNiche / vendor behavior
[maxvertexcount(N)]declared, 0 emitted, primitive vanishes - ποΈ[maxvertexcount](undefined per spec, observe behavior) - ποΈSV_RenderTargetArrayIndexβ different primitives to different RT slices - ποΈCross-cutting / Pipeline
Topologies
Pipeline state
NumRenderTargets > 1) - ποΈSampleCount > 1) - ποΈMulti-stage pipelines
D3D12_SHADER_VISIBILITY_*) - πCross-backend determinism
DiffRMS/Intervalstolerance per goldenimage test - π