Skip to content

Rules catalog

All rules grouped by category. Each entry links to the dedicated rule page, which includes the GPU-mechanism reasoning and (where applicable) the quick-fix rewrite.

Status: v0.5.6 shipped — 154 rules ship end-to-end across the categories below. The catalog also lists ~30 doc-only stubs for rules queued in ADR 0007 / ADR 0010 / ADR 0011 that have not landed yet — those pages document design intent ahead of code. See ROADMAP for the phase-by-phase plan.

Total rules documented: 210

Legend

SeverityMeaning
errorCorrectness issue or undefined behaviour. Blocks CI when mode is deny.
warnPerformance anti-pattern or code smell. Default for most rules.
infoStyle or modernisation hint. Never blocks CI.
ApplicabilityMeaning
machine-applicableThe fix can be applied automatically and is always correct.
suggestionA fix is shown but requires human intent-verification before applying.
noneNo automated fix; the diagnostic only explains the problem.

Math

RuleSeverityApplicabilityPhase
acos-without-saturatewarnmachine-applicable4
countbits-vs-manual-popcountwarnsuggestion2
cross-with-up-vectorwarnmachine-applicable2
div-without-epsilonwarnmachine-applicable4
dot-on-axis-aligned-vectorwarnmachine-applicable2
dot4add-opportunitywarnsuggestion8
firstbit-vs-log2-trickwarnmachine-applicable2
inv-sqrt-to-rsqrtwarnmachine-applicable2
isnormal-pre-sm69errorsuggestion3
isspecialfloat-implicit-fp16-promotionwarnsuggestion3
length-comparisonwarnmachine-applicable2
length-then-dividewarnmachine-applicable2
lerp-extremeswarnmachine-applicable2
lerp-on-bool-condwarnmachine-applicable2
manual-distancewarnmachine-applicable2
manual-mad-decompositionwarnsuggestion2
manual-reflectwarnmachine-applicable2
manual-refractwarnsuggestion2
manual-smoothstepwarnmachine-applicable2
manual-stepwarnmachine-applicable2
mul-identitywarnmachine-applicable2
pow-base-two-to-exp2warnmachine-applicable2
pow-const-squaredwarnmachine-applicable2
pow-integer-decompositionwarnsuggestion2
pow-to-mulwarnmachine-applicable2
precise-missing-on-iterative-refinewarnsuggestion4
redundant-unorm-snorm-conversionwarnsuggestion2
repeated-pure-intrinsicwarnsuggestion4
select-vs-lerp-of-constantwarnmachine-applicable2
sin-cos-pairwarnmachine-applicable2
sqrt-of-potentially-negativewarnmachine-applicable4
wavereadlaneat-constant-zero-to-readfirstwarnmachine-applicable2

Saturate / redundancy

RuleSeverityApplicabilityPhase
clamp01-to-saturatewarnmachine-applicable2
redundant-abswarnmachine-applicable2
redundant-normalizewarnmachine-applicable2
redundant-saturatewarnmachine-applicable2
redundant-transposewarnmachine-applicable2

Bindings

RuleSeverityApplicabilityPhase
all-resources-bound-not-setwarnsuggestion3
bool-straddles-16berrorsuggestion3
buffer-load-width-vs-cache-linewarnsuggestion7
byteaddressbuffer-load-misalignedwarnsuggestion3
byteaddressbuffer-narrow-when-typed-fitswarnsuggestion3
cbuffer-divergent-indexwarnsuggestion3
cbuffer-fits-rootconstantswarnsuggestion3
cbuffer-large-fits-rootcbv-not-tablewarnsuggestion3
cbuffer-padding-holewarnsuggestion3
dead-store-sv-targetwarnsuggestion3
descriptor-heap-no-non-uniform-markerwarnsuggestion3
descriptor-heap-type-confusionerrornone3
divergent-buffer-index-on-uniform-resourcewarnsuggestion4
excess-interpolatorswarnnone3
missing-precise-on-pcfwarnsuggestion3
nointerpolation-mismatchwarnsuggestion3
non-uniform-resource-indexwarnsuggestion3
oversized-cbufferwarnsuggestion3
rov-without-earlydepthstencilwarnsuggestion3
rwbuffer-store-without-globallycoherenterrornone4
rwresource-read-only-usagewarnsuggestion3
static-sampler-when-dynamic-usedwarnsuggestion3
structured-buffer-stride-mismatchwarnsuggestion3
structured-buffer-stride-not-cache-alignedwarnsuggestion3
uav-srv-implicit-transition-assumedwarnnone3
unused-cbuffer-fieldwarnsuggestion3

Texture / sampling

