typegpu 0.5.3 → 0.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +1 -1
  2. package/{attributes-DSOqT8yA.d.cts → attributes-BcDZsQCE.d.cts} +1 -1
  3. package/{attributes-B4JpvOTz.d.ts → attributes-DsIdcdq4.d.ts} +1 -1
  4. package/chunk-A6AAWPBU.cjs +2 -0
  5. package/chunk-A6AAWPBU.cjs.map +1 -0
  6. package/chunk-HZAXWB4J.js +2 -0
  7. package/chunk-HZAXWB4J.js.map +1 -0
  8. package/chunk-T5Y2EQPZ.js +4 -0
  9. package/chunk-T5Y2EQPZ.js.map +1 -0
  10. package/chunk-VUYQ2ZIK.cjs +4 -0
  11. package/chunk-VUYQ2ZIK.cjs.map +1 -0
  12. package/data/index.cjs +1 -1
  13. package/data/index.cjs.map +1 -1
  14. package/data/index.d.cts +50 -4
  15. package/data/index.d.ts +50 -4
  16. package/data/index.js +1 -1
  17. package/{wgslTypes-VtSRoe90.d.ts → dataTypes-ts2Ccted.d.cts} +608 -506
  18. package/{wgslTypes-VtSRoe90.d.cts → dataTypes-ts2Ccted.d.ts} +608 -506
  19. package/index.cjs +19 -19
  20. package/index.cjs.map +1 -1
  21. package/index.d.cts +110 -443
  22. package/index.d.ts +110 -443
  23. package/index.js +19 -19
  24. package/index.js.map +1 -1
  25. package/package.json +2 -2
  26. package/sampler-CPNwYXSH.d.ts +369 -0
  27. package/sampler-DeX4AnIZ.d.cts +369 -0
  28. package/std/index.cjs +1 -1
  29. package/std/index.cjs.map +1 -1
  30. package/std/index.d.cts +190 -47
  31. package/std/index.d.ts +190 -47
  32. package/std/index.js +1 -1
  33. package/std/index.js.map +1 -1
  34. package/chunk-DVZNNZFQ.js +0 -2
  35. package/chunk-DVZNNZFQ.js.map +0 -1
  36. package/chunk-FM3TKZFZ.cjs +0 -2
  37. package/chunk-FM3TKZFZ.cjs.map +0 -1
  38. package/chunk-M4VUFFPZ.cjs +0 -4
  39. package/chunk-M4VUFFPZ.cjs.map +0 -1
  40. package/chunk-RMXVIINO.js +0 -2
  41. package/chunk-RMXVIINO.js.map +0 -1
  42. package/chunk-UHU5Z2IS.js +0 -4
  43. package/chunk-UHU5Z2IS.js.map +0 -1
  44. package/chunk-UPPJES6W.cjs +0 -2
  45. package/chunk-UPPJES6W.cjs.map +0 -1
package/std/index.d.cts CHANGED
@@ -1,117 +1,260 @@
1
- import { bk as VecKind, J as AnyMatInstance, bl as vBaseForMat, ai as v3f, aj as v3i, ak as v3u, af as v2f, al as v4f, bm as v2h, bn as v3h, bo as v4h, bp as atomicI32, bq as atomicU32 } from '../wgslTypes-VtSRoe90.cjs';
1
+ import { bn as TgpuDualFn, bo as AnyNumericVecInstance, H as AnyMatInstance, bp as vBaseForMat, bq as AnyFloatVecInstance, am as v3f, br as v3h, G as AnyVecInstance, bs as AnyVec2Instance, bt as v2b, bu as AnyVec3Instance, bv as v3b, bw as v4b, bx as AnyBooleanVecInstance, by as ScalarData, bz as atomicI32, bA as atomicU32, ap as v4f, aj as v2f, ak as v2i, an as v3i } from '../dataTypes-ts2Ccted.cjs';
2
+ import { d as TgpuSampledTexture, e as TgpuSampler } from '../sampler-DeX4AnIZ.cjs';
2
3
 
3
- declare const discard: () => never;
4
+ declare const discard: TgpuDualFn<() => never>;
4
5
 
5
- type vBase = {
6
- kind: VecKind;
7
- };
8
- declare const add: <T extends vBase>(lhs: T, rhs: T) => T;
9
- declare const sub: <T extends vBase>(lhs: T, rhs: T) => T;
6
+ declare const add: TgpuDualFn<(<T extends AnyNumericVecInstance>(lhs: T, rhs: T) => T)>;
7
+ declare const sub: TgpuDualFn<(<T extends AnyNumericVecInstance>(lhs: T, rhs: T) => T)>;
10
8
  type MulOverload = {
11
9
  <T extends AnyMatInstance, TVec extends vBaseForMat<T>>(s: T, v: TVec): TVec;
12
10
  <T extends AnyMatInstance, TVec extends vBaseForMat<T>>(s: TVec, v: T): TVec;
13
- <T extends vBase | AnyMatInstance>(s: number | T, v: T): T;
11
+ <T extends AnyNumericVecInstance | AnyMatInstance>(s: number | T, v: T): T;
14
12
  };
15
13
  declare const mul: MulOverload;
16
- declare const abs: <T extends vBase | number>(value: T) => T;
17
- declare const atan2: <T extends vBase | number>(y: T, x: T) => T;
18
- declare const acos: <T extends vBase | number>(value: T) => T;
19
- declare const asin: <T extends vBase | number>(value: T) => T;
14
+ declare const abs: TgpuDualFn<(<T extends AnyNumericVecInstance | number>(value: T) => T)>;
15
+ declare const atan2: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(y: T, x: T) => T)>;
16
+ declare const acos: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(value: T) => T)>;
17
+ declare const asin: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(value: T) => T)>;
20
18
  /**
21
19
  * @privateRemarks
22
20
  * https://www.w3.org/TR/WGSL/#ceil-builtin
23
21
  */
