flowchart TB
hlsl["HLSL compute shader
ddx(), Sample(), CalculateLevelOfDetail()"] --> dxil["dxil-spirv
2D group → linear quads
(lanes 4k..4k+3)"]
dxil --> spirv["SPIR-V OpDPdx / implicit-LOD sample"]
spirv --> before["stock SPIRV-Cross: dfdx() in a kernel"]
before -->|"Metal: unsupported builtin"| fail["pipeline creation fails"]
spirv --> patched["patch 0018"]
patched --> shuffle["ddx = quad_shuffle(v, 1) − quad_shuffle(v, 0)
ddy = quad_shuffle(v, 2) − quad_shuffle(v, 0)"]
patched --> grad["sample(..., gradient2d(ddx, ddy))"]