규칙 8.5
이 페이지에서

규칙 8.5

8장, 함수와 진입점 테스트

A collective operation (a derivative, an implicit-LOD texture sample, a barrier) must be in uniform control flow.

규칙 본문과 그 아래 항목은 설계 문서에 적힌 컴파일러 원문이라 한국어 페이지에서도 영어로 둡니다.

근거

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).

출처

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).

검증 방식

테스트로 확인합니다. 테스트나 게이트 스크립트, CI 워크플로가 이 규칙을 가리키고, 아래 파일 가운데 하나라도 규칙을 더는 가리키지 않으면 추적 검사가 실패합니다.

컴파일러가 이 규칙을 적용하는 곳을 규칙이 직접 적은 내용입니다.

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.

커밋 c66579bf에서 이 규칙을 확인하는 파일입니다. 파일마다 규칙을 처음 가리키는 줄로 연결했습니다.

설명하는 절

커밋 c66579bf의 표면 문서에서 이 규칙을 설명하는 절입니다.

적용하는 오류 코드

규칙이 Enforced by 항목에서 가리키는 진단 코드와, 레지스트리 설명에서 이 규칙을 가리키는 진단 코드입니다.

TS8052 UNIFORMITY
A call that needs uniform control flow — textureSample and the other implicit-LOD forms, the derivatives, a barrier, or workgroupUniformLoad — reached under a condition that is not uniform across the invocations that run together (an if, a switch, a loop's condition, the left side of && or ||, the condition of a ?: WGSL writes as an if), or after a return, break or continue taken under one (§54).

함께 보기

소스

커밋 c66579bf의 규칙 원문:

이 페이지 편집 문제 보고