24
- declare const ceil: <T extends vBase | number>(value: T) => T;
22
+ declare const ceil: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(value: T) => T)>;
25
23
  /**
26
24
  * @privateRemarks
27
25
  * https://www.w3.org/TR/WGSL/#clamp
28
26
  */
29
- declare const clamp: <T extends vBase | number>(value: T, low: T, high: T) => T;
27
+ declare const clamp: TgpuDualFn<(<T extends AnyNumericVecInstance | number>(value: T, low: T, high: T) => T)>;
30
28
  /**
31
29
  * @privateRemarks
32
30
  * https://www.w3.org/TR/WGSL/#cos-builtin
33
31
  */
34
- declare const cos: <T extends vBase | number>(value: T) => T;
32
+ declare const cos: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(value: T) => T)>;
35
33
  /**
36
34
  * @privateRemarks
37
35
  * https://www.w3.org/TR/WGSL/#cross-builtin
38
36
  */
39
- declare const cross: <T extends v3f | v3i | v3u>(a: T, b: T) => T;
37
+ declare const cross: TgpuDualFn<(<T extends v3f | v3h>(a: T, b: T) => T)>;
40
38
  /**
41
39
  * @privateRemarks
42
40
  * https://www.w3.org/TR/WGSL/#dot-builtin
43
41
  */
44
- declare const dot: <T extends vBase>(lhs: T, rhs: T) => number;
45
- declare const normalize: <T extends vBase>(v: T) => T;
42
+ declare const dot: TgpuDualFn<(<T extends AnyNumericVecInstance>(lhs: T, rhs: T) => number)>;
43
+ declare const normalize: TgpuDualFn<(<T extends AnyFloatVecInstance>(v: T) => T)>;
46
44
  /**
47
45
  * @privateRemarks
48
46
  * https://www.w3.org/TR/WGSL/#floor-builtin
49
47
  */
50
- declare const floor: <T extends vBase | number>(value: T) => T;
51
- declare const fract: <T extends vBase | number>(a: T) => T;
48
+ declare const floor: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(value: T) => T)>;
49
+ declare const fract: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(a: T) => T)>;
52
50
  /**
53
51
  * @privateRemarks
54
52
  * https://www.w3.org/TR/WGSL/#length-builtin
55
53
  */
56
- declare const length: <T extends vBase | number>(value: T) => number;
54
+ declare const length: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(value: T) => number)>;
57
55
  /**
58
56
  * @privateRemarks
59
57
  * https://www.w3.org/TR/WGSL/#max-float-builtin
60
58
  */
61
- declare const max: <T extends vBase | number>(a: T, b: T) => T;
59
+ declare const max: TgpuDualFn<(<T extends AnyNumericVecInstance | number>(a: T, b: T) => T)>;
62
60
  /**
63
61
  * @privateRemarks
64
62
  * https://www.w3.org/TR/WGSL/#min-float-builtin
65
63
  */
66
- declare const min: <T extends vBase | number>(a: T, b: T) => T;
64
+ declare const min: TgpuDualFn<(<T extends AnyNumericVecInstance | number>(a: T, b: T) => T)>;
67
65
  /**
68
66
  * @privateRemarks
69
67
  * https://www.w3.org/TR/WGSL/#sin-builtin
70
68
  */
71
- declare const sin: <T extends vBase | number>(value: T) => T;
69
+ declare const sin: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(value: T) => T)>;
72
70
  /**
73
71
  * @privateRemarks
74
72
  * https://www.w3.org/TR/WGSL/#exp-builtin
75
73
  */
76
- declare const exp: <T extends vBase | number>(value: T) => T;
74
+ declare const exp: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(value: T) => T)>;
77
75
  type PowOverload = {
78
76
  (base: number, exponent: number): number;
79
- <T extends v2f | v3f | v4f | v2h | v3h | v4h>(base: T, exponent: T): T;
77
+ <T extends AnyFloatVecInstance>(base: T, exponent: T): T;
80
78
  };
81
79
  declare const pow: PowOverload;
82
80
  type MixOverload = {
83
81
  (e1: number, e2: number, e3: number): number;
84
- <T extends v2f | v3f | v4f | v2h | v3h | v4h>(e1: T, e2: T, e3: number): T;
85
- <T extends v2f | v3f | v4f | v2h | v3h | v4h>(e1: T, e2: T, e3: T): T;
82
+ <T extends AnyFloatVecInstance>(e1: T, e2: T, e3: number): T;
83
+ <T extends AnyFloatVecInstance>(e1: T, e2: T, e3: T): T;
86
84
  };
87
85
  declare const mix: MixOverload;
