UNPKG

typegpu

Version:

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

53 lines (52 loc) 3.81 kB
import type { BaseData, Bool, Builtin, Decorated, F32, U32, Vec3u, Vec4f, WgslArray } from './data/wgslTypes.ts'; export type BuiltinVertexIndex = Decorated<U32, [Builtin<'vertex_index'>]>; export type BuiltinInstanceIndex = Decorated<U32, [Builtin<'instance_index'>]>; export type BuiltinClipDistances = Decorated<WgslArray<U32>, [Builtin<'clip_distances'>]>; export type BuiltinPosition = Decorated<Vec4f, [Builtin<'position'>]>; export type BuiltinFrontFacing = Decorated<Bool, [Builtin<'front_facing'>]>; export type BuiltinFragDepth = Decorated<F32, [Builtin<'frag_depth'>]>; export type BuiltinPrimitiveIndex = Decorated<U32, [Builtin<'primitive_index'>]>; export type BuiltinSampleIndex = Decorated<U32, [Builtin<'sample_index'>]>; export type BuiltinSampleMask = Decorated<U32, [Builtin<'sample_mask'>]>; export type BuiltinLocalInvocationId = Decorated<Vec3u, [Builtin<'local_invocation_id'>]>; export type BuiltinLocalInvocationIndex = Decorated<U32, [Builtin<'local_invocation_index'>]>; export type BuiltinGlobalInvocationId = Decorated<Vec3u, [Builtin<'global_invocation_id'>]>; export type BuiltinGlobalInvocationIndex = Decorated<U32, [Builtin<'global_invocation_index'>]>; export type BuiltinWorkgroupId = Decorated<Vec3u, [Builtin<'workgroup_id'>]>; export type BuiltinWorkgroupIndex = Decorated<U32, [Builtin<'workgroup_index'>]>; export type BuiltinNumWorkgroups = Decorated<Vec3u, [Builtin<'num_workgroups'>]>; export type BuiltinSubgroupInvocationId = Decorated<U32, [Builtin<'subgroup_invocation_id'>]>; export type BuiltinSubgroupSize = Decorated<U32, [Builtin<'subgroup_size'>]>; export type BuiltinSubgroupId = Decorated<U32, [Builtin<'subgroup_id'>]>; export type BuiltinNumSubgroups = Decorated<U32, [Builtin<'num_subgroups'>]>; export declare const builtin: { readonly vertexIndex: BuiltinVertexIndex; readonly instanceIndex: BuiltinInstanceIndex; readonly clipDistances: BuiltinClipDistances; readonly position: BuiltinPosition; readonly frontFacing: BuiltinFrontFacing; readonly fragDepth: BuiltinFragDepth; readonly primitiveIndex: BuiltinPrimitiveIndex; readonly sampleIndex: BuiltinSampleIndex; readonly sampleMask: BuiltinSampleMask; readonly localInvocationId: BuiltinLocalInvocationId; readonly localInvocationIndex: BuiltinLocalInvocationIndex; readonly globalInvocationId: BuiltinGlobalInvocationId; readonly globalInvocationIndex: BuiltinGlobalInvocationIndex; readonly workgroupId: BuiltinWorkgroupId; readonly workgroupIndex: BuiltinWorkgroupIndex; readonly numWorkgroups: BuiltinNumWorkgroups; readonly subgroupInvocationId: BuiltinSubgroupInvocationId; readonly subgroupSize: BuiltinSubgroupSize; readonly subgroupId: BuiltinSubgroupId; readonly numSubgroups: BuiltinNumSubgroups; }; export type AnyBuiltin = (typeof builtin)[keyof typeof builtin]; export type AnyComputeBuiltin = BuiltinLocalInvocationId | BuiltinLocalInvocationIndex | BuiltinGlobalInvocationId | BuiltinGlobalInvocationIndex | BuiltinWorkgroupId | BuiltinWorkgroupIndex | BuiltinNumWorkgroups | BuiltinSubgroupInvocationId | BuiltinSubgroupSize | BuiltinSubgroupId | BuiltinNumSubgroups; export type AnyVertexInputBuiltin = BuiltinVertexIndex | BuiltinInstanceIndex; export type AnyVertexOutputBuiltin = BuiltinClipDistances | BuiltinPosition; export type AnyFragmentInputBuiltin = BuiltinPosition | BuiltinFrontFacing | BuiltinPrimitiveIndex | BuiltinSampleIndex | BuiltinSampleMask | BuiltinSubgroupInvocationId | BuiltinSubgroupSize; export type AnyFragmentOutputBuiltin = BuiltinFragDepth | BuiltinSampleMask; export type OmitBuiltins<S> = S extends AnyBuiltin ? never : S extends BaseData ? S : { [Key in keyof S as S[Key] extends AnyBuiltin ? never : Key extends `$${string}` ? never : Key]: S[Key]; };