Rule 8.5
Chapter 8, Functions and entry points Test
A collective operation (a derivative, an implicit-LOD texture sample, a barrier) must be in uniform control flow.
The rule text and the parts under it are the compiler's own English, as the design document writes them.
Rationale
a barrier outside uniform control flow is a shader-creation error.
A derivative or an implicit-LOD sample outside it triggers the derivative_uniformity diagnostic, whose default severity is error and which a WGSL author can lower or turn off with a diagnostic filter.
The compiler performs the analysis at the source line (Rule 12.6) and emits a filter only where the author writes @diagnostic on an entry (surface §54).
Derives from
Uniformity; Synchronization Built-in Functions (“all synchronization functions must only be invoked in uniform control flow”); Derivative Built-in Functions (“trigger a derivative_uniformity diagnostic if uniformity analysis cannot prove the call is in uniform control flow”); Filterable Triggering Rules (default severity error).
How it is verified
Checked by a test. A test, a gate script or a CI workflow names this rule, and the traceability check fails when a file listed below stops naming it.
Where the rule says the compiler enforces it:
TS8052 UNIFORMITY for a derivative, an implicit-LOD sample, a barrier or a workgroupUniformLoad reached under a condition on a non-uniform value (an if, a switch, a loop’s condition, the left side of && or ||, the condition of a ?: that WGSL writes as an if), or after a return, break or continue taken under one, naming the value as the author wrote it and the statement (#161, proposal 0008); @diagnostic("off", "derivative_uniformity") on the entry emits diagnostic(off, derivative_uniformity); and lifts the derivative half, never the barrier half; pinned by src/core/passes/uniformity.test.ts and src/compiler/ts/barriers.test.ts.
The files that verify it at commit 26de7be8, each at the first line that names the rule:
Explained in
The sections of the surface document that explain this rule, at commit 26de7be8:
Error codes that enforce it
The diagnostic codes the rule names under Enforced by, or whose registry text names the rule:
-
TS8052UNIFORMITY - A call that needs uniform control flow —
textureSampleand the other implicit-LOD forms, the derivatives, a barrier, orworkgroupUniformLoad— reached under a condition that is not uniform across the invocations that run together (anif, aswitch, a loop's condition, the left side of&&or||, the condition of a?:WGSL writes as anif), or after areturn,breakorcontinuetaken under one (§54).
See also
Source
The rule at commit 26de7be8:
docs/language-design.md:649(the design document)reqs/rules/RULE-0805.md(its traceability item)