Skip to content

vrs-rate-conflict-with-target

Status: shipped (Phase 8) — see CHANGELOG.

What it detects

A pixel shader that emits SV_ShadingRate when the source also declares a per-primitive coarse-rate marker (e.g. D3D12_SHADING_RATE_COMBINER, PerPrimitive, CoarseShadingRate).

Why it matters on a GPU

D3D12 / Vulkan VRS rate combiners produce the minimum of per-primitive and per-pixel rates -- conflicting declarations silently override the author's expectation. When the per-primitive rate is coarser, the per-pixel rate is ignored on Turing+/Ampere/Ada/Battlemage; when the per-pixel rate is coarser, the per-primitive rate dominates. The author who sets both rarely intends both.

Examples

Bad

hlsl
// Pretend a coarse-rate hint is also set CPU-side.
struct PSOut { float4 c : SV_Target; uint r : SV_ShadingRate; };
PSOut ps_main() { PSOut o; o.r = 0; return o; }

Options

none

Fix availability

suggestion — The combiner choice is application-specific.

© 2026 NelCit — Apache-2.0 (code), CC-BY-4.0 (docs).