diff --git a/packages/typegpu/src/builtin.ts b/packages/typegpu/src/builtin.ts index d91541c688..fd88985b87 100644 --- a/packages/typegpu/src/builtin.ts +++ b/packages/typegpu/src/builtin.ts @@ -23,13 +23,17 @@ import { $internal } from './shared/symbols.ts'; export type BuiltinVertexIndex = Decorated]>; export type BuiltinInstanceIndex = Decorated]>; -export type BuiltinPosition = Decorated]>; export type BuiltinClipDistances = Decorated< WgslArray, [Builtin<'clip_distances'>] >; +export type BuiltinPosition = Decorated]>; export type BuiltinFrontFacing = Decorated]>; export type BuiltinFragDepth = Decorated]>; +export type BuiltinPrimitiveIndex = Decorated< + U32, + [Builtin<'primitive_index'>] +>; export type BuiltinSampleIndex = Decorated]>; export type BuiltinSampleMask = Decorated]>; export type BuiltinLocalInvocationId = Decorated< @@ -54,6 +58,8 @@ export type BuiltinSubgroupInvocationId = Decorated< [Builtin<'subgroup_invocation_id'>] >; export type BuiltinSubgroupSize = Decorated]>; +export type BuiltinSubgroupId = Decorated]>; +export type BuiltinNumSubgroups = Decorated]>; function defineBuiltin( dataType: AnyWgslData, @@ -70,13 +76,14 @@ function defineBuiltin( export const builtin = { vertexIndex: defineBuiltin(u32, 'vertex_index'), instanceIndex: defineBuiltin(u32, 'instance_index'), - position: defineBuiltin(vec4f, 'position'), 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( @@ -98,6 +105,8 @@ export const builtin = { 'subgroup_invocation_id', ), subgroupSize: defineBuiltin(u32, 'subgroup_size'), + subgroupId: defineBuiltin(u32, 'subgroup_id'), + numSubgroups: defineBuiltin(u32, 'num_subgroups'), } as const; export type AnyBuiltin = (typeof builtin)[keyof typeof builtin]; @@ -108,12 +117,15 @@ export type AnyComputeBuiltin = | BuiltinWorkgroupId | BuiltinNumWorkgroups | BuiltinSubgroupInvocationId - | BuiltinSubgroupSize; + | BuiltinSubgroupSize + | BuiltinSubgroupId + | BuiltinNumSubgroups; export type AnyVertexInputBuiltin = BuiltinVertexIndex | BuiltinInstanceIndex; export type AnyVertexOutputBuiltin = BuiltinClipDistances | BuiltinPosition; export type AnyFragmentInputBuiltin = | BuiltinPosition | BuiltinFrontFacing + | BuiltinPrimitiveIndex | BuiltinSampleIndex | BuiltinSampleMask | BuiltinSubgroupInvocationId diff --git a/packages/typegpu/src/data/attributes.ts b/packages/typegpu/src/data/attributes.ts index 4c9f87fb98..ef4b3fa39f 100644 --- a/packages/typegpu/src/data/attributes.ts +++ b/packages/typegpu/src/data/attributes.ts @@ -60,10 +60,11 @@ import { export const builtinNames = [ 'vertex_index', 'instance_index', - 'position', 'clip_distances', + 'position', 'front_facing', 'frag_depth', + 'primitive_index', 'sample_index', 'sample_mask', 'fragment', @@ -74,6 +75,8 @@ export const builtinNames = [ 'num_workgroups', 'subgroup_invocation_id', 'subgroup_size', + 'subgroup_id', + 'num_subgroups', ] as const; export type BuiltinName = (typeof builtinNames)[number];