RuleSeverityApplicabilityPhase
anisotropy-without-anisotropic-filterwarnsuggestion3
bgra-rgba-swizzle-mismatchwarnsuggestion3
comparison-sampler-without-comparison-opwarnsuggestion3
gather-channel-narrowingnotemachine-applicable3
gather-cmp-vs-manual-pcfwarnsuggestion3
manual-srgb-conversionwarnsuggestion3
mip-clamp-zero-on-mipped-texturewarnsuggestion3
samplecmp-vs-manual-comparewarnsuggestion3
samplegrad-with-constant-gradswarnmachine-applicable3
samplelevel-with-zero-on-mipped-texwarnsuggestion3
texture-array-known-slice-uniformnotesuggestion3
texture-as-buffernotesuggestion3
texture-lod-bias-without-gradwarnsuggestion3

Workgroup / groupshared

RuleSeverityApplicabilityPhase
compute-dispatch-grid-shape-vs-quadwarnsuggestion3
groupshared-16bit-unpackedwarnsuggestion3
groupshared-atomic-replaceable-by-wavewarnsuggestion4
groupshared-dead-storewarnsuggestion4
groupshared-first-read-without-barriererrornone4
groupshared-overwrite-before-barrierwarnsuggestion4
groupshared-stride-32-bank-conflictwarnsuggestion4
groupshared-stride-non-32-bank-conflictwarnsuggestion4
groupshared-too-largewarnnone3
groupshared-union-aliasedwarnsuggestion3
groupshared-volatilewarnmachine-applicable2
groupshared-when-registers-sufficewarnsuggestion7
groupshared-write-then-no-barrier-readerrornone4
interlocked-bin-without-wave-prereducewarnsuggestion4
interlocked-float-bit-cast-trickwarnsuggestion4
numthreads-not-wave-alignedwarnsuggestion3
numthreads-too-smallwarnnone3
numwaves-anchored-capwarnsuggestion8
wave-prefix-sum-vs-scan-with-atomicswarnsuggestion4
wavesize-attribute-missingwarnsuggestion3

Control flow

RuleSeverityApplicabilityPhase
barrier-in-divergent-cferrornone4
branch-on-uniform-missing-attributewarnsuggestion4
cbuffer-load-in-loopwarnmachine-applicable4
clip-from-non-uniform-cfwarnsuggestion4
derivative-in-divergent-cferrornone4
discard-then-workwarnnone4
early-z-disabled-by-conditional-discardwarnsuggestion4
flatten-on-uniform-branchwarnsuggestion4
forcecase-missing-on-ps-switchwarnsuggestion4
groupshared-uninitialized-readerrornone4
loop-attribute-conflictwarnsuggestion2
loop-invariant-samplewarnsuggestion4
manual-wave-reduction-patternwarnsuggestion4
quadany-quadall-opportunitywarnsuggestion4
redundant-computation-in-branchwarnmachine-applicable4
sample-in-loop-implicit-gradwarnsuggestion4
small-loop-no-unrollwarnsuggestion4
wave-active-all-equal-precheckwarnsuggestion4
wave-intrinsic-helper-lane-hazardwarnnone4
wave-intrinsic-non-uniformerrornone4
wavereadlaneat-constant-non-zero-portabilitywarnsuggestion3

Mesh / amplification

RuleSeverityApplicabilityPhase
as-payload-over-16kerrornone3
dispatchmesh-grid-too-small-for-wavewarnsuggestion8
dispatchmesh-not-callederrornone4
mesh-numthreads-over-128errornone3
mesh-output-decl-exceeds-256errornone3
meshlet-vertex-count-badwarnsuggestion7
output-count-overrunwarnsuggestion7
primcount-overrun-in-conditional-cferrornone4
setmeshoutputcounts-in-divergent-cferrornone4

Ray tracing (DXR)

RuleSeverityApplicabilityPhase
anyhit-heavy-workwarnsuggestion4
inline-rayquery-when-pipeline-betterwarnsuggestion4
missing-accept-first-hitwarnsuggestion7
missing-ray-flag-cull-non-opaquewarnsuggestion3
oversized-ray-payloadwarnsuggestion7
pipeline-when-inline-betterwarnsuggestion4
ray-flag-force-opaque-with-anyhitwarnsuggestion8
recursion-depth-not-declaredwarnsuggestion7
tracerray-conditionalwarnsuggestion4
triangle-object-positions-without-allow-data-access-flagwarnsuggestion8

Work graphs

RuleSeverityApplicabilityPhase
mesh-node-missing-output-topologyerrornone3
mesh-node-not-leaferrornone3
mesh-node-uses-vertex-shader-pipelineerrornone3
nodeid-implicit-mismatcherrornone3
outputcomplete-missingerrornone4
quad-or-derivative-in-thread-launch-nodeerrornone4

Shader execution reordering (SER)

