셰이더 스테이지
이 페이지에서

Shader stages: GPU 실행 지점을 명시하기

TypeShade의 entry point는 class가 아니라 top-level exported function입니다. decorator가 함수의 shader stage와 필요한 metadata를 표시합니다.

1. TypeScript 함수와 모듈에서 출발하기

TypeScript에서 export function은 모듈의 공개 함수입니다. TypeShade에서는 여기에 stage decorator를 더하면 pipeline entry point라는 GPU 의미가 생깁니다. decorator가 없는 함수는 재사용 가능한 helper로 남습니다.

function addBias(value: f32): f32 {
return value + 0.5
}
@compute([64, 1, 1])
export function paint(@builtin("global_invocation_id") gid: vec3u) {
pixels[gid.x] = addBias(camera.pos.x)
}

2. Compute

@compute는 workgroup 크기를 함께 표현합니다. global_invocation_id 같은 compute builtin은 암시적 전역 변수가 아니라 명시적인 함수 parameter로 받습니다.

3. Vertex와 fragment

@vertex와 @fragment는 그래픽스 pipeline의 entry point를 표현합니다. 입력과 출력은 TypeShade value type과 명시적인 builtin parameter로 선언합니다.

@vertex
export function vs(
@builtin("vertex_index") vid: u32,
vin: VsIn
): vec4 {
return camera.view * vec4(vin.position, 1)
}
@fragment
export function fs(): vec4 {
return vec4(1, 0, 0, 1)
}

4. Helper function

decorator가 없는 함수는 entry가 아니라 helper입니다. entry point를 class method로 만들거나 this를 pipeline 객체로 취급하지 않습니다.

function saturate(x: f32): f32 {
return clamp(x, 0.0, 1.0)
}

언어 개요로 돌아가기

이 페이지 편집 문제 보고