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.
레지스트리 설명과 컴파일러 메시지는 컴파일러 원문이라 한국어 페이지에서도 영어로 둡니다.
예제
"use typeshade"
class FsIn { @builtin("position") pos: vec4 uv: vec2}
@fragmentexport function main(v: FsIn): vec4 { return vec4(v.uv, 0., 1.)}빌드할 때 고정된 컴파일러로 이 프로그램을 컴파일하면 다음 진단이 나옵니다.
TS8029 error, 9행: Struct "FsIn" field "uv" is used as a fragment input but has neither @builtin(...) nor @location(...): WGSL requires every entry input struct member to declare one.
고치는 법
같은 프로그램을 고친 모습입니다. 진단 없이 컴파일됩니다.
"use typeshade"
class FsIn { @builtin("position") pos: vec4 @location(0) uv: vec2}
@fragmentexport function main(v: FsIn): vec4 { return vec4(v.uv, 0., 1.)}이 코드가 적용하는 규칙
- 규칙 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. - 규칙 12.6 테스트
- A requirement the front end can check must be checked at the front end, in the author’s words, and not left to Tint or a driver.
함께 보기
소스
커밋 c66579bf에서 컴파일러가 이 코드를 내는 곳입니다. 파일마다 한 줄씩 적었습니다.