88
- declare const reflect: <T extends vBase>(e1: T, e2: T) => T;
89
- declare const distance: <T extends vBase | number>(a: T, b: T) => number;
86
+ declare const reflect: TgpuDualFn<(<T extends AnyFloatVecInstance>(e1: T, e2: T) => T)>;
87
+ declare const distance: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(a: T, b: T) => number)>;
88
+ declare const neg: TgpuDualFn<(<T extends AnyNumericVecInstance | number>(value: T) => T)>;
89
+
90
+ /**
91
+ * Checks whether `lhs == rhs` on all components.
92
+ * Equivalent to `all(eq(lhs, rhs))`.
93
+ * @example
94
+ * allEq(vec2f(0.0, 1.0), vec2f(0.0, 2.0)) // returns false
95
+ * allEq(vec3u(0, 1, 2), vec3u(0, 1, 2)) // returns true
96
+ */
97
+ declare const allEq: TgpuDualFn<(<T extends AnyVecInstance>(lhs: T, rhs: T) => boolean)>;
98
+ /**
99
+ * Checks **component-wise** whether `lhs == rhs`.
100
+ * This function does **not** return `bool`, for that use-case, wrap the result in `all`, or use `allEq`.
101
+ * @example
102
+ * eq(vec2f(0.0, 1.0), vec2f(0.0, 2.0)) // returns vec2b(true, false)
103
+ * eq(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(false, true, false)
104
+ * all(eq(vec4i(4, 3, 2, 1), vec4i(4, 3, 2, 1))) // returns true
105
+ * allEq(vec4i(4, 3, 2, 1), vec4i(4, 3, 2, 1)) // returns true
106
+ */
107
+ declare const eq: TgpuDualFn<(<T extends AnyVecInstance>(lhs: T, rhs: T) => T extends AnyVec2Instance ? v2b : T extends AnyVec3Instance ? v3b : v4b)>;
108
+ /**
109
+ * Checks **component-wise** whether `lhs != rhs`.
110
+ * This function does **not** return `bool`, for that use-case, wrap the result in `any`.
111
+ * @example
112
+ * ne(vec2f(0.0, 1.0), vec2f(0.0, 2.0)) // returns vec2b(false, true)
113
+ * ne(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(true, false, true)
114
+ * any(ne(vec4i(4, 3, 2, 1), vec4i(4, 2, 2, 1))) // returns true
115
+ */
116
+ declare const ne: TgpuDualFn<(<T extends AnyVecInstance>(lhs: T, rhs: T) => T extends AnyVec2Instance ? v2b : T extends AnyVec3Instance ? v3b : v4b)>;
117
+ /**
118
+ * Checks **component-wise** whether `lhs < rhs`.
119
+ * This function does **not** return `bool`, for that use-case, wrap the result in `all`.
120
+ * @example
121
+ * lt(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(false, true)
122
+ * lt(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(true, false, false)
123
+ * all(lt(vec4i(1, 2, 3, 4), vec4i(2, 3, 4, 5))) // returns true
124
+ */
125
+ declare const lt: TgpuDualFn<(<T extends AnyNumericVecInstance>(lhs: T, rhs: T) => T extends AnyVec2Instance ? v2b : T extends AnyVec3Instance ? v3b : v4b)>;
126
+ /**
127
+ * Checks **component-wise** whether `lhs <= rhs`.
128
+ * This function does **not** return `bool`, for that use-case, wrap the result in `all`.
129
+ * @example
130
+ * le(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(true, true)
131
+ * le(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(true, true, false)
132
+ * all(le(vec4i(1, 2, 3, 4), vec4i(2, 3, 3, 5))) // returns true
133
+ */
134
+ declare const le: TgpuDualFn<(<T extends AnyNumericVecInstance>(lhs: T, rhs: T) => T extends AnyVec2Instance ? v2b : T extends AnyVec3Instance ? v3b : v4b)>;
135
+ /**
136
+ * Checks **component-wise** whether `lhs > rhs`.
137
+ * This function does **not** return `bool`, for that use-case, wrap the result in `all`.
138
+ * @example
139
+ * gt(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(false, false)
140
+ * gt(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(false, false, true)
141
+ * all(gt(vec4i(2, 3, 4, 5), vec4i(1, 2, 3, 4))) // returns true
142
+ */
143
+ declare const gt: TgpuDualFn<(<T extends AnyNumericVecInstance>(lhs: T, rhs: T) => T extends AnyVec2Instance ? v2b : T extends AnyVec3Instance ? v3b : v4b)>;
144
+ /**
145
+ * Checks **component-wise** whether `lhs >= rhs`.
146
+ * This function does **not** return `bool`, for that use-case, wrap the result in `all`.
147
+ * @example
148
+ * ge(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(true, false)
149
+ * ge(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(false, true, true)
150
+ * all(ge(vec4i(2, 2, 4, 5), vec4i(1, 2, 3, 4))) // returns true
151
+ */
152
+ declare const ge: TgpuDualFn<(<T extends AnyNumericVecInstance>(lhs: T, rhs: T) => T extends AnyVec2Instance ? v2b : T extends AnyVec3Instance ? v3b : v4b)>;
153
+ /**
154
+ * Returns **component-wise** `!value`.
155
+ * @example
156
+ * not(vec2b(false, true)) // returns vec2b(true, false)
157
+ * not(vec3b(true, true, false)) // returns vec3b(false, false, true)
158
+ */
159
+ declare const not: TgpuDualFn<(<T extends AnyBooleanVecInstance>(value: T) => T)>;
160
+ /**
161
+ * Returns **component-wise** logical `or` result.
162
+ * @example
163
+ * or(vec2b(false, true), vec2b(false, false)) // returns vec2b(false, true)
164
+ * or(vec3b(true, true, false), vec3b(false, true, false)) // returns vec3b(true, true, false)
165
+ */
166
+ declare const or: TgpuDualFn<(<T extends AnyBooleanVecInstance>(lhs: T, rhs: T) => T)>;
90
167
  /**
91
- * Checks whether the given elements differ by at most 0.01.
92
- * Component-wise if arguments are vectors.
168
+ * Returns **component-wise** logical `and` result.
169
+ * @example
170
+ * and(vec2b(false, true), vec2b(true, true)) // returns vec2b(false, true)
171
+ * and(vec3b(true, true, false), vec3b(false, true, false)) // returns vec3b(false, true, false)
172
+ */
173
+ declare const and: TgpuDualFn<(<T extends AnyBooleanVecInstance>(lhs: T, rhs: T) => T)>;
174
+ /**
175
+ * Returns `true` if each component of `value` is true.
176
+ * @example
177
+ * all(vec2b(false, true)) // returns false
178
+ * all(vec3b(true, true, true)) // returns true
179
+ */
180
+ declare const all: TgpuDualFn<(value: AnyBooleanVecInstance) => boolean>;
181
+ /**
182
+ * Returns `true` if any component of `value` is true.
183
+ * @example
184
+ * any(vec2b(false, true)) // returns true
185
+ * any(vec3b(false, false, false)) // returns false
186
+ */
187
+ declare const any: TgpuDualFn<(value: AnyBooleanVecInstance) => boolean>;
188
+ /**
189
+ * Checks whether the given elements differ by at most the `precision` value.
190
+ * Checks all elements of `lhs` and `rhs` if arguments are vectors.
93
191
  * @example
94
192
  * isCloseTo(0, 0.1) // returns false
95
193
  * isCloseTo(vec3f(0, 0, 0), vec3f(0.002, -0.009, 0)) // returns true
96
194
  *
97
195
  * @param {number} precision argument that specifies the maximum allowed difference, 0.01 by default.
98
196
  */
