UNPKG

typegpu

Version:

A thin layer between JS and WebGPU/WGSL that improves development experience and allows for faster iteration.

36 lines (35 loc) 1.69 kB
import { arrayOf } from "./data/array.js"; import { attribute } from "./data/attributes.js"; import { bool, f32, u32 } from "./data/numeric.js"; import { vec3u, vec4f } from "./data/vector.js"; import { $internal } from "./shared/symbols.js"; function defineBuiltin(dataType, value) { return attribute(dataType, { [$internal]: true, type: '@builtin', // oxlint-disable-next-line typescript/no-explicit-any -- it's fine params: [value], }); } export const builtin = { vertexIndex: defineBuiltin(u32, 'vertex_index'), instanceIndex: defineBuiltin(u32, 'instance_index'), clipDistances: defineBuiltin(arrayOf(u32, 8), 'clip_distances'), position: defineBuiltin(vec4f, 'position'), frontFacing: defineBuiltin(bool, 'front_facing'), fragDepth: defineBuiltin(f32, 'frag_depth'), primitiveIndex: defineBuiltin(u32, 'primitive_index'), sampleIndex: defineBuiltin(u32, 'sample_index'), sampleMask: defineBuiltin(u32, 'sample_mask'), localInvocationId: defineBuiltin(vec3u, 'local_invocation_id'), localInvocationIndex: defineBuiltin(u32, 'local_invocation_index'), globalInvocationId: defineBuiltin(vec3u, 'global_invocation_id'), globalInvocationIndex: defineBuiltin(u32, 'global_invocation_index'), workgroupId: defineBuiltin(vec3u, 'workgroup_id'), workgroupIndex: defineBuiltin(u32, 'workgroup_index'), numWorkgroups: defineBuiltin(vec3u, 'num_workgroups'), subgroupInvocationId: defineBuiltin(u32, 'subgroup_invocation_id'), subgroupSize: defineBuiltin(u32, 'subgroup_size'), subgroupId: defineBuiltin(u32, 'subgroup_id'), numSubgroups: defineBuiltin(u32, 'num_subgroups'), };