typegpu 0.3.1 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. package/LICENSE.md +1 -1
  2. package/chunk-2CMWQRQC.cjs +2 -0
  3. package/chunk-2CMWQRQC.cjs.map +1 -0
  4. package/chunk-2ZAQFPSX.js +1266 -0
  5. package/chunk-2ZAQFPSX.js.map +1 -0
  6. package/chunk-35UVS2JJ.cjs +591 -0
  7. package/chunk-35UVS2JJ.cjs.map +1 -0
  8. package/chunk-A2QB4MSZ.js +4 -0
  9. package/{chunk-47YH5LQ7.cjs.map → chunk-A2QB4MSZ.js.map} +1 -1
  10. package/chunk-CMYXKKUP.cjs +1266 -0
  11. package/chunk-CMYXKKUP.cjs.map +1 -0
  12. package/chunk-DDEF2Y4S.js +591 -0
  13. package/chunk-DDEF2Y4S.js.map +1 -0
  14. package/chunk-KYBPSQX5.js +2 -0
  15. package/chunk-KYBPSQX5.js.map +1 -0
  16. package/chunk-VRYGOFCW.cjs +4 -0
  17. package/chunk-VRYGOFCW.cjs.map +1 -0
  18. package/data/index.cjs +192 -1
  19. package/data/index.d.cts +2 -2
  20. package/data/index.d.ts +2 -2
  21. package/data/index.js +192 -1
  22. package/{index-CopjPGJg.d.cts → index-CuzbyKXg.d.cts} +5 -3
  23. package/{index-BM7ZTN7E.d.ts → index-FHKuURMs.d.ts} +5 -3
  24. package/index.cjs +4269 -14
  25. package/index.cjs.map +1 -1
  26. package/index.d.cts +80 -11
  27. package/index.d.ts +80 -11
  28. package/index.js +4269 -14
  29. package/index.js.map +1 -1
  30. package/package.json +1 -1
  31. package/std/index.cjs +490 -1
  32. package/std/index.cjs.map +1 -1
  33. package/std/index.d.cts +1 -1
  34. package/std/index.d.ts +1 -1
  35. package/std/index.js +490 -1
  36. package/std/index.js.map +1 -1
  37. package/{vector-BSez01sn.d.cts → vector-CDD2FV2v.d.cts} +19 -3
  38. package/{vector-BSez01sn.d.ts → vector-CDD2FV2v.d.ts} +19 -3
  39. package/chunk-47YH5LQ7.cjs +0 -4
  40. package/chunk-BGPVBIFN.js +0 -4
  41. package/chunk-BGPVBIFN.js.map +0 -1
  42. package/chunk-MCUGRE3S.js +0 -2
  43. package/chunk-MCUGRE3S.js.map +0 -1
  44. package/chunk-OHFPIYFY.cjs +0 -2
  45. package/chunk-OHFPIYFY.cjs.map +0 -1