99
- declare const isCloseTo: <T extends v2f | v3f | v4f | v2h | v3h | v4h | number>(e1: T, e2: T, precision?: number) => boolean;
197
+ declare const isCloseTo: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(lhs: T, rhs: T, precision?: number) => boolean)>;
198
+ type SelectOverload = {
199
+ <T extends ScalarData | AnyVecInstance>(f: T, t: T, cond: boolean): T;
200
+ <T extends AnyVecInstance>(f: T, t: T, cond: T extends AnyVec2Instance ? v2b : T extends AnyVec3Instance ? v3b : v4b): T;
201
+ };
202
+ /**
203
+ * Returns `t` if `cond` is `true`, and `f` otherwise.
204
+ * Component-wise if `cond` is a vector.
205
+ * @example
206
+ * select(vec2i(1, 2), vec2i(3, 4), true) // returns vec2i(3, 4)
207
+ * select(vec2i(1, 2), vec2i(3, 4), vec2b(false, true)) // returns vec2i(1, 4)
208
+ */
209
+ declare const select: SelectOverload;
100
210
 
101
211
  type AnyAtomic = atomicI32 | atomicU32;
102
- declare const workgroupBarrier: () => void;
103
- declare const storageBarrier: () => void;
104
- declare const textureBarrier: () => void;
105
- declare const atomicLoad: <T extends AnyAtomic>(a: T) => number;
106
- declare const atomicStore: <T extends AnyAtomic>(a: T, value: number) => void;
107
- declare const atomicAdd: <T extends AnyAtomic>(a: T, value: number) => number;
108
- declare const atomicSub: <T extends AnyAtomic>(a: T, value: number) => number;
109
- declare const atomicMax: <T extends AnyAtomic>(a: T, value: number) => number;
110
- declare const atomicMin: <T extends AnyAtomic>(a: T, value: number) => number;
111
- declare const atomicAnd: <T extends AnyAtomic>(a: T, value: number) => number;
112
- declare const atomicOr: <T extends AnyAtomic>(a: T, value: number) => number;
113
- declare const atomicXor: <T extends AnyAtomic>(a: T, value: number) => number;
212
+ declare const workgroupBarrier: TgpuDualFn<() => void>;
213
+ declare const storageBarrier: TgpuDualFn<() => void>;
214
+ declare const textureBarrier: TgpuDualFn<() => void>;
215
+ declare const atomicLoad: TgpuDualFn<(<T extends AnyAtomic>(a: T) => number)>;
216
+ declare const atomicStore: TgpuDualFn<(<T extends AnyAtomic>(a: T, value: number) => void)>;
217
+ declare const atomicAdd: TgpuDualFn<(<T extends AnyAtomic>(a: T, value: number) => number)>;
218
+ declare const atomicSub: TgpuDualFn<(<T extends AnyAtomic>(a: T, value: number) => number)>;
219
+ declare const atomicMax: TgpuDualFn<(<T extends AnyAtomic>(a: T, value: number) => number)>;
220
+ declare const atomicMin: TgpuDualFn<(<T extends AnyAtomic>(a: T, value: number) => number)>;
221
+ declare const atomicAnd: TgpuDualFn<(<T extends AnyAtomic>(a: T, value: number) => number)>;
222
+ declare const atomicOr: TgpuDualFn<(<T extends AnyAtomic>(a: T, value: number) => number)>;
223
+ declare const atomicXor: TgpuDualFn<(<T extends AnyAtomic>(a: T, value: number) => number)>;
224
+
225
+ declare const arrayLength: TgpuDualFn<(a: unknown[]) => number>;
114
226
 
115
- declare const arrayLength: (a: unknown[]) => number;
227
+ /**
228
+ * @privateRemarks
229
+ * https://gpuweb.github.io/gpuweb/wgsl/#unpack2x16float-builtin
230
+ */
231
+ declare const unpack2x16float: TgpuDualFn<(e: number) => v2f>;
232
+ /**
233
+ * @privateRemarks
234
+ * https://gpuweb.github.io/gpuweb/wgsl/#pack2x16float-builtin
235
+ */
236
+ declare const pack2x16float: TgpuDualFn<(e: v2f) => number>;
237
+ /**
238
+ * @privateRemarks
239
+ * https://gpuweb.github.io/gpuweb/wgsl/#unpack4x8unorm-builtin
240
+ */
241
+ declare const unpack4x8unorm: TgpuDualFn<(e: number) => v4f>;
242
+ /**
243
+ * @privateRemarks
244
+ * https://gpuweb.github.io/gpuweb/wgsl/#pack4x8unorm-builtin
245
+ */
246
+ declare const pack4x8unorm: TgpuDualFn<(e: v4f) => number>;
247
+
248
+ type TextureSampleOverload = {
249
+ <T extends TgpuSampledTexture<'1d'>>(texture: T, sampler: TgpuSampler, coords: number): v4f;
250
+ <T extends TgpuSampledTexture<'2d'>>(texture: T, sampler: TgpuSampler, coords: v2f): v4f;
251
+ <T extends TgpuSampledTexture<'2d'>>(texture: T, sampler: TgpuSampler, coords: v2f, offset: v2i): v4f;
252
+ <T extends TgpuSampledTexture<'2d-array'>>(texture: T, sampler: TgpuSampler, coords: v2f, arrayIndex: number): v4f;
253
+ <T extends TgpuSampledTexture<'2d-array'>>(texture: T, sampler: TgpuSampler, coords: v2f, arrayIndex: number, offset: v2i): v4f;
254
+ <T extends TgpuSampledTexture<'3d' | 'cube'>>(texture: T, sampler: TgpuSampler, coords: v3f): v4f;
255
+ <T extends TgpuSampledTexture<'3d'>>(texture: T, sampler: TgpuSampler, coords: v3f, offset: v3i): v4f;
256
+ <T extends TgpuSampledTexture<'cube-array'>>(texture: T, sampler: TgpuSampler, coords: v3f, arrayIndex: number): v4f;
257
+ };
258
+ declare const textureSample: TextureSampleOverload;
116
259
 
