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