@@ -0,0 +1,1266 @@
1
+ import {
2
+ __publicField,
3
+ inGPUMode,
4
+ vec2f,
5
+ vec2i,
6
+ vec2u,
7
+ vec3f,
8
+ vec3i,
9
+ vec3u,
10
+ vec4f,
11
+ vec4i,
12
+ vec4u
13
+ } from "./chunk-DDEF2Y4S.js";
14
+
15
+ // src/data/numeric.ts
16
+ import bin from "typed-binary";
17
+ var bool = {
18
+ type: "bool"
19
+ };
20
+ var u32Cast = (v) => {
21
+ if (inGPUMode()) {
22
+ return `u32(${v})`;
23
+ }
24
+ if (typeof v === "boolean") {
25
+ return v ? 1 : 0;
26
+ }
27
+ if (Number.isInteger(v)) {
28
+ if (v < 0 || v > 4294967295) {
29
+ console.warn(`u32 value ${v} overflowed`);
30
+ }
31
+ const value = v & 4294967295;
32
+ return value >>> 0;
33
+ }
34
+ return Math.max(0, Math.min(4294967295, Math.floor(v)));
35
+ };
36
+ var u32 = Object.assign(u32Cast, {
37
+ type: "u32"
38
+ });
39
+ var i32Cast = (v) => {
40
+ if (inGPUMode()) {
41
+ return `i32(${v})`;
42
+ }
43
+ if (typeof v === "boolean") {
44
+ return v ? 1 : 0;
45
+ }
46
+ if (Number.isInteger(v)) {
47
+ if (v < -2147483648 || v > 2147483647) {
48
+ console.warn(`i32 value ${v} overflowed`);
49
+ }
50
+ const value2 = v | 0;
51
+ return value2 & 4294967295;
52
+ }
53
+ const value = v < 0 ? Math.ceil(v) : Math.floor(v);
54
+ return Math.max(-2147483648, Math.min(2147483647, value));
55
+ };
56
+ var i32 = Object.assign(i32Cast, {
57
+ type: "i32"
58
+ });
59
+ var f32Cast = (v) => {
60
+ if (inGPUMode()) {
61
+ return `f32(${v})`;
62
+ }
63
+ if (typeof v === "boolean") {
64
+ return v ? 1 : 0;
65
+ }
66
+ const arr = new Float32Array(1);
67
+ arr[0] = v;
68
+ return arr[0];
69
+ };
70
+ var f32 = Object.assign(f32Cast, {
71
+ type: "f32"
72
+ });
73
+ var f16Cast = (v) => {
74
+ if (inGPUMode()) {
75
+ return `f16(${v})`;
76
+ }
77
+ if (typeof v === "boolean") {
78
+ return v ? 1 : 0;
79
+ }
80
+ const arr = new ArrayBuffer(2);
81
+ bin.f16.write(new bin.BufferWriter(arr), v);
82
+ return bin.f16.read(new bin.BufferReader(arr));
83
+ };
84
+ var f16 = Object.assign(f16Cast, {
85
+ type: "f16"
86
+ });
87
+
88
+ // src/data/wgslTypes.ts
89
+ var wgslTypeLiterals = [
90
+ "bool",
91
+ "f32",
92
+ "f16",
93
+ "i32",
94
+ "u32",
95
+ "vec2f",
96
+ "vec2h",
97
+ "vec2i",
98
+ "vec2u",
99
+ "vec3f",
100
+ "vec3h",
101
+ "vec3i",
102
+ "vec3u",
103
+ "vec4f",
104
+ "vec4h",
105
+ "vec4i",
106
+ "vec4u",
107
+ "mat2x2f",
108
+ "mat3x3f",
109
+ "mat4x4f",
110
+ "struct",
111
+ "array",
112
+ "ptrFn",
113
+ "atomic",
114
+ "decorated"
115
+ ];
116
+ function isWgslData(value) {
117
+ return wgslTypeLiterals.includes(value == null ? void 0 : value.type);
118
+ }
119
+ function isWgslArray(schema) {
120
+ return (schema == null ? void 0 : schema.type) === "array";
121
+ }
122
+ function isWgslStruct(schema) {
123
+ return (schema == null ? void 0 : schema.type) === "struct";
124
+ }
125
+ function isPtrFn(schema) {
126
+ return (schema == null ? void 0 : schema.type) === "ptrFn";
127
+ }
128
+ function isAtomic(schema) {
129
+ return (schema == null ? void 0 : schema.type) === "atomic";
130
+ }
131
+ function isAlignAttrib(value) {
132
+ return (value == null ? void 0 : value.type) === "@align";
133
+ }
134
+ function isSizeAttrib(value) {
135
+ return (value == null ? void 0 : value.type) === "@size";
136
+ }
137
+ function isLocationAttrib(value) {
138
+ return (value == null ? void 0 : value.type) === "@location";
139
+ }
140
+ function isInterpolateAttrib(value) {
141
+ return (value == null ? void 0 : value.type) === "@interpolate";
142
+ }
143
+ function isBuiltinAttrib(value) {
144
+ return (value == null ? void 0 : value.type) === "@builtin";
145
+ }
146
+ function isDecorated(value) {
147
+ return (value == null ? void 0 : value.type) === "decorated";
148
+ }
149
+
150
+ // src/data/struct.ts
151
+ var struct = (props) => {
152
+ const struct2 = (props2) => props2;
153
+ Object.setPrototypeOf(struct2, TgpuStructImpl);
154
+ struct2.propTypes = props;
155
+ return struct2;
156
+ };
157
+ var TgpuStructImpl = {
158
+ type: "struct",
159
+ _label: void 0,
160
+ get label() {
161
+ return this._label;
162
+ },
163
+ $name(label) {
164
+ this._label = label;
165
+ return this;
166
+ },
167
+ toString() {
168
+ var _a;
169
+ return `struct:${(_a = this.label) != null ? _a : "<unnamed>"}`;
170
+ }
171
+ };
172
+
173
+ // src/mathUtils.ts
174
+ var roundUp = (value, modulo) => {
175
+ const bitMask = modulo - 1;
176
+ const invBitMask = ~bitMask;
177
+ return (value & bitMask) === 0 ? value : (value & invBitMask) + modulo;
178
+ };
179
+
180
+ // src/shared/vertexFormat.ts
181
+ var vertexFormats = [
182
+ "uint8",
183
+ "uint8x2",
184
+ "uint8x4",
185
+ "sint8",
186
+ "sint8x2",
187
+ "sint8x4",
188
+ "unorm8",
189
+ "unorm8x2",
190
+ "unorm8x4",
191
+ "snorm8",
192
+ "snorm8x2",
193
+ "snorm8x4",
194
+ "uint16",
195
+ "uint16x2",
196
+ "uint16x4",
197
+ "sint16",
198
+ "sint16x2",
199
+ "sint16x4",
200
+ "unorm16",
201
+ "unorm16x2",
202
+ "unorm16x4",
203
+ "snorm16",
204
+ "snorm16x2",
205
+ "snorm16x4",
206
+ "float16",
207
+ "float16x2",
208
+ "float16x4",
209
+ "float32",
210
+ "float32x2",
211
+ "float32x3",
212
+ "float32x4",
213
+ "uint32",
214
+ "uint32x2",
215
+ "uint32x3",
216
+ "uint32x4",
217
+ "sint32",
218
+ "sint32x2",
219
+ "sint32x3",
220
+ "sint32x4",
221
+ "unorm10-10-10-2",
222
+ "unorm8x4-bgra"
223
+ ];
224
+ var kindToDefaultFormatMap = {
225
+ f32: "float32",
226
+ vec2f: "float32x2",
227
+ vec3f: "float32x3",
228
+ vec4f: "float32x4",
229
+ f16: "float16",
230
+ vec2h: "float16x2",
231
+ // vec3h has no direct equivalent in the spec
232
+ vec4h: "float16x4",
233
+ u32: "uint32",
234
+ vec2u: "uint32x2",
235
+ vec3u: "uint32x3",
236
+ vec4u: "uint32x4",
237
+ i32: "sint32",
238
+ vec2i: "sint32x2",
239
+ vec3i: "sint32x3",
240
+ vec4i: "sint32x4"
241
+ };
242
+
243
+ // src/data/dataTypes.ts
244
+ var looseTypeLiterals = [
245
+ "unstruct",
246
+ "disarray",
247
+ "loose-decorated",
248
+ ...vertexFormats
249
+ ];
250
+ function isLooseData(data) {
251
+ return looseTypeLiterals.includes(data == null ? void 0 : data.type);
252
+ }
253
+ function isDisarray(schema) {
254
+ return (schema == null ? void 0 : schema.type) === "disarray";
255
+ }
256
+ function isUnstruct(schema) {
257
+ return (schema == null ? void 0 : schema.type) === "unstruct";
258
+ }
259
+ function isLooseDecorated(value) {
260
+ return (value == null ? void 0 : value.type) === "loose-decorated";
261
+ }
262
+ function getCustomAlignment(data) {
263
+ var _a, _b;
264
+ return (_b = (_a = data.attribs) == null ? void 0 : _a.find(
265
+ isAlignAttrib
266
+ )) == null ? void 0 : _b.value;
267
+ }
268
+ function getCustomSize(data) {
269
+ var _a, _b;
270
+ return (_b = (_a = data.attribs) == null ? void 0 : _a.find(
271
+ isSizeAttrib
272
+ )) == null ? void 0 : _b.value;
273
+ }
274
+ function getCustomLocation(data) {
275
+ var _a, _b;
276
+ return (_b = (_a = data.attribs) == null ? void 0 : _a.find(
277
+ isLocationAttrib
278
+ )) == null ? void 0 : _b.value;
279
+ }
280
+ function isData(value) {
281
+ return isWgslData(value) || isLooseData(value);
282
+ }
283
+
284
+ // src/data/vertexFormatData.ts
285
+ var TgpuVertexFormatDataImpl = class {
286
+ constructor(type) {
287
+ this.type = type;
288
+ /** Used as a type-token for the `Infer<T>` functionality. */
289
+ __publicField(this, "~repr");
290
+ }
291
+ };
292
+ var formatToWGSLType = {
293
+ uint8: u32,
294
+ uint8x2: vec2u,
295
+ uint8x4: vec4u,
296
+ sint8: i32,
297
+ sint8x2: vec2i,
298
+ sint8x4: vec4i,
299
+ unorm8: f32,
300
+ unorm8x2: vec2f,
301
+ unorm8x4: vec4f,
302
+ snorm8: f32,
303
+ snorm8x2: vec2f,
304
+ snorm8x4: vec4f,
305
+ uint16: u32,
306
+ uint16x2: vec2u,
307
+ uint16x4: vec4u,
308
+ sint16: i32,
309
+ sint16x2: vec2i,
310
+ sint16x4: vec4i,
311
+ unorm16: f32,
312
+ unorm16x2: vec2f,
313
+ unorm16x4: vec4f,
314
+ snorm16: f32,
315
+ snorm16x2: vec2f,
316
+ snorm16x4: vec4f,
317
+ float16: f32,
318
+ float16x2: vec2f,
319
+ float16x4: vec4f,
320
+ float32: f32,
321
+ float32x2: vec2f,
322
+ float32x3: vec3f,
323
+ float32x4: vec4f,
324
+ uint32: u32,
325
+ uint32x2: vec2u,
326
+ uint32x3: vec3u,
327
+ uint32x4: vec4u,
328
+ sint32: i32,
329
+ sint32x2: vec2i,
330
+ sint32x3: vec3i,
331
+ sint32x4: vec4i,
332
+ "unorm10-10-10-2": vec4f,
333
+ "unorm8x4-bgra": vec4f
334
+ };
335
+ var packedFormats = Object.keys(formatToWGSLType);
336
+ var uint8 = new TgpuVertexFormatDataImpl("uint8");
337
+ var uint8x2 = new TgpuVertexFormatDataImpl("uint8x2");
338
+ var uint8x4 = new TgpuVertexFormatDataImpl("uint8x4");
339
+ var sint8 = new TgpuVertexFormatDataImpl("sint8");
340
+ var sint8x2 = new TgpuVertexFormatDataImpl("sint8x2");
341
+ var sint8x4 = new TgpuVertexFormatDataImpl("sint8x4");
342
+ var unorm8 = new TgpuVertexFormatDataImpl("unorm8");
343
+ var unorm8x2 = new TgpuVertexFormatDataImpl("unorm8x2");
344
+ var unorm8x4 = new TgpuVertexFormatDataImpl("unorm8x4");
345
+ var snorm8 = new TgpuVertexFormatDataImpl("snorm8");
346
+ var snorm8x2 = new TgpuVertexFormatDataImpl("snorm8x2");
347
+ var snorm8x4 = new TgpuVertexFormatDataImpl("snorm8x4");
348
+ var uint16 = new TgpuVertexFormatDataImpl("uint16");
349
+ var uint16x2 = new TgpuVertexFormatDataImpl("uint16x2");
350
+ var uint16x4 = new TgpuVertexFormatDataImpl("uint16x4");
351
+ var sint16 = new TgpuVertexFormatDataImpl("sint16");
352
+ var sint16x2 = new TgpuVertexFormatDataImpl("sint16x2");
353
+ var sint16x4 = new TgpuVertexFormatDataImpl("sint16x4");
354
+ var unorm16 = new TgpuVertexFormatDataImpl("unorm16");
355
+ var unorm16x2 = new TgpuVertexFormatDataImpl("unorm16x2");
356
+ var unorm16x4 = new TgpuVertexFormatDataImpl("unorm16x4");
357
+ var snorm16 = new TgpuVertexFormatDataImpl("snorm16");
358
+ var snorm16x2 = new TgpuVertexFormatDataImpl("snorm16x2");
359
+ var snorm16x4 = new TgpuVertexFormatDataImpl("snorm16x4");
360
+ var float16 = new TgpuVertexFormatDataImpl("float16");
361
+ var float16x2 = new TgpuVertexFormatDataImpl("float16x2");
362
+ var float16x4 = new TgpuVertexFormatDataImpl("float16x4");
363
+ var float32 = new TgpuVertexFormatDataImpl("float32");
364
+ var float32x2 = new TgpuVertexFormatDataImpl("float32x2");
365
+ var float32x3 = new TgpuVertexFormatDataImpl("float32x3");
366
+ var float32x4 = new TgpuVertexFormatDataImpl("float32x4");
367
+ var uint32 = new TgpuVertexFormatDataImpl("uint32");
368
+ var uint32x2 = new TgpuVertexFormatDataImpl("uint32x2");
369
+ var uint32x3 = new TgpuVertexFormatDataImpl("uint32x3");
370
+ var uint32x4 = new TgpuVertexFormatDataImpl("uint32x4");
371
+ var sint32 = new TgpuVertexFormatDataImpl("sint32");
372
+ var sint32x2 = new TgpuVertexFormatDataImpl("sint32x2");
373
+ var sint32x3 = new TgpuVertexFormatDataImpl("sint32x3");
374
+ var sint32x4 = new TgpuVertexFormatDataImpl("sint32x4");
375
+ var unorm10_10_10_2 = new TgpuVertexFormatDataImpl(
376
+ "unorm10-10-10-2"
377
+ );
378
+ var unorm8x4_bgra = new TgpuVertexFormatDataImpl(
379
+ "unorm8x4-bgra"
380
+ );
381
+
382
+ // src/data/alignmentOf.ts
383
+ var knownAlignmentMap = {
384
+ bool: 4,
385
+ f32: 4,
386
+ f16: 2,
387
+ i32: 4,
388
+ u32: 4,
389
+ vec2f: 8,
390
+ vec2h: 4,
391
+ vec2i: 8,
392
+ vec2u: 8,
393
+ vec3f: 16,
394
+ vec3h: 8,
395
+ vec3i: 16,
396
+ vec3u: 16,
397
+ vec4f: 16,
398
+ vec4h: 8,
399
+ vec4i: 16,
400
+ vec4u: 16,
401
+ mat2x2f: 8,
402
+ mat3x3f: 16,
403
+ mat4x4f: 16
404
+ };
405
+ function computeAlignment(data) {
406
+ var _a, _b, _c;
407
+ const dataType = data == null ? void 0 : data.type;
408
+ const knownAlignment = knownAlignmentMap[dataType];
409
+ if (knownAlignment !== void 0) {
410
+ return knownAlignment;
411
+ }
412
+ if (isWgslStruct(data)) {
413
+ return Object.values(data.propTypes).map(alignmentOf).reduce((a, b) => a > b ? a : b);
414
+ }
415
+ if (isWgslArray(data)) {
416
+ return alignmentOf(data.elementType);
417
+ }
418
+ if (isUnstruct(data)) {
419
+ const firstProp = Object.values(data.propTypes)[0];
420
+ return firstProp ? (_a = getCustomAlignment(firstProp)) != null ? _a : 1 : 1;
421
+ }
422
+ if (isDisarray(data)) {
423
+ return (_b = getCustomAlignment(data.elementType)) != null ? _b : 1;
424
+ }
425
+ if (isDecorated(data) || isLooseDecorated(data)) {
426
+ return (_c = getCustomAlignment(data)) != null ? _c : alignmentOf(data.inner);
427
+ }
428
+ if (packedFormats.includes(dataType)) {
429
+ return 1;
430
+ }
431
+ throw new Error(
432
+ `Cannot determine alignment of data: ${JSON.stringify(data)}`
433
+ );
434
+ }
435
+ function computeCustomAlignment(data) {
436
+ var _a, _b;
437
+ if (isUnstruct(data)) {
438
+ const firstProp = Object.values(data.propTypes)[0];
439
+ return firstProp ? customAlignmentOf(firstProp) : 1;
440
+ }
441
+ if (isDisarray(data)) {
442
+ return customAlignmentOf(data.elementType);
443
+ }
444
+ if (isLooseDecorated(data)) {
445
+ return (_a = getCustomAlignment(data)) != null ? _a : customAlignmentOf(data.inner);
446
+ }
447
+ return (_b = getCustomAlignment(data)) != null ? _b : 1;
448
+ }
449
+ var cachedAlignments = /* @__PURE__ */ new WeakMap();
450
+ var cachedCustomAlignments = /* @__PURE__ */ new WeakMap();
451
+ function alignmentOf(data) {
452
+ let alignment = cachedAlignments.get(data);
453
+ if (alignment === void 0) {
454
+ alignment = computeAlignment(data);
455
+ cachedAlignments.set(data, alignment);
456
+ }
457
+ return alignment;
458
+ }
459
+ function customAlignmentOf(data) {
460
+ let alignment = cachedCustomAlignments.get(data);
461
+ if (alignment === void 0) {
462
+ alignment = computeCustomAlignment(data);
463
+ cachedCustomAlignments.set(data, alignment);
464
+ }
465
+ return alignment;
466
+ }
467
+ function PUBLIC_alignmentOf(schema) {
468
+ return alignmentOf(schema);
469
+ }
470
+
471
+ // src/data/sizeOf.ts
472
+ var knownSizesMap = {
473
+ bool: 4,
474
+ f32: 4,
475
+ f16: 2,
476
+ i32: 4,
477
+ u32: 4,
478
+ vec2f: 8,
479
+ vec2h: 4,
480
+ vec2i: 8,
481
+ vec2u: 8,
482
+ vec3f: 12,
483
+ vec3h: 6,
484
+ vec3i: 12,
485
+ vec3u: 12,
486
+ vec4f: 16,
487
+ vec4h: 8,
488
+ vec4i: 16,
489
+ vec4u: 16,
490
+ mat2x2f: 16,
491
+ mat3x3f: 48,
492
+ mat4x4f: 64,
493
+ uint8: 1,
494
+ uint8x2: 2,
495
+ uint8x4: 4,
496
+ sint8: 1,
497
+ sint8x2: 2,
498
+ sint8x4: 4,
499
+ unorm8: 1,
500
+ unorm8x2: 2,
501
+ unorm8x4: 4,
502
+ snorm8: 1,
503
+ snorm8x2: 2,
504
+ snorm8x4: 4,
505
+ uint16: 2,
506
+ uint16x2: 4,
507
+ uint16x4: 8,
508
+ sint16: 2,
509
+ sint16x2: 4,
510
+ sint16x4: 8,
511
+ unorm16: 2,
512
+ unorm16x2: 4,
513
+ unorm16x4: 8,
514
+ snorm16: 2,
515
+ snorm16x2: 4,
516
+ snorm16x4: 8,
517
+ float16: 2,
518
+ float16x2: 4,
519
+ float16x4: 8,
520
+ float32: 4,
521
+ float32x2: 8,
522
+ float32x3: 12,
523
+ float32x4: 16,
524
+ uint32: 4,
525
+ uint32x2: 8,
526
+ uint32x3: 12,
527
+ uint32x4: 16,
528
+ sint32: 4,
529
+ sint32x2: 8,
530
+ sint32x3: 12,
531
+ sint32x4: 16,
532
+ "unorm10-10-10-2": 4,
533
+ "unorm8x4-bgra": 4
534
+ };
535
+ function sizeOfStruct(struct2) {
536
+ let size2 = 0;
537
+ for (const property of Object.values(struct2.propTypes)) {
538
+ if (Number.isNaN(size2)) {
539
+ throw new Error("Only the last property of a struct can be unbounded");
540
+ }
541
+ size2 = roundUp(size2, alignmentOf(property));
542
+ size2 += sizeOf(property);
543
+ if (Number.isNaN(size2) && property.type !== "array") {
544
+ throw new Error("Cannot nest unbounded struct within another struct");
545
+ }
546
+ }
547
+ return roundUp(size2, alignmentOf(struct2));
548
+ }
549
+ function sizeOfUnstruct(data) {
550
+ let size2 = 0;
551
+ for (const property of Object.values(data.propTypes)) {
552
+ const alignment = customAlignmentOf(property);
553
+ size2 = roundUp(size2, alignment);
554
+ size2 += sizeOf(property);
555
+ }
556
+ return size2;
557
+ }
558
+ function computeSize(data) {
559
+ var _a;
560
+ const knownSize = knownSizesMap[data == null ? void 0 : data.type];
561
+ if (knownSize !== void 0) {
562
+ return knownSize;
563
+ }
564
+ if (isWgslStruct(data)) {
565
+ return sizeOfStruct(data);
566
+ }
567
+ if (isUnstruct(data)) {
568
+ return sizeOfUnstruct(data);
569
+ }
570
+ if (isWgslArray(data)) {
571
+ if (data.elementCount === 0) {
572
+ return Number.NaN;
573
+ }
574
+ const alignment = alignmentOf(data.elementType);
575
+ const stride = roundUp(sizeOf(data.elementType), alignment);
576
+ return stride * data.elementCount;
577
+ }
578
+ if (isDisarray(data)) {
579
+ const alignment = customAlignmentOf(data.elementType);
580
+ const stride = roundUp(sizeOf(data.elementType), alignment);
581
+ return stride * data.elementCount;
582
+ }
583
+ if (isDecorated(data) || isLooseDecorated(data)) {
584
+ return (_a = getCustomSize(data)) != null ? _a : sizeOf(data.inner);
585
+ }
586
+ throw new Error(`Cannot determine size of data: ${data}`);
587
+ }
588
+ var cachedSizes = /* @__PURE__ */ new WeakMap();
589
+ function sizeOf(schema) {
590
+ let size2 = cachedSizes.get(schema);
591
+ if (size2 === void 0) {
592
+ size2 = computeSize(schema);
593
+ cachedSizes.set(schema, size2);
594
+ }
595
+ return size2;
596
+ }
597
+ function PUBLIC_sizeOf(schema) {
598
+ return sizeOf(schema);
599
+ }
600
+
601
+ // src/data/array.ts
602
+ var arrayOf = (elementType, elementCount) => new TgpuArrayImpl(elementType, elementCount);
603
+ var TgpuArrayImpl = class {
604
+ constructor(elementType, elementCount) {
605
+ this.elementType = elementType;
606
+ this.elementCount = elementCount;
607
+ __publicField(this, "type", "array");
608
+ /** Type-token, not available at runtime */
609
+ __publicField(this, "~repr");
610
+ /** Type-token, not available at runtime */
611
+ __publicField(this, "~exotic");
612
+ if (Number.isNaN(sizeOf(elementType))) {
613
+ throw new Error("Cannot nest runtime sized arrays.");
614
+ }
615
+ }
616
+ toString() {
617
+ return `arrayOf(${this.elementType})`;
618
+ }
619
+ };
620
+
621
+ // src/data/ptr.ts
622
+ function ptrFn(inner) {
623
+ return {
624
+ type: "ptrFn",
625
+ inner
626
+ };
627
+ }
628
+
629
+ // src/data/disarray.ts
630
+ var disarrayOf = (elementType, count) => new DisarrayImpl(elementType, count);
631
+ var DisarrayImpl = class {
632
+ constructor(elementType, elementCount) {
633
+ this.elementType = elementType;
634
+ this.elementCount = elementCount;
635
+ __publicField(this, "type", "disarray");
636
+ /** Type-token, not available at runtime */
637
+ __publicField(this, "~repr");
638
+ }
639
+ };
640
+
641
+ // src/data/unstruct.ts
642
+ var unstruct = (properties) => new UnstructImpl(properties);
643
+ var UnstructImpl = class {
644
+ constructor(propTypes) {
645
+ this.propTypes = propTypes;
646
+ __publicField(this, "type", "unstruct");
647
+ /** Type-token, not available at runtime */
648
+ __publicField(this, "~repr");
649
+ }
650
+ };
651
+
652
+ // src/data/matrix.ts
653
+ function createMatSchema(options) {
654
+ const MatSchema = {
655
+ /** Type-token, not available at runtime */
656
+ "~repr": void 0,
657
+ type: options.type,
658
+ label: options.type
659
+ };
660
+ const construct = (...args) => {
661
+ if (inGPUMode()) {
662
+ return `${MatSchema.type}(${args.join(", ")})`;
663
+ }
664
+ const elements = [];
665
+ for (const arg of args) {
666
+ if (typeof arg === "number") {
667
+ elements.push(arg);
668
+ } else {
669
+ for (let i = 0; i < arg.length; ++i) {
670
+ elements.push(arg[i]);
671
+ }
672
+ }
673
+ }
674
+ for (let i = elements.length; i < options.columns * options.rows; ++i) {
675
+ elements.push(0);
676
+ }
677
+ return options.makeFromElements(...elements);
678
+ };
679
+ return Object.assign(construct, MatSchema);
680
+ }
681
+ var mat2x2Impl = class {
682
+ constructor(...elements) {
683
+ __publicField(this, "columns");
684
+ __publicField(this, "length", 4);
685
+ this.columns = [
686
+ this.makeColumn(elements[0], elements[1]),
687
+ this.makeColumn(elements[2], elements[3])
688
+ ];
689
+ }
690
+ get [0]() {
691
+ return this.columns[0].x;
692
+ }
693
+ get [1]() {
694
+ return this.columns[0].y;
695
+ }
696
+ get [2]() {
697
+ return this.columns[1].x;
698
+ }
699
+ get [3]() {
700
+ return this.columns[1].y;
701
+ }
702
+ set [0](value) {
703
+ this.columns[0].x = value;
704
+ }
705
+ set [1](value) {
706
+ this.columns[0].y = value;
707
+ }
708
+ set [2](value) {
709
+ this.columns[1].x = value;
710
+ }
711
+ set [3](value) {
712
+ this.columns[1].y = value;
713
+ }
714
+ "~resolve"() {
715
+ return `${this.kind}(${Array.from({ length: this.length }).map((_, i) => this[i]).join(", ")})`;
716
+ }
717
+ };
718
+ var mat2x2fImpl = class extends mat2x2Impl {
719
+ constructor() {
720
+ super(...arguments);
721
+ __publicField(this, "kind", "mat2x2f");
722
+ }
723
+ makeColumn(e0, e1) {
724
+ return vec2f(e0, e1);
725
+ }
726
+ };
727
+ var mat3x3Impl = class {
728
+ constructor(...elements) {
729
+ __publicField(this, "columns");
730
+ __publicField(this, "length", 12);
731
+ this.columns = [
732
+ this.makeColumn(
733
+ elements[0],
734
+ elements[1],
735
+ elements[2]
736
+ ),
737
+ this.makeColumn(
738
+ elements[3],
739
+ elements[4],
740
+ elements[5]
741
+ ),
742
+ this.makeColumn(
743
+ elements[6],
744
+ elements[7],
745
+ elements[8]
746
+ )
747
+ ];
748
+ }
749
+ get [0]() {
750
+ return this.columns[0].x;
751
+ }
752
+ get [1]() {
753
+ return this.columns[0].y;
754
+ }
755
+ get [2]() {
756
+ return this.columns[0].z;
757
+ }
758
+ get [3]() {
759
+ return 0;
760
+ }
761
+ get [4]() {
762
+ return this.columns[1].x;
763
+ }
764
+ get [5]() {
765
+ return this.columns[1].y;
766
+ }
767
+ get [6]() {
768
+ return this.columns[1].z;
769
+ }
770
+ get [7]() {
771
+ return 0;
772
+ }
773
+ get [8]() {
774
+ return this.columns[2].x;
775
+ }
776
+ get [9]() {
777
+ return this.columns[2].y;
778
+ }
779
+ get [10]() {
780
+ return this.columns[2].z;
781
+ }
782
+ get [11]() {
783
+ return 0;
784
+ }
785
+ set [0](value) {
786
+ this.columns[0].x = value;
787
+ }
788
+ set [1](value) {
789
+ this.columns[0].y = value;
790
+ }
791
+ set [2](value) {
792
+ this.columns[0].z = value;
793
+ }
794
+ set [3](_) {
795
+ }
796
+ set [4](value) {
797
+ this.columns[1].x = value;
798
+ }
799
+ set [5](value) {
800
+ this.columns[1].y = value;
801
+ }
802
+ set [6](value) {
803
+ this.columns[1].z = value;
804
+ }
805
+ set [7](_) {
806
+ }
807
+ set [8](value) {
808
+ this.columns[2].x = value;
809
+ }
810
+ set [9](value) {
811
+ this.columns[2].y = value;
812
+ }
813
+ set [10](value) {
814
+ this.columns[2].z = value;
815
+ }
816
+ set [11](_) {
817
+ }
818
+ "~resolve"() {
819
+ return `${this.kind}(${this[0]}, ${this[1]}, ${this[2]}, ${this[4]}, ${this[5]}, ${this[6]}, ${this[8]}, ${this[9]}, ${this[10]})`;
820
+ }
821
+ };
822
+ var mat3x3fImpl = class extends mat3x3Impl {
823
+ constructor() {
824
+ super(...arguments);
825
+ __publicField(this, "kind", "mat3x3f");
826
+ }
827
+ makeColumn(x, y, z) {
828
+ return vec3f(x, y, z);
829
+ }
830
+ };
831
+ var mat4x4Impl = class {
832
+ constructor(...elements) {
833
+ __publicField(this, "columns");
834
+ __publicField(this, "length", 16);
835
+ this.columns = [
836
+ this.makeColumn(
837
+ elements[0],
838
+ elements[1],
839
+ elements[2],
840
+ elements[3]
841
+ ),
842
+ this.makeColumn(
843
+ elements[4],
844
+ elements[5],
845
+ elements[6],
846
+ elements[7]
847
+ ),
848
+ this.makeColumn(
849
+ elements[8],
850
+ elements[9],
851
+ elements[10],
852
+ elements[11]
853
+ ),
854
+ this.makeColumn(
855
+ elements[12],
856
+ elements[13],
857
+ elements[14],
858
+ elements[15]
859
+ )
860
+ ];
861
+ }
862
+ get [0]() {
863
+ return this.columns[0].x;
864
+ }
865
+ get [1]() {
866
+ return this.columns[0].y;
867
+ }
868
+ get [2]() {
869
+ return this.columns[0].z;
870
+ }
871
+ get [3]() {
872
+ return this.columns[0].w;
873
+ }
874
+ get [4]() {
875
+ return this.columns[1].x;
876
+ }
877
+ get [5]() {
878
+ return this.columns[1].y;
879
+ }
880
+ get [6]() {
881
+ return this.columns[1].z;
882
+ }
883
+ get [7]() {
884
+ return this.columns[1].w;
885
+ }
886
+ get [8]() {
887
+ return this.columns[2].x;
888
+ }
889
+ get [9]() {
890
+ return this.columns[2].y;
891
+ }
892
+ get [10]() {
893
+ return this.columns[2].z;
894
+ }
895
+ get [11]() {
896
+ return this.columns[2].w;
897
+ }
898
+ get [12]() {
899
+ return this.columns[3].x;
900
+ }
901
+ get [13]() {
902
+ return this.columns[3].y;
903
+ }
904
+ get [14]() {
905
+ return this.columns[3].z;
906
+ }
907
+ get [15]() {
908
+ return this.columns[3].w;
909
+ }
910
+ set [0](value) {
911
+ this.columns[0].x = value;
912
+ }
913
+ set [1](value) {
914
+ this.columns[0].y = value;
915
+ }
916
+ set [2](value) {
917
+ this.columns[0].z = value;
918
+ }
919
+ set [3](value) {
920
+ this.columns[0].w = value;
921
+ }
922
+ set [4](value) {
923
+ this.columns[1].x = value;
924
+ }
925
+ set [5](value) {
926
+ this.columns[1].y = value;
927
+ }
928
+ set [6](value) {
929
+ this.columns[1].z = value;
930
+ }
931
+ set [7](value) {
932
+ this.columns[1].w = value;
933
+ }
934
+ set [8](value) {
935
+ this.columns[2].x = value;
936
+ }
937
+ set [9](value) {
938
+ this.columns[2].y = value;
939
+ }
940
+ set [10](value) {
941
+ this.columns[2].z = value;
942
+ }
943
+ set [11](value) {
944
+ this.columns[2].w = value;
945
+ }
946
+ set [12](value) {
947
+ this.columns[3].x = value;
948
+ }
949
+ set [13](value) {
950
+ this.columns[3].y = value;
951
+ }
952
+ set [14](value) {
953
+ this.columns[3].z = value;
954
+ }
955
+ set [15](value) {
956
+ this.columns[3].w = value;
957
+ }
958
+ "~resolve"() {
959
+ return `${this.kind}(${Array.from({ length: this.length }).map((_, i) => this[i]).join(", ")})`;
960
+ }
961
+ };
962
+ var mat4x4fImpl = class extends mat4x4Impl {
963
+ constructor() {
964
+ super(...arguments);
965
+ __publicField(this, "kind", "mat4x4f");
966
+ }
967
+ makeColumn(x, y, z, w) {
968
+ return vec4f(x, y, z, w);
969
+ }
970
+ };
971
+ var mat2x2f = createMatSchema({
972
+ type: "mat2x2f",
973
+ rows: 2,
974
+ columns: 2,
975
+ makeFromElements: (...elements) => new mat2x2fImpl(...elements)
976
+ });
977
+ var mat3x3f = createMatSchema({
978
+ type: "mat3x3f",
979
+ rows: 3,
980
+ columns: 3,
981
+ makeFromElements: (...elements) => new mat3x3fImpl(...elements)
982
+ });
983
+ var mat4x4f = createMatSchema({
984
+ type: "mat4x4f",
985
+ rows: 4,
986
+ columns: 4,
987
+ makeFromElements: (...elements) => new mat4x4fImpl(...elements)
988
+ });
989
+ function matToArray(mat) {
990
+ if (mat.kind === "mat3x3f") {
991
+ return [
992
+ mat[0],
993
+ mat[1],
994
+ mat[2],
995
+ mat[4],
996
+ mat[5],
997
+ mat[6],
998
+ mat[8],
999
+ mat[9],
1000
+ mat[10]
1001
+ ];
1002
+ }
1003
+ return Array.from({ length: mat.length }).map((_, idx) => mat[idx]);
1004
+ }
1005
+
1006
+ // src/data/atomic.ts
1007
+ function atomic(data) {
1008
+ return new AtomicImpl(data);
1009
+ }
1010
+ var AtomicImpl = class {
1011
+ constructor(inner) {
1012
+ this.inner = inner;
1013
+ __publicField(this, "type", "atomic");
1014
+ /** Type-token, not available at runtime */
1015
+ __publicField(this, "~repr");
1016
+ }
1017
+ };
1018
+
1019
+ // src/data/attributes.ts
1020
+ function attribute(data, attrib) {
1021
+ if (isDecorated(data)) {
1022
+ return new DecoratedImpl(data.inner, [
1023
+ attrib,
1024
+ ...data.attribs
1025
+ ]);
1026
+ }
1027
+ if (isLooseDecorated(data)) {
1028
+ return new LooseDecoratedImpl(data.inner, [
1029
+ attrib,
1030
+ ...data.attribs
1031
+ ]);
1032
+ }
1033
+ if (isLooseData(data)) {
1034
+ return new LooseDecoratedImpl(data, [attrib]);
1035
+ }
1036
+ return new DecoratedImpl(data, [attrib]);
1037
+ }
1038
+ function align(alignment, data) {
1039
+ return attribute(data, { type: "@align", value: alignment });
1040
+ }
1041
+ function size(size2, data) {
1042
+ return attribute(data, { type: "@size", value: size2 });
1043
+ }
1044
+ function location(location2, data) {
1045
+ return attribute(data, { type: "@location", value: location2 });
1046
+ }
1047
+ function interpolate(interpolationType, data) {
1048
+ return attribute(data, {
1049
+ type: "@interpolate",
1050
+ value: interpolationType
1051
+ // biome-ignore lint/suspicious/noExplicitAny: <tired of lying to types>
1052
+ });
1053
+ }
1054
+ function isBuiltin(value) {
1055
+ return (isDecorated(value) || isLooseDecorated(value)) && value.attribs.find(isBuiltinAttrib) !== void 0;
1056
+ }
1057
+ function getAttributesString(field) {
1058
+ if (!isDecorated(field) && !isLooseDecorated(field)) {
1059
+ return "";
1060
+ }
1061
+ return field.attribs.map((attrib) => `${attrib.type}(${attrib.value}) `).join("");
1062
+ }
1063
+ var BaseDecoratedImpl = class {
1064
+ constructor(inner, attribs) {
1065
+ this.inner = inner;
1066
+ this.attribs = attribs;
1067
+ // Type-token, not available at runtime
1068
+ __publicField(this, "~repr");
1069
+ var _a, _b;
1070
+ const alignAttrib = (_a = attribs.find(isAlignAttrib)) == null ? void 0 : _a.value;
1071
+ const sizeAttrib = (_b = attribs.find(isSizeAttrib)) == null ? void 0 : _b.value;
1072
+ if (alignAttrib !== void 0) {
1073
+ if (alignAttrib <= 0) {
1074
+ throw new Error(
1075
+ `Custom data alignment must be a positive number, got: ${alignAttrib}.`
1076
+ );
1077
+ }
1078
+ if (Math.log2(alignAttrib) % 1 !== 0) {
1079
+ throw new Error(
1080
+ `Alignment has to be a power of 2, got: ${alignAttrib}.`
1081
+ );
1082
+ }
1083
+ if (isWgslData(this.inner)) {
1084
+ if (alignAttrib % alignmentOf(this.inner) !== 0) {
1085
+ throw new Error(
1086
+ `Custom alignment has to be a multiple of the standard data alignment. Got: ${alignAttrib}, expected multiple of: ${alignmentOf(this.inner)}.`
1087
+ );
1088
+ }
1089
+ }
1090
+ }
1091
+ if (sizeAttrib !== void 0) {
1092
+ if (sizeAttrib < sizeOf(this.inner)) {
1093
+ throw new Error(
1094
+ `Custom data size cannot be smaller then the standard data size. Got: ${sizeAttrib}, expected at least: ${sizeOf(this.inner)}.`
1095
+ );
1096
+ }
1097
+ if (sizeAttrib <= 0) {
1098
+ throw new Error(
1099
+ `Custom data size must be a positive number. Got: ${sizeAttrib}.`
1100
+ );
1101
+ }
1102
+ }
1103
+ }
1104
+ };
1105
+ var DecoratedImpl = class extends BaseDecoratedImpl {
1106
+ constructor() {
1107
+ super(...arguments);
1108
+ __publicField(this, "type", "decorated");
1109
+ }
1110
+ };
1111
+ var LooseDecoratedImpl = class extends BaseDecoratedImpl {
1112
+ constructor() {
1113
+ super(...arguments);
1114
+ __publicField(this, "type", "loose-decorated");
1115
+ }
1116
+ };
1117
+
1118
+ // src/builtin.ts
1119
+ var builtin = {
1120
+ vertexIndex: attribute(u32, {
1121
+ type: "@builtin",
1122
+ value: "vertex_index"
1123
+ }),
1124
+ instanceIndex: attribute(u32, {
1125
+ type: "@builtin",
1126
+ value: "instance_index"
1127
+ }),
1128
+ position: attribute(vec4f, {
1129
+ type: "@builtin",
1130
+ value: "position"
1131
+ }),
1132
+ clipDistances: attribute(arrayOf(u32, 8), {
1133
+ type: "@builtin",
1134
+ value: "clip_distances"
1135
+ }),
1136
+ frontFacing: attribute(f32, {
1137
+ type: "@builtin",
1138
+ value: "front_facing"
1139
+ }),
1140
+ fragDepth: attribute(f32, {
1141
+ type: "@builtin",
1142
+ value: "frag_depth"
1143
+ }),
1144
+ sampleIndex: attribute(u32, {
1145
+ type: "@builtin",
1146
+ value: "sample_index"
1147
+ }),
1148
+ sampleMask: attribute(u32, {
1149
+ type: "@builtin",
1150
+ value: "sample_mask"
1151
+ }),
1152
+ localInvocationId: attribute(vec3u, {
1153
+ type: "@builtin",
1154
+ value: "local_invocation_id"
1155
+ }),
1156
+ localInvocationIndex: attribute(u32, {
1157
+ type: "@builtin",
1158
+ value: "local_invocation_index"
1159
+ }),
1160
+ globalInvocationId: attribute(vec3u, {
1161
+ type: "@builtin",
1162
+ value: "global_invocation_id"
1163
+ }),
1164
+ workgroupId: attribute(vec3u, {
1165
+ type: "@builtin",
1166
+ value: "workgroup_id"
1167
+ }),
1168
+ numWorkgroups: attribute(vec3u, {
1169
+ type: "@builtin",
1170
+ value: "num_workgroups"
1171
+ })
1172
+ };
1173
+
1174
+ export {
1175
+ isWgslData,
1176
+ isWgslArray,
1177
+ isWgslStruct,
1178
+ isPtrFn,
1179
+ isAtomic,
1180
+ isAlignAttrib,
1181
+ isSizeAttrib,
1182
+ isLocationAttrib,
1183
+ isInterpolateAttrib,
1184
+ isBuiltinAttrib,
1185
+ isDecorated,
1186
+ bool,
1187
+ u32,
1188
+ i32,
1189
+ f32,
1190
+ f16,
1191
+ struct,
1192
+ roundUp,
1193
+ vertexFormats,
1194
+ kindToDefaultFormatMap,
1195
+ isLooseData,
1196
+ isDisarray,
1197
+ isUnstruct,
1198
+ isLooseDecorated,
1199
+ getCustomLocation,
1200
+ isData,
1201
+ packedFormats,
1202
+ uint8,
1203
+ uint8x2,
1204
+ uint8x4,
1205
+ sint8,
1206
+ sint8x2,
1207
+ sint8x4,
1208
+ unorm8,
1209
+ unorm8x2,
1210
+ unorm8x4,
1211
+ snorm8,
1212
+ snorm8x2,
1213
+ snorm8x4,
1214
+ uint16,
1215
+ uint16x2,
1216
+ uint16x4,
1217
+ sint16,
1218
+ sint16x2,
1219
+ sint16x4,
1220
+ unorm16,
1221
+ unorm16x2,
1222
+ unorm16x4,
1223
+ snorm16,
1224
+ snorm16x2,
1225
+ snorm16x4,
1226
+ float16,
1227
+ float16x2,
1228
+ float16x4,
1229
+ float32,
1230
+ float32x2,
1231
+ float32x3,
1232
+ float32x4,
1233
+ uint32,
1234
+ uint32x2,
1235
+ uint32x3,
1236
+ uint32x4,
1237
+ sint32,
1238
+ sint32x2,
1239
+ sint32x3,
1240
+ sint32x4,
1241
+ unorm10_10_10_2,
1242
+ unorm8x4_bgra,
1243
+ alignmentOf,
1244
+ customAlignmentOf,
1245
+ PUBLIC_alignmentOf,
1246
+ sizeOf,
1247
+ PUBLIC_sizeOf,
1248
+ arrayOf,
1249
+ ptrFn,
1250
+ disarrayOf,
1251
+ unstruct,
1252
+ mat2x2f,
1253
+ mat3x3f,
1254
+ mat4x4f,
1255
+ matToArray,
1256
+ atomic,
1257
+ attribute,
1258
+ align,
1259
+ size,
1260
+ location,
1261
+ interpolate,
1262
+ isBuiltin,
1263
+ getAttributesString,
1264
+ builtin
1265
+ };
1266
+ //# sourceMappingURL=chunk-2ZAQFPSX.js.map