117
- export { abs, acos, add, arrayLength, asin, atan2, atomicAdd, atomicAnd, atomicLoad, atomicMax, atomicMin, atomicOr, atomicStore, atomicSub, atomicXor, ceil, clamp, cos, cross, discard, distance, dot, exp, floor, fract, isCloseTo, length, max, min, mix, mul, normalize, pow, reflect, sin, storageBarrier, sub, textureBarrier, workgroupBarrier };
260
+ export { abs, acos, add, all, allEq, and, any, arrayLength, asin, atan2, atomicAdd, atomicAnd, atomicLoad, atomicMax, atomicMin, atomicOr, atomicStore, atomicSub, atomicXor, ceil, clamp, cos, cross, discard, distance, dot, eq, exp, floor, fract, ge, gt, isCloseTo, le, length, lt, max, min, mix, mul, ne, neg, normalize, not, or, pack2x16float, pack4x8unorm, pow, reflect, select, sin, storageBarrier, sub, textureBarrier, textureSample, unpack2x16float, unpack4x8unorm, workgroupBarrier };
package/std/index.d.ts CHANGED
@@ -1,117 +1,260 @@
1
- import { bk as VecKind, J as AnyMatInstance, bl as vBaseForMat, ai as v3f, aj as v3i, ak as v3u, af as v2f, al as v4f, bm as v2h, bn as v3h, bo as v4h, bp as atomicI32, bq as atomicU32 } from '../wgslTypes-VtSRoe90.js';
1
+ import { bn as TgpuDualFn, bo as AnyNumericVecInstance, H as AnyMatInstance, bp as vBaseForMat, bq as AnyFloatVecInstance, am as v3f, br as v3h, G as AnyVecInstance, bs as AnyVec2Instance, bt as v2b, bu as AnyVec3Instance, bv as v3b, bw as v4b, bx as AnyBooleanVecInstance, by as ScalarData, bz as atomicI32, bA as atomicU32, ap as v4f, aj as v2f, ak as v2i, an as v3i } from '../dataTypes-ts2Ccted.js';
2
+ import { d as TgpuSampledTexture, e as TgpuSampler } from '../sampler-CPNwYXSH.js';
2
3
 
3
- declare const discard: () => never;
4
+ declare const discard: TgpuDualFn<() => never>;
4
5
 
5
- type vBase = {
6
- kind: VecKind;
7
- };
8
- declare const add: <T extends vBase>(lhs: T, rhs: T) => T;
9
- declare const sub: <T extends vBase>(lhs: T, rhs: T) => T;
6
+ declare const add: TgpuDualFn<(<T extends AnyNumericVecInstance>(lhs: T, rhs: T) => T)>;
7
+ declare const sub: TgpuDualFn<(<T extends AnyNumericVecInstance>(lhs: T, rhs: T) => T)>;
10
8
  type MulOverload = {
11
9
  <T extends AnyMatInstance, TVec extends vBaseForMat<T>>(s: T, v: TVec): TVec;
12
10
  <T extends AnyMatInstance, TVec extends vBaseForMat<T>>(s: TVec, v: T): TVec;
13
- <T extends vBase | AnyMatInstance>(s: number | T, v: T): T;
11
+ <T extends AnyNumericVecInstance | AnyMatInstance>(s: number | T, v: T): T;
14
12
  };
15
13
  declare const mul: MulOverload;
16
- declare const abs: <T extends vBase | number>(value: T) => T;
17
- declare const atan2: <T extends vBase | number>(y: T, x: T) => T;
18
- declare const acos: <T extends vBase | number>(value: T) => T;
19
- declare const asin: <T extends vBase | number>(value: T) => T;
14
+ declare const abs: TgpuDualFn<(<T extends AnyNumericVecInstance | number>(value: T) => T)>;
15
+ declare const atan2: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(y: T, x: T) => T)>;
16
+ declare const acos: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(value: T) => T)>;
17
+ declare const asin: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(value: T) => T)>;
20
18
  /**
21
19
  * @privateRemarks
22
20
  * https://www.w3.org/TR/WGSL/#ceil-builtin
23
21
  */
24
- declare const ceil: <T extends vBase | number>(value: T) => T;
22
+ declare const ceil: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(value: T) => T)>;
25
23
  /**
26
24
  * @privateRemarks
27
25
  * https://www.w3.org/TR/WGSL/#clamp
28
26
  */
29
- declare const clamp: <T extends vBase | number>(value: T, low: T, high: T) => T;
27
+ declare const clamp: TgpuDualFn<(<T extends AnyNumericVecInstance | number>(value: T, low: T, high: T) => T)>;
30
28
  /**
31
29
  * @privateRemarks
32
30
  * https://www.w3.org/TR/WGSL/#cos-builtin
33
31
  */
34
- declare const cos: <T extends vBase | number>(value: T) => T;
32
+ declare const cos: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(value: T) => T)>;
35
33
  /**
36
34
  * @privateRemarks
37
35
  * https://www.w3.org/TR/WGSL/#cross-builtin
38
36
  */
39
- declare const cross: <T extends v3f | v3i | v3u>(a: T, b: T) => T;
37
+ declare const cross: TgpuDualFn<(<T extends v3f | v3h>(a: T, b: T) => T)>;
40
38
  /**
41
39
  * @privateRemarks
42
40
  * https://www.w3.org/TR/WGSL/#dot-builtin
43
41
  */
