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
TypeScript
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];
};