규칙 6.6
6장, 선언과 리소스 테스트
An entry point’s inputs and outputs are explicit parameters and return values; every parameter and every field of an entry I/O struct must carry @builtin("...") or @location(n), and the builtin name must be one WGSL defines for that stage and direction.
규칙 본문과 그 아래 항목은 설계 문서에 적힌 컴파일러 원문이라 한국어 페이지에서도 영어로 둡니다.
근거
an implicit stage input hides a dependency, and WGSL refuses an entry I/O member with no attribute.
출처
- Shader Interface;
- Inter-stage Input and Output Interface, whose definition of a stage input reads “each datum is either a built-in input value, or a user-defined input”;
- its subsection Input-output Locations, which carries the two requirements (“each user-defined input and output must have an explicitly specified IO location”; “each structure member in the entry point IO must be one of either a built-in value, or assigned a location”, each a shader-creation error);
builtinandlocation;- surface §3.
검증 방식
테스트로 확인합니다. 테스트나 게이트 스크립트, CI 워크플로가 이 규칙을 가리키고, 아래 파일 가운데 하나라도 규칙을 더는 가리키지 않으면 추적 검사가 실패합니다.
컴파일러가 이 규칙을 적용하는 곳을 규칙이 직접 적은 내용입니다.
TS8024 BUILTIN_NAMEandTS8025 BUILTIN_STAGEfor the builtin name and its stage;TS8029 STRUCT_FIELD_MISSING_ATTRfor a field of an entry I/O struct;- nothing at the front end for a bare parameter:
@fragment export function fs(p: vec4): vec4compiles and reaches the WGSL text asfn fs(p: vec4<f32>)with no attribute, which WGSL refuses; - the GLSL writer alone, which reports it as a
TS8015warning on a render module (entry 'fs' input 'p' has neither @location nor @builtin) and not at all on a compute-only module (Appendix B).
커밋 c66579bf에서 이 규칙을 확인하는 파일입니다. 파일마다 규칙을 처음 가리키는 줄로 연결했습니다.
설명하는 절
커밋 c66579bf의 표면 문서에서 이 규칙을 설명하는 절입니다.
적용하는 오류 코드
규칙이 Enforced by 항목에서 가리키는 진단 코드와, 레지스트리 설명에서 이 규칙을 가리키는 진단 코드입니다.
-
TS8015BACKEND - 프런트엔드가 받아들인 모듈을 백엔드가 출력하지 못하고 거부했습니다. 메시지는 백엔드가 쓴 그대로입니다.
-
TS8024BUILTIN_NAME @builtin("...")names an id outside WGSL's builtin vocabulary (WgslBuiltinNameincore/sot.ts).-
TS8025BUILTIN_STAGE - A
@builtin(...)id used as the wrong stage's input or output, e.g.frag_depthon a vertex return, orfront_facingon a vertex parameter. -
TS8029STRUCT_FIELD_MISSING_ATTR - A field of a struct used as an entry function's parameter or return type carries neither
@builtin(...)nor@location(...): WGSL rejects an entry-IO struct member with no attribute, so this is caught at the front end instead of reaching the backend as invalid emitted WGSL.
함께 보기
소스
커밋 c66579bf의 규칙 원문:
docs/language-design.md:433(설계 문서)reqs/rules/RULE-0606.md(추적 항목)