44
- declare const dot: <T extends vBase>(lhs: T, rhs: T) => number;
45
- declare const normalize: <T extends vBase>(v: T) => T;
42
+ declare const dot: TgpuDualFn<(<T extends AnyNumericVecInstance>(lhs: T, rhs: T) => number)>;
43
+ declare const normalize: TgpuDualFn<(<T extends AnyFloatVecInstance>(v: T) => T)>;
46
44
  /**
47
45
  * @privateRemarks
48
46
  * https://www.w3.org/TR/WGSL/#floor-builtin
49
47
  */
50
- declare const floor: <T extends vBase | number>(value: T) => T;
51
- declare const fract: <T extends vBase | number>(a: T) => T;
48
+ declare const floor: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(value: T) => T)>;
49
+ declare const fract: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(a: T) => T)>;
52
50
  /**
53
51
  * @privateRemarks
54
52
  * https://www.w3.org/TR/WGSL/#length-builtin
55
53
  */
56
- declare const length: <T extends vBase | number>(value: T) => number;
54
+ declare const length: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(value: T) => number)>;
57
55
  /**
58
56
  * @privateRemarks
59
57
  * https://www.w3.org/TR/WGSL/#max-float-builtin
60
58
  */
61
- declare const max: <T extends vBase | number>(a: T, b: T) => T;
59
+ declare const max: TgpuDualFn<(<T extends AnyNumericVecInstance | number>(a: T, b: T) => T)>;
62
60
  /**
63
61
  * @privateRemarks
64
62
  * https://www.w3.org/TR/WGSL/#min-float-builtin
65
63
  */
66
- declare const min: <T extends vBase | number>(a: T, b: T) => T;
64
+ declare const min: TgpuDualFn<(<T extends AnyNumericVecInstance | number>(a: T, b: T) => T)>;
67
65
  /**
68
66
  * @privateRemarks
69
67
  * https://www.w3.org/TR/WGSL/#sin-builtin
70
68
  */
71
- declare const sin: <T extends vBase | number>(value: T) => T;
69
+ declare const sin: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(value: T) => T)>;
72
70
  /**
73
71
  * @privateRemarks
74
72
  * https://www.w3.org/TR/WGSL/#exp-builtin
75
73
  */
76
- declare const exp: <T extends vBase | number>(value: T) => T;
74
+ declare const exp: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(value: T) => T)>;
77
75
  type PowOverload = {
78
76
  (base: number, exponent: number): number;
79
- <T extends v2f | v3f | v4f | v2h | v3h | v4h>(base: T, exponent: T): T;
77
+ <T extends AnyFloatVecInstance>(base: T, exponent: T): T;
80
78
  };
81
79
  declare const pow: PowOverload;
82
80
  type MixOverload = {
83
81
  (e1: number, e2: number, e3: number): number;
84
- <T extends v2f | v3f | v4f | v2h | v3h | v4h>(e1: T, e2: T, e3: number): T;
85
- <T extends v2f | v3f | v4f | v2h | v3h | v4h>(e1: T, e2: T, e3: T): T;
82
+ <T extends AnyFloatVecInstance>(e1: T, e2: T, e3: number): T;
83
+ <T extends AnyFloatVecInstance>(e1: T, e2: T, e3: T): T;
86
84
  };
87
85
  declare const mix: MixOverload;
