규칙 6.6
이 페이지에서

규칙 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);
  • builtin and location;
  • surface §3.

검증 방식

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

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

  • TS8024 BUILTIN_NAME and TS8025 BUILTIN_STAGE for the builtin name and its stage;
  • TS8029 STRUCT_FIELD_MISSING_ATTR for a field of an entry I/O struct;
  • nothing at the front end for a bare parameter: @fragment export function fs(p: vec4): vec4 compiles and reaches the WGSL text as fn fs(p: vec4<f32>) with no attribute, which WGSL refuses;
  • the GLSL writer alone, which reports it as a TS8015 warning 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 항목에서 가리키는 진단 코드와, 레지스트리 설명에서 이 규칙을 가리키는 진단 코드입니다.

TS8015 BACKEND
프런트엔드가 받아들인 모듈을 백엔드가 출력하지 못하고 거부했습니다. 메시지는 백엔드가 쓴 그대로입니다.
TS8024 BUILTIN_NAME
@builtin("...") names an id outside WGSL's builtin vocabulary (WgslBuiltinName in core/sot.ts).
TS8025 BUILTIN_STAGE
A @builtin(...) id used as the wrong stage's input or output, e.g. frag_depth on a vertex return, or front_facing on a vertex parameter.
TS8029 STRUCT_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의 규칙 원문:

이 페이지 편집 문제 보고