Skip to content

Commit 2adce07

Browse files
authored
feat: Add primitive_index, subgroup_id and num_subgroups builtins (#2028)
1 parent 32a55d7 commit 2adce07

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

packages/typegpu/src/builtin.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,17 @@ import { $internal } from './shared/symbols.ts';
2323

2424
export type BuiltinVertexIndex = Decorated<U32, [Builtin<'vertex_index'>]>;
2525
export type BuiltinInstanceIndex = Decorated<U32, [Builtin<'instance_index'>]>;
26-
export type BuiltinPosition = Decorated<Vec4f, [Builtin<'position'>]>;
2726
export type BuiltinClipDistances = Decorated<
2827
WgslArray<U32>,
2928
[Builtin<'clip_distances'>]
3029
>;
30+
export type BuiltinPosition = Decorated<Vec4f, [Builtin<'position'>]>;
3131
export type BuiltinFrontFacing = Decorated<Bool, [Builtin<'front_facing'>]>;
3232
export type BuiltinFragDepth = Decorated<F32, [Builtin<'frag_depth'>]>;
33+
export type BuiltinPrimitiveIndex = Decorated<
34+
U32,
35+
[Builtin<'primitive_index'>]
36+
>;
3337
export type BuiltinSampleIndex = Decorated<U32, [Builtin<'sample_index'>]>;
3438
export type BuiltinSampleMask = Decorated<U32, [Builtin<'sample_mask'>]>;
3539
export type BuiltinLocalInvocationId = Decorated<
@@ -54,6 +58,8 @@ export type BuiltinSubgroupInvocationId = Decorated<
5458
[Builtin<'subgroup_invocation_id'>]
5559
>;
5660
export type BuiltinSubgroupSize = Decorated<U32, [Builtin<'subgroup_size'>]>;
61+
export type BuiltinSubgroupId = Decorated<U32, [Builtin<'subgroup_id'>]>;
62+
export type BuiltinNumSubgroups = Decorated<U32, [Builtin<'num_subgroups'>]>;
5763

5864
function defineBuiltin<T extends Decorated | LooseDecorated>(
5965
dataType: AnyWgslData,
@@ -70,13 +76,14 @@ function defineBuiltin<T extends Decorated | LooseDecorated>(
7076
export const builtin = {
7177
vertexIndex: defineBuiltin<BuiltinVertexIndex>(u32, 'vertex_index'),
7278
instanceIndex: defineBuiltin<BuiltinInstanceIndex>(u32, 'instance_index'),
73-
position: defineBuiltin<BuiltinPosition>(vec4f, 'position'),
7479
clipDistances: defineBuiltin<BuiltinClipDistances>(
7580
arrayOf(u32, 8),
7681
'clip_distances',
7782
),
83+
position: defineBuiltin<BuiltinPosition>(vec4f, 'position'),
7884
frontFacing: defineBuiltin<BuiltinFrontFacing>(bool, 'front_facing'),
7985
fragDepth: defineBuiltin<BuiltinFragDepth>(f32, 'frag_depth'),
86+
primitiveIndex: defineBuiltin<BuiltinPrimitiveIndex>(u32, 'primitive_index'),
8087
sampleIndex: defineBuiltin<BuiltinSampleIndex>(u32, 'sample_index'),
8188
sampleMask: defineBuiltin<BuiltinSampleMask>(u32, 'sample_mask'),
8289
localInvocationId: defineBuiltin<BuiltinLocalInvocationId>(
@@ -98,6 +105,8 @@ export const builtin = {
98105
'subgroup_invocation_id',
99106
),
100107
subgroupSize: defineBuiltin<BuiltinSubgroupSize>(u32, 'subgroup_size'),
108+
subgroupId: defineBuiltin<BuiltinSubgroupId>(u32, 'subgroup_id'),
109+
numSubgroups: defineBuiltin<BuiltinNumSubgroups>(u32, 'num_subgroups'),
101110
} as const;
102111

103112
export type AnyBuiltin = (typeof builtin)[keyof typeof builtin];
@@ -108,12 +117,15 @@ export type AnyComputeBuiltin =
108117
| BuiltinWorkgroupId
109118
| BuiltinNumWorkgroups
110119
| BuiltinSubgroupInvocationId
111-
| BuiltinSubgroupSize;
120+
| BuiltinSubgroupSize
121+
| BuiltinSubgroupId
122+
| BuiltinNumSubgroups;
112123
export type AnyVertexInputBuiltin = BuiltinVertexIndex | BuiltinInstanceIndex;
113124
export type AnyVertexOutputBuiltin = BuiltinClipDistances | BuiltinPosition;
114125
export type AnyFragmentInputBuiltin =
115126
| BuiltinPosition
116127
| BuiltinFrontFacing
128+
| BuiltinPrimitiveIndex
117129
| BuiltinSampleIndex
118130
| BuiltinSampleMask
119131
| BuiltinSubgroupInvocationId

packages/typegpu/src/data/attributes.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,11 @@ import {
6060
export const builtinNames = [
6161
'vertex_index',
6262
'instance_index',
63-
'position',
6463
'clip_distances',
64+
'position',
6565
'front_facing',
6666
'frag_depth',
67+
'primitive_index',
6768
'sample_index',
6869
'sample_mask',
6970
'fragment',
@@ -74,6 +75,8 @@ export const builtinNames = [
7475
'num_workgroups',
7576
'subgroup_invocation_id',
7677
'subgroup_size',
78+
'subgroup_id',
79+
'num_subgroups',
7780
] as const;
7881

7982
export type BuiltinName = (typeof builtinNames)[number];

0 commit comments

Comments
 (0)