88
- declare const reflect: <T extends vBase>(e1: T, e2: T) => T;
89
- declare const distance: <T extends vBase | number>(a: T, b: T) => number;
86
+ declare const reflect: TgpuDualFn<(<T extends AnyFloatVecInstance>(e1: T, e2: T) => T)>;
87
+ declare const distance: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(a: T, b: T) => number)>;
88
+ declare const neg: TgpuDualFn<(<T extends AnyNumericVecInstance | number>(value: T) => T)>;
89
+
90
+ /**
91
+ * Checks whether `lhs == rhs` on all components.
92
+ * Equivalent to `all(eq(lhs, rhs))`.
93
+ * @example
94
+ * allEq(vec2f(0.0, 1.0), vec2f(0.0, 2.0)) // returns false
95
+ * allEq(vec3u(0, 1, 2), vec3u(0, 1, 2)) // returns true
96
+ */
97
+ declare const allEq: TgpuDualFn<(<T extends AnyVecInstance>(lhs: T, rhs: T) => boolean)>;
98
+ /**
99
+ * Checks **component-wise** whether `lhs == rhs`.
100
+ * This function does **not** return `bool`, for that use-case, wrap the result in `all`, or use `allEq`.
101
+ * @example
102
+ * eq(vec2f(0.0, 1.0), vec2f(0.0, 2.0)) // returns vec2b(true, false)
103
+ * eq(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(false, true, false)
104
+ * all(eq(vec4i(4, 3, 2, 1), vec4i(4, 3, 2, 1))) // returns true
105
+ * allEq(vec4i(4, 3, 2, 1), vec4i(4, 3, 2, 1)) // returns true
106
+ */
107
+ declare const eq: TgpuDualFn<(<T extends AnyVecInstance>(lhs: T, rhs: T) => T extends AnyVec2Instance ? v2b : T extends AnyVec3Instance ? v3b : v4b)>;
108
+ /**
109
+ * Checks **component-wise** whether `lhs != rhs`.
110
+ * This function does **not** return `bool`, for that use-case, wrap the result in `any`.
111
+ * @example
112
+ * ne(vec2f(0.0, 1.0), vec2f(0.0, 2.0)) // returns vec2b(false, true)
113
+ * ne(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(true, false, true)
114
+ * any(ne(vec4i(4, 3, 2, 1), vec4i(4, 2, 2, 1))) // returns true
115
+ */
116
+ declare const ne: TgpuDualFn<(<T extends AnyVecInstance>(lhs: T, rhs: T) => T extends AnyVec2Instance ? v2b : T extends AnyVec3Instance ? v3b : v4b)>;
117
+ /**
118
+ * Checks **component-wise** whether `lhs < rhs`.
119
+ * This function does **not** return `bool`, for that use-case, wrap the result in `all`.
120
+ * @example
121
+ * lt(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(false, true)
122
+ * lt(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(true, false, false)
123
+ * all(lt(vec4i(1, 2, 3, 4), vec4i(2, 3, 4, 5))) // returns true
124
+ */
125
+ declare const lt: TgpuDualFn<(<T extends AnyNumericVecInstance>(lhs: T, rhs: T) => T extends AnyVec2Instance ? v2b : T extends AnyVec3Instance ? v3b : v4b)>;
126
+ /**
127
+ * Checks **component-wise** whether `lhs <= rhs`.
128
+ * This function does **not** return `bool`, for that use-case, wrap the result in `all`.
129
+ * @example
130
+ * le(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(true, true)
131
+ * le(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(true, true, false)
132
+ * all(le(vec4i(1, 2, 3, 4), vec4i(2, 3, 3, 5))) // returns true
133
+ */
134
+ declare const le: TgpuDualFn<(<T extends AnyNumericVecInstance>(lhs: T, rhs: T) => T extends AnyVec2Instance ? v2b : T extends AnyVec3Instance ? v3b : v4b)>;
135
+ /**
136
+ * Checks **component-wise** whether `lhs > rhs`.
137
+ * This function does **not** return `bool`, for that use-case, wrap the result in `all`.
138
+ * @example
139
+ * gt(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(false, false)
140
+ * gt(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(false, false, true)
141
+ * all(gt(vec4i(2, 3, 4, 5), vec4i(1, 2, 3, 4))) // returns true
142
+ */
143
+ declare const gt: TgpuDualFn<(<T extends AnyNumericVecInstance>(lhs: T, rhs: T) => T extends AnyVec2Instance ? v2b : T extends AnyVec3Instance ? v3b : v4b)>;
144
+ /**
145
+ * Checks **component-wise** whether `lhs >= rhs`.
146
+ * This function does **not** return `bool`, for that use-case, wrap the result in `all`.
147
+ * @example
148
+ * ge(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(true, false)
149
+ * ge(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(false, true, true)
150
+ * all(ge(vec4i(2, 2, 4, 5), vec4i(1, 2, 3, 4))) // returns true
151
+ */
152
+ declare const ge: TgpuDualFn<(<T extends AnyNumericVecInstance>(lhs: T, rhs: T) => T extends AnyVec2Instance ? v2b : T extends AnyVec3Instance ? v3b : v4b)>;
153
+ /**
154
+ * Returns **component-wise** `!value`.
155
+ * @example
156
+ * not(vec2b(false, true)) // returns vec2b(true, false)
157
+ * not(vec3b(true, true, false)) // returns vec3b(false, false, true)
158
+ */
159
+ declare const not: TgpuDualFn<(<T extends AnyBooleanVecInstance>(value: T) => T)>;
160
+ /**
161
+ * Returns **component-wise** logical `or` result.
162
+ * @example
163
+ * or(vec2b(false, true), vec2b(false, false)) // returns vec2b(false, true)
164
+ * or(vec3b(true, true, false), vec3b(false, true, false)) // returns vec3b(true, true, false)
165
+ */
166
+ declare const or: TgpuDualFn<(<T extends AnyBooleanVecInstance>(lhs: T, rhs: T) => T)>;
90
167
  /**
91
- * Checks whether the given elements differ by at most 0.01.
92
- * Component-wise if arguments are vectors.
168
+ * Returns **component-wise** logical `and` result.
169
+ * @example
170
+ * and(vec2b(false, true), vec2b(true, true)) // returns vec2b(false, true)
171
+ * and(vec3b(true, true, false), vec3b(false, true, false)) // returns vec3b(false, true, false)
172
+ */
173
+ declare const and: TgpuDualFn<(<T extends AnyBooleanVecInstance>(lhs: T, rhs: T) => T)>;
174
+ /**
175
+ * Returns `true` if each component of `value` is true.
176
+ * @example
177
+ * all(vec2b(false, true)) // returns false
178
+ * all(vec3b(true, true, true)) // returns true
179
+ */
180
+ declare const all: TgpuDualFn<(value: AnyBooleanVecInstance) => boolean>;
181
+ /**
182
+ * Returns `true` if any component of `value` is true.
183
+ * @example
184
+ * any(vec2b(false, true)) // returns true
185
+ * any(vec3b(false, false, false)) // returns false
186
+ */
187
+ declare const any: TgpuDualFn<(value: AnyBooleanVecInstance) => boolean>;
188
+ /**
189
+ * Checks whether the given elements differ by at most the `precision` value.
190
+ * Checks all elements of `lhs` and `rhs` if arguments are vectors.
93
191
  * @example
94
192
  * isCloseTo(0, 0.1) // returns false
95
193
  * isCloseTo(vec3f(0, 0, 0), vec3f(0.002, -0.009, 0)) // returns true
96
194
  *
97
195
  * @param {number} precision argument that specifies the maximum allowed difference, 0.01 by default.
98
196
  */
99
- declare const isCloseTo: <T extends v2f | v3f | v4f | v2h | v3h | v4h | number>(e1: T, e2: T, precision?: number) => boolean;
197
+ declare const isCloseTo: TgpuDualFn<(<T extends AnyFloatVecInstance | number>(lhs: T, rhs: T, precision?: number) => boolean)>;
198
+ type SelectOverload = {
199
+ <T extends ScalarData | AnyVecInstance>(f: T, t: T, cond: boolean): T;
200
+ <T extends AnyVecInstance>(f: T, t: T, cond: T extends AnyVec2Instance ? v2b : T extends AnyVec3Instance ? v3b : v4b): T;
201
+ };
202
+ /**
203
+ * Returns `t` if `cond` is `true`, and `f` otherwise.
204
+ * Component-wise if `cond` is a vector.
205
+ * @example
206
+ * select(vec2i(1, 2), vec2i(3, 4), true) // returns vec2i(3, 4)
207
+ * select(vec2i(1, 2), vec2i(3, 4), vec2b(false, true)) // returns vec2i(1, 4)
208
+ */
209
+ declare const select: SelectOverload;
100
210
 
101
211
  type AnyAtomic = atomicI32 | atomicU32;