RuleSeverityApplicabilityPhase
coherence-hint-encodes-shader-typewarnsuggestion4
coherence-hint-redundant-bitswarnmachine-applicable4
fromrayquery-invoke-without-shader-tableerrornone4
hitobject-construct-outside-allowed-stageserrornone3
hitobject-invoke-after-recursion-caperrornone4
hitobject-passed-to-non-inlined-fnerrornone4
hitobject-stored-in-memoryerrornone3
maybereorderthread-outside-raygenerrornone3
maybereorderthread-without-payload-shrinkwarnsuggestion7
reordercoherent-uav-missing-barriererrornone4
ser-coherence-hint-bits-overflowwarnmachine-applicable8
ser-trace-then-invoke-without-reorderwarnsuggestion4

Cooperative vectors

RuleSeverityApplicabilityPhase
coopvec-base-offset-misalignederrornone3
coopvec-fp8-with-non-optimal-layouterrornone3
coopvec-non-optimal-matrix-layoutwarnsuggestion3
coopvec-non-uniform-matrix-handlewarnsuggestion4
coopvec-stride-mismatcherrornone3
coopvec-transpose-without-feature-checkwarnsuggestion3

Long vectors

RuleSeverityApplicabilityPhase
long-vector-bytebuf-load-misalignedwarnsuggestion3
long-vector-in-cbuffer-or-signatureerrorsuggestion3
long-vector-non-elementwise-intrinsicerrornone2
long-vector-typed-buffer-loaderrorsuggestion3

Opacity micromaps

RuleSeverityApplicabilityPhase
omm-allocaterayquery2-non-const-flagserrornone3
omm-rayquery-force-2state-without-allow-flagerrorsuggestion3
omm-traceray-force-omm-2state-without-pipeline-flagerrornone3

Sampler feedback

RuleSeverityApplicabilityPhase
feedback-every-samplewarnsuggestion4
feedback-write-wrong-stageerrornone3
sampler-feedback-without-streaming-flagwarnsuggestion3

Variable-rate shading

RuleSeverityApplicabilityPhase
sv-depth-vs-conservative-depthwarnsuggestion3
vrs-incompatible-outputwarnsuggestion3
vrs-rate-conflict-with-targetwarnsuggestion8
vrs-without-perprimitive-or-screenspace-sourcewarnsuggestion8

Wave / helper lane

RuleSeverityApplicabilityPhase
quadany-quadall-non-quad-stageerrornone3
quadany-replaceable-with-derivative-uniform-branchwarnsuggestion4
startvertexlocation-not-vs-inputerrornone3
wave-reduction-pixel-without-helper-attributewarnsuggestion4
waveops-include-helper-lanes-on-non-pixelerrormachine-applicable3
wavesize-fixed-on-sm68-targetwarnsuggestion3
wavesize-range-disorderederrormachine-applicable2

Packed math

RuleSeverityApplicabilityPhase
manual-f32tof16warnmachine-applicable7
min16float-in-cbuffer-roundtripwarnsuggestion7
min16float-opportunitynotesuggestion7
pack-clamp-on-prove-boundedwarnsuggestion7
pack-then-unpack-roundtripwarnmachine-applicable7
unpack-then-repackwarnsuggestion7

Memory / IR-level

RuleSeverityApplicabilityPhase
live-state-across-traceraywarnnone7
redundant-texture-samplewarnnone7
sample-use-no-interleavewarnsuggestion8
scratch-from-dynamic-indexingwarnnone7
vgpr-pressure-warningwarnnone7

Numerical / misc

RuleSeverityApplicabilityPhase
compare-equal-floatwarnmachine-applicable2
comparison-with-nan-literalerrormachine-applicable2
redundant-precision-castwarnmachine-applicable2

blackwell

RuleSeverityApplicabilityPhase
coopvec-fp4-fp6-blackwell-layoutwarnsuggestion8

linalg

RuleSeverityApplicabilityPhase
linalg-matrix-element-type-mismatchwarnsuggestion8
linalg-matrix-non-optimal-layoutwarnsuggestion8

rdna4

RuleSeverityApplicabilityPhase
oriented-bbox-not-set-on-rdna4warnsuggestion8
rga-pressure-bridge-stubnotenone8
wave64-on-rdna4-compute-misses-dynamic-vgprwarnsuggestion8

slang-language

RuleSeverityApplicabilityPhase
slang-associatedtype-shadowing-builtinwarnnone8
slang-generic-without-constraintwarnsuggestion8
slang-interface-conformance-missing-methoderrornone8
slang-module-import-without-usewarnsuggestion8

sm6_10

RuleSeverityApplicabilityPhase
cluster-id-without-cluster-geometry-feature-checkwarnsuggestion8
getgroupwaveindex-without-wavesize-attributewarnsuggestion8
groupshared-over-32k-without-attributewarnmachine-applicable8
reference-data-type-not-supported-pre-sm610warnsuggestion8

xe2

RuleSeverityApplicabilityPhase
wavesize-32-on-xe2-misses-simd16warnsuggestion8

For contributors adding a new rule: start from docs/rules/_template.md. The catalog above is generated from each page's YAML front-matter at build time — keep id, category, severity, applicability, and phase accurate and the entry will appear automatically.

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