리소스
이 페이지에서

Resources: TypeScript 선언에서 GPU 리소스로

TypeShade resource는 셰이더가 소유하는 JavaScript 객체가 아니라 호스트가 채우는 binding slot입니다. 제품 코드에서는 declare로 이 경계를 명시합니다.

1. TypeScript 선언과 대응하기

TypeScript의 declare가 런타임 값을 만들지 않고 타입 수준의 존재를 설명하듯, TypeShade의 declare는 호스트가 제공하는 GPU resource를 소스에 표현합니다. 다만 TypeShade에서는 uniform<T>와 storage<T>가 GPU 메모리 의미까지 지정합니다.

declare const camera: uniform<Camera>
declare const pixels: storage<array<f32>, "read_write">

2. declare로 resource 선언

initializer 없이 resource의 타입과 접근 권한을 선언합니다.

3. 접근 권한은 타입에 씁니다

uniform은 읽기 전용이고 uniform<T>는 타입 인자를 하나만 받습니다. storage는 storage<T>면 읽기 전용이고, storage<T, "read_write">면 읽고 쓸 수 있습니다. 접근 권한은 WGSL에서처럼 두 번째 타입 인자로 씁니다. resource는 모두 const로 선언합니다.

DeclarationSpaceAccess
declare const x: uniform<T>uniformread
declare const x: storage<T>storageread
declare const x: storage<T, "read_write">storageread_write

4. binding 순서와 호스트 계약

resource slot은 파일의 declare 순서와 연결됩니다. 실제 binding 번호를 코드에 흩뿌리기보다 컴파일러와 호스트의 reflection 결과를 계약으로 사용하는 방향이 기본입니다.

5. 자주 하는 실수

  • declare const x: f32처럼 uniform<T>나 storage<T> 없이 선언하지 않습니다.
  • resource를 let으로 선언하지 않습니다. 컴파일러는 declare let x: storage<T>를 거부하고, 대신 쓸 declare const 줄을 알려 줍니다.
  • read-only resource에 대입하지 않습니다.
  • resource를 class의 bind group처럼 모델링하지 않습니다.

다음: Shader stages

이 페이지 편집 문제 보고