102
- declare const workgroupBarrier: () => void;
103
- declare const storageBarrier: () => void;
104
- declare const textureBarrier: () => void;
105
- declare const atomicLoad: <T extends AnyAtomic>(a: T) => number;
106
- declare const atomicStore: <T extends AnyAtomic>(a: T, value: number) => void;
107
- declare const atomicAdd: <T extends AnyAtomic>(a: T, value: number) => number;
108
- declare const atomicSub: <T extends AnyAtomic>(a: T, value: number) => number;
109
- declare const atomicMax: <T extends AnyAtomic>(a: T, value: number) => number;
110
- declare const atomicMin: <T extends AnyAtomic>(a: T, value: number) => number;
111
- declare const atomicAnd: <T extends AnyAtomic>(a: T, value: number) => number;
112
- declare const atomicOr: <T extends AnyAtomic>(a: T, value: number) => number;
113
- declare const atomicXor: <T extends AnyAtomic>(a: T, value: number) => number;
212
+ declare const workgroupBarrier: TgpuDualFn<() => void>;
213
+ declare const storageBarrier: TgpuDualFn<() => void>;
214
+ declare const textureBarrier: TgpuDualFn<() => void>;
215
+ declare const atomicLoad: TgpuDualFn<(<T extends AnyAtomic>(a: T) => number)>;
216
+ declare const atomicStore: TgpuDualFn<(<T extends AnyAtomic>(a: T, value: number) => void)>;
217
+ declare const atomicAdd: TgpuDualFn<(<T extends AnyAtomic>(a: T, value: number) => number)>;
218
+ declare const atomicSub: TgpuDualFn<(<T extends AnyAtomic>(a: T, value: number) => number)>;
219
+ declare const atomicMax: TgpuDualFn<(<T extends AnyAtomic>(a: T, value: number) => number)>;
220
+ declare const atomicMin: TgpuDualFn<(<T extends AnyAtomic>(a: T, value: number) => number)>;
221
+ declare const atomicAnd: TgpuDualFn<(<T extends AnyAtomic>(a: T, value: number) => number)>;
222
+ declare const atomicOr: TgpuDualFn<(<T extends AnyAtomic>(a: T, value: number) => number)>;
223
+ declare const atomicXor: TgpuDualFn<(<T extends AnyAtomic>(a: T, value: number) => number)>;
224
+
225
+ declare const arrayLength: TgpuDualFn<(a: unknown[]) => number>;
114
226
 
115
- declare const arrayLength: (a: unknown[]) => number;
227
+ /**
228
+ * @privateRemarks
229
+ * https://gpuweb.github.io/gpuweb/wgsl/#unpack2x16float-builtin
230
+ */
231
+ declare const unpack2x16float: TgpuDualFn<(e: number) => v2f>;
232
+ /**
233
+ * @privateRemarks
234
+ * https://gpuweb.github.io/gpuweb/wgsl/#pack2x16float-builtin
235
+ */
236
+ declare const pack2x16float: TgpuDualFn<(e: v2f) => number>;
237
+ /**
238
+ * @privateRemarks
239
+ * https://gpuweb.github.io/gpuweb/wgsl/#unpack4x8unorm-builtin
240
+ */
241
+ declare const unpack4x8unorm: TgpuDualFn<(e: number) => v4f>;
242
+ /**
243
+ * @privateRemarks
244
+ * https://gpuweb.github.io/gpuweb/wgsl/#pack4x8unorm-builtin
245
+ */
246
+ declare const pack4x8unorm: TgpuDualFn<(e: v4f) => number>;
247
+
248
+ type TextureSampleOverload = {
249
+ <T extends TgpuSampledTexture<'1d'>>(texture: T, sampler: TgpuSampler, coords: number): v4f;
250
+ <T extends TgpuSampledTexture<'2d'>>(texture: T, sampler: TgpuSampler, coords: v2f): v4f;
251
+ <T extends TgpuSampledTexture<'2d'>>(texture: T, sampler: TgpuSampler, coords: v2f, offset: v2i): v4f;
252
+ <T extends TgpuSampledTexture<'2d-array'>>(texture: T, sampler: TgpuSampler, coords: v2f, arrayIndex: number): v4f;
253
+ <T extends TgpuSampledTexture<'2d-array'>>(texture: T, sampler: TgpuSampler, coords: v2f, arrayIndex: number, offset: v2i): v4f;
254
+ <T extends TgpuSampledTexture<'3d' | 'cube'>>(texture: T, sampler: TgpuSampler, coords: v3f): v4f;
255
+ <T extends TgpuSampledTexture<'3d'>>(texture: T, sampler: TgpuSampler, coords: v3f, offset: v3i): v4f;
256
+ <T extends TgpuSampledTexture<'cube-array'>>(texture: T, sampler: TgpuSampler, coords: v3f, arrayIndex: number): v4f;
257
+ };
258
+ declare const textureSample: TextureSampleOverload;
116
259
 
117
- export { abs, acos, add, arrayLength, asin, atan2, atomicAdd, atomicAnd, atomicLoad, atomicMax, atomicMin, atomicOr, atomicStore, atomicSub, atomicXor, ceil, clamp, cos, cross, discard, distance, dot, exp, floor, fract, isCloseTo, length, max, min, mix, mul, normalize, pow, reflect, sin, storageBarrier, sub, textureBarrier, workgroupBarrier };
260
+ export { abs, acos, add, all, allEq, and, any, arrayLength, asin, atan2, atomicAdd, atomicAnd, atomicLoad, atomicMax, atomicMin, atomicOr, atomicStore, atomicSub, atomicXor, ceil, clamp, cos, cross, discard, distance, dot, eq, exp, floor, fract, ge, gt, isCloseTo, le, length, lt, max, min, mix, mul, ne, neg, normalize, not, or, pack2x16float, pack4x8unorm, pow, reflect, select, sin, storageBarrier, sub, textureBarrier, textureSample, unpack2x16float, unpack4x8unorm, workgroupBarrier };