typegpu 0.11.8 → 0.12.0

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 (362) hide show
  1. package/builtin.d.ts +51 -53
  2. package/builtin.js +30 -34
  3. package/common/fullScreenTriangle.d.ts +2 -10
  4. package/common/fullScreenTriangle.js +20 -28
  5. package/common/index.d.ts +2 -9
  6. package/common/index.js +3 -12
  7. package/common/writeSoA.d.ts +11 -12
  8. package/common/writeSoA.js +88 -76
  9. package/core/buffer/buffer.d.ts +79 -62
  10. package/core/buffer/buffer.js +279 -205
  11. package/core/buffer/bufferBinding.d.ts +71 -0
  12. package/core/buffer/bufferBinding.js +154 -0
  13. package/core/buffer/bufferUsage.d.ts +14 -45
  14. package/core/buffer/bufferUsage.js +1 -171
  15. package/core/buffer/laidOutBuffer.d.ts +25 -0
  16. package/core/buffer/laidOutBuffer.js +55 -0
  17. package/core/commandEncoder/attachments.d.ts +125 -0
  18. package/core/commandEncoder/attachments.js +29 -0
  19. package/core/commandEncoder/commandEncoder.d.ts +53 -0
  20. package/core/commandEncoder/commandEncoder.js +56 -0
  21. package/core/commandEncoder/computePass.d.ts +58 -0
  22. package/core/commandEncoder/computePass.js +63 -0
  23. package/core/commandEncoder/renderPass.d.ts +121 -0
  24. package/core/commandEncoder/renderPass.js +196 -0
  25. package/core/constant/tgpuConstant.d.ts +26 -26
  26. package/core/constant/tgpuConstant.js +76 -65
  27. package/core/declare/tgpuDeclare.d.ts +3 -6
  28. package/core/declare/tgpuDeclare.js +37 -38
  29. package/core/function/autoIO.d.ts +61 -33
  30. package/core/function/autoIO.js +68 -73
  31. package/core/function/comptime.d.ts +11 -13
  32. package/core/function/comptime.js +60 -52
  33. package/core/function/createCallableSchema.d.ts +16 -0
  34. package/core/function/createCallableSchema.js +50 -40
  35. package/core/function/dualImpl.d.ts +44 -0
  36. package/core/function/dualImpl.js +71 -50
  37. package/core/function/entryInputRouter.d.ts +26 -0
  38. package/core/function/entryInputRouter.js +31 -33
  39. package/core/function/extractArgs.d.ts +38 -0
  40. package/core/function/extractArgs.js +202 -200
  41. package/core/function/fnCore.d.ts +44 -0
  42. package/core/function/fnCore.js +148 -92
  43. package/core/function/fnTypes.d.ts +31 -29
  44. package/core/function/fnTypes.js +1 -0
  45. package/core/function/ioSchema.d.ts +12 -10
  46. package/core/function/ioSchema.js +65 -47
  47. package/core/function/shelllessImpl.d.ts +9 -12
  48. package/core/function/shelllessImpl.js +18 -20
  49. package/core/function/templateUtils.d.ts +2 -0
  50. package/core/function/templateUtils.js +9 -8
  51. package/core/function/tgpuComputeFn.d.ts +26 -28
  52. package/core/function/tgpuComputeFn.js +47 -48
  53. package/core/function/tgpuFn.d.ts +34 -37
  54. package/core/function/tgpuFn.js +179 -153
  55. package/core/function/tgpuFragmentFn.d.ts +52 -53
  56. package/core/function/tgpuFragmentFn.js +63 -56
  57. package/core/function/tgpuVertexFn.d.ts +36 -39
  58. package/core/function/tgpuVertexFn.js +56 -53
  59. package/core/pipeline/computePipeline.d.ts +141 -53
  60. package/core/pipeline/computePipeline.js +291 -225
  61. package/core/pipeline/connectAttachmentToShader.d.ts +4 -0
  62. package/core/pipeline/connectAttachmentToShader.js +25 -22
  63. package/core/pipeline/connectTargetsToShader.d.ts +3 -0
  64. package/core/pipeline/connectTargetsToShader.js +29 -27
  65. package/core/pipeline/drawState.d.ts +52 -0
  66. package/core/pipeline/drawState.js +225 -0
  67. package/core/pipeline/limitsOverflow.d.ts +2 -0
  68. package/core/pipeline/limitsOverflow.js +13 -10
  69. package/core/pipeline/performanceTracker.d.ts +14 -0
  70. package/core/pipeline/performanceTracker.js +34 -0
  71. package/core/pipeline/pipelineUtils.d.ts +18 -0
  72. package/core/pipeline/pipelineUtils.js +54 -25
  73. package/core/pipeline/priors.d.ts +1 -0
  74. package/core/pipeline/priors.js +12 -0
  75. package/core/pipeline/renderPipeline.d.ts +246 -261
  76. package/core/pipeline/renderPipeline.js +487 -480
  77. package/core/pipeline/timeable.d.ts +28 -18
  78. package/core/pipeline/timeable.js +90 -52
  79. package/core/pipeline/typeGuards.d.ts +17 -0
  80. package/core/pipeline/typeGuards.js +52 -22
  81. package/core/querySet/querySet.d.ts +26 -21
  82. package/core/querySet/querySet.js +127 -103
  83. package/core/rawCodeSnippet/tgpuRawCodeSnippet.d.ts +13 -18
  84. package/core/rawCodeSnippet/tgpuRawCodeSnippet.js +90 -93
  85. package/core/resolve/externals.d.ts +25 -7
  86. package/core/resolve/externals.js +79 -62
  87. package/core/resolve/namespace.d.ts +22 -25
  88. package/core/resolve/namespace.js +16 -21
  89. package/core/resolve/resolvableString.d.ts +7 -0
  90. package/core/resolve/resolvableString.js +13 -0
  91. package/core/resolve/resolveData.d.ts +10 -0
  92. package/core/resolve/resolveData.js +162 -121
  93. package/core/resolve/stitch.d.ts +8 -0
  94. package/core/resolve/stitch.js +23 -21
  95. package/core/resolve/tgpuResolve.d.ts +55 -53
  96. package/core/resolve/tgpuResolve.js +106 -55
  97. package/core/root/configurableImpl.d.ts +10 -0
  98. package/core/root/configurableImpl.js +17 -19
  99. package/core/root/init.d.ts +76 -38
  100. package/core/root/init.js +346 -454
  101. package/core/root/rootTypes.d.ts +461 -627
  102. package/core/root/rootTypes.js +1 -0
  103. package/core/sampler/sampler.d.ts +50 -31
  104. package/core/sampler/sampler.js +120 -113
  105. package/core/simulate/tgpuSimulate.d.ts +9 -12
  106. package/core/simulate/tgpuSimulate.js +68 -71
  107. package/core/slot/accessor.d.ts +36 -13
  108. package/core/slot/accessor.js +138 -91
  109. package/core/slot/internalSlots.d.ts +2 -0
  110. package/core/slot/internalSlots.js +1 -6
  111. package/core/slot/lazy.d.ts +2 -6
  112. package/core/slot/lazy.js +71 -39
  113. package/core/slot/slot.d.ts +2 -6
  114. package/core/slot/slot.js +45 -38
  115. package/core/slot/slotTypes.d.ts +78 -80
  116. package/core/slot/slotTypes.js +11 -16
  117. package/core/texture/externalTexture.d.ts +20 -11
  118. package/core/texture/externalTexture.js +46 -46
  119. package/core/texture/texture.d.ts +152 -97
  120. package/core/texture/texture.js +407 -314
  121. package/core/texture/textureFormats.d.ts +42 -23
  122. package/core/texture/textureFormats.js +104 -75
  123. package/core/texture/textureProps.d.ts +7 -10
  124. package/core/texture/textureProps.js +1 -0
  125. package/core/texture/textureUtils.d.ts +8 -0
  126. package/core/texture/textureUtils.js +185 -179
  127. package/core/texture/usageExtension.d.ts +21 -18
  128. package/core/texture/usageExtension.js +13 -17
  129. package/core/unroll/tgpuUnroll.d.ts +20 -19
  130. package/core/unroll/tgpuUnroll.js +82 -91
  131. package/core/valueProxyUtils.d.ts +3 -0
  132. package/core/valueProxyUtils.js +52 -41
  133. package/core/variable/tgpuVariable.d.ts +26 -27
  134. package/core/variable/tgpuVariable.js +93 -96
  135. package/core/vertexLayout/connectAttributesToShader.d.ts +9 -0
  136. package/core/vertexLayout/connectAttributesToShader.js +61 -56
  137. package/core/vertexLayout/vertexAttribute.d.ts +21 -17
  138. package/core/vertexLayout/vertexAttribute.js +1 -0
  139. package/core/vertexLayout/vertexLayout.d.ts +24 -18
  140. package/core/vertexLayout/vertexLayout.js +130 -99
  141. package/core/whitespaces.d.ts +2 -0
  142. package/core/whitespaces.js +16 -0
  143. package/data/alignIO.d.ts +7 -0
  144. package/data/alignIO.js +13 -13
  145. package/data/alignmentOf.d.ts +5 -8
  146. package/data/alignmentOf.js +90 -75
  147. package/data/array.d.ts +6 -9
  148. package/data/array.js +48 -40
  149. package/data/atomic.d.ts +2 -7
  150. package/data/atomic.js +26 -23
  151. package/data/attributes.d.ts +19 -21
  152. package/data/attributes.js +192 -132
  153. package/data/autoStruct.d.ts +36 -3
  154. package/data/autoStruct.js +84 -81
  155. package/data/compiledIO.d.ts +5 -0
  156. package/data/compiledIO.js +231 -214
  157. package/data/dataIO.d.ts +13 -11
  158. package/data/dataIO.js +643 -589
  159. package/data/dataTypes.d.ts +83 -65
  160. package/data/dataTypes.js +66 -68
  161. package/data/deepEqual.d.ts +2 -7
  162. package/data/deepEqual.js +80 -55
  163. package/data/disarray.d.ts +6 -10
  164. package/data/disarray.js +52 -46
  165. package/data/float16Conversion.d.ts +4 -0
  166. package/data/float16Conversion.js +7 -0
  167. package/data/getLongestContiguousPrefix.d.ts +4 -8
  168. package/data/getLongestContiguousPrefix.js +6 -11
  169. package/data/index.d.ts +30 -31
  170. package/data/index.js +39 -172
  171. package/data/instanceToSchema.d.ts +24 -27
  172. package/data/instanceToSchema.js +1 -0
  173. package/data/isContiguous.d.ts +4 -8
  174. package/data/isContiguous.js +6 -11
  175. package/data/matrix.d.ts +21 -21
  176. package/data/matrix.js +513 -505
  177. package/data/numberOps.d.ts +6 -0
  178. package/data/numberOps.js +26 -20
  179. package/data/numeric.d.ts +21 -12
  180. package/data/numeric.js +287 -192
  181. package/data/offsetUtils.d.ts +9 -13
  182. package/data/offsetUtils.js +204 -144
  183. package/data/offsets.d.ts +8 -0
  184. package/data/offsets.js +33 -33
  185. package/data/partialIO.d.ts +13 -8
  186. package/data/partialIO.js +124 -113
  187. package/data/ptr.d.ts +12 -12
  188. package/data/ptr.js +42 -44
  189. package/data/ref.d.ts +40 -27
  190. package/data/ref.js +125 -95
  191. package/data/sampler.d.ts +99 -101
  192. package/data/sampler.js +17 -21
  193. package/data/schemaCallWrapper.d.ts +19 -0
  194. package/data/schemaCallWrapper.js +31 -26
  195. package/data/schemaMemoryLayout.d.ts +8 -0
  196. package/data/schemaMemoryLayout.js +213 -185
  197. package/data/sizeOf.d.ts +4 -8
  198. package/data/sizeOf.js +6 -11
  199. package/data/snippet.d.ts +96 -20
  200. package/data/snippet.js +75 -86
  201. package/data/struct.d.ts +4 -7
  202. package/data/struct.js +51 -39
  203. package/data/texture.d.ts +253 -250
  204. package/data/texture.js +238 -200
  205. package/data/unstruct.d.ts +2 -7
  206. package/data/unstruct.js +43 -37
  207. package/data/vector.d.ts +33 -21
  208. package/data/vector.js +234 -221
  209. package/data/vectorImpl.d.ts +231 -0
  210. package/data/vectorImpl.js +563 -515
  211. package/data/vectorOps.d.ts +63 -0
  212. package/data/vectorOps.js +642 -630
  213. package/data/vertexFormatData.d.ts +181 -184
  214. package/data/vertexFormatData.js +104 -106
  215. package/data/wgslTypes.d.ts +665 -600
  216. package/data/wgslTypes.js +220 -198
  217. package/errors.d.ts +50 -24
  218. package/errors.js +146 -120
  219. package/execMode.d.ts +16 -0
  220. package/execMode.js +47 -40
  221. package/extension.d.ts +13 -8
  222. package/extension.js +10 -16
  223. package/getGPUValue.d.ts +1 -0
  224. package/getGPUValue.js +2 -7
  225. package/index.d.ts +28 -68
  226. package/index.js +8 -28
  227. package/indexNamedExports.d.ts +69 -42
  228. package/indexNamedExports.js +25 -0
  229. package/internal.d.ts +16 -0
  230. package/internal.js +12 -0
  231. package/mathUtils.d.ts +5 -0
  232. package/mathUtils.js +7 -11
  233. package/memo.d.ts +11 -0
  234. package/memo.js +20 -22
  235. package/minify.d.ts +5 -0
  236. package/minify.js +93 -0
  237. package/nameUtils.d.ts +29 -0
  238. package/nameUtils.js +428 -398
  239. package/package.json +9 -3
  240. package/resolutionCtx.d.ts +162 -22
  241. package/resolutionCtx.js +911 -624
  242. package/serial/registry.d.ts +15 -0
  243. package/serial/registry.js +106 -0
  244. package/serial/restore.d.ts +49 -0
  245. package/serial/restore.js +68 -0
  246. package/serial/schema.d.ts +58 -0
  247. package/serial/schema.js +209 -0
  248. package/serial/types.d.ts +5 -0
  249. package/serial/types.js +1 -0
  250. package/shared/env.d.ts +9 -0
  251. package/shared/env.js +9 -12
  252. package/shared/generators.d.ts +4 -0
  253. package/shared/generators.js +10 -12
  254. package/shared/meta.d.ts +29 -14
  255. package/shared/meta.js +71 -55
  256. package/shared/normalizeMetadata.d.ts +32 -27
  257. package/shared/normalizeMetadata.js +23 -36
  258. package/shared/repr.d.ts +73 -55
  259. package/shared/repr.js +1 -0
  260. package/shared/soul.d.ts +17 -0
  261. package/shared/soul.js +1 -0
  262. package/shared/stringify.d.ts +2 -0
  263. package/shared/stringify.js +29 -20
  264. package/shared/symbols.d.ts +26 -20
  265. package/shared/symbols.js +79 -79
  266. package/shared/tseynit.d.ts +2 -0
  267. package/shared/tseynit.js +160 -75
  268. package/shared/utilityTypes.d.ts +30 -14
  269. package/shared/utilityTypes.js +2 -6
  270. package/shared/vertexFormat.d.ts +41 -43
  271. package/shared/vertexFormat.js +59 -62
  272. package/std/array.d.ts +2 -7
  273. package/std/array.js +18 -23
  274. package/std/atomic.d.ts +14 -18
  275. package/std/atomic.js +96 -95
  276. package/std/bitcast.d.ts +193 -10
  277. package/std/bitcast.js +309 -39
  278. package/std/boolean.d.ts +19 -33
  279. package/std/boolean.js +296 -288
  280. package/std/copy.d.ts +2 -7
  281. package/std/copy.js +27 -24
  282. package/std/derivative.d.ts +11 -15
  283. package/std/derivative.js +56 -79
  284. package/std/discard.d.ts +1 -6
  285. package/std/discard.js +7 -14
  286. package/std/environment.d.ts +19 -14
  287. package/std/environment.js +71 -51
  288. package/std/extensions.d.ts +2 -8
  289. package/std/extensions.js +10 -11
  290. package/std/index.d.ts +20 -24
  291. package/std/index.js +32 -187
  292. package/std/matrix.d.ts +6 -12
  293. package/std/matrix.js +60 -69
  294. package/std/numeric.d.ts +143 -146
  295. package/std/numeric.js +858 -749
  296. package/std/operators.d.ts +19 -27
  297. package/std/operators.js +227 -193
  298. package/std/packing.d.ts +5 -11
  299. package/std/packing.js +67 -75
  300. package/std/range.d.ts +6 -11
  301. package/std/range.js +48 -36
  302. package/std/subgroup.d.ts +33 -37
  303. package/std/subgroup.js +180 -217
  304. package/std/texture.d.ts +70 -38
  305. package/std/texture.js +176 -172
  306. package/taskQueue.d.ts +6 -0
  307. package/taskQueue.js +30 -0
  308. package/tgpu.d.ts +16 -0
  309. package/tgpu.js +17 -44
  310. package/tgpuBindGroupLayout.d.ts +132 -152
  311. package/tgpuBindGroupLayout.js +346 -268
  312. package/tgpuLogger.d.ts +34 -0
  313. package/tgpuLogger.js +63 -0
  314. package/tgpuUnstable.d.ts +16 -22
  315. package/tgpuUnstable.js +13 -35
  316. package/tgsl/accessIndex.d.ts +2 -0
  317. package/tgsl/accessIndex.js +76 -33
  318. package/tgsl/accessProp.d.ts +2 -0
  319. package/tgsl/accessProp.js +142 -100
  320. package/tgsl/accessStructProp.d.ts +5 -0
  321. package/tgsl/accessStructProp.js +18 -0
  322. package/tgsl/consoleLog/deserializers.d.ts +13 -0
  323. package/tgsl/consoleLog/deserializers.js +119 -103
  324. package/tgsl/consoleLog/logGenerator.d.ts +21 -0
  325. package/tgsl/consoleLog/logGenerator.js +85 -80
  326. package/tgsl/consoleLog/serializers.d.ts +21 -0
  327. package/tgsl/consoleLog/serializers.js +119 -100
  328. package/tgsl/consoleLog/types.d.ts +40 -39
  329. package/tgsl/consoleLog/types.js +1 -0
  330. package/tgsl/conversion.d.ts +33 -0
  331. package/tgsl/conversion.js +272 -193
  332. package/tgsl/forOfUtils.d.ts +15 -0
  333. package/tgsl/forOfUtils.js +85 -70
  334. package/tgsl/generationHelpers.d.ts +22 -39
  335. package/tgsl/generationHelpers.js +85 -58
  336. package/tgsl/infixDispatch.d.ts +70 -0
  337. package/tgsl/infixDispatch.js +48 -46
  338. package/tgsl/jsPolyfills.d.ts +16 -19
  339. package/tgsl/jsPolyfills.js +44 -42
  340. package/tgsl/makeDereferenceable.d.ts +48 -0
  341. package/tgsl/makeDereferenceable.js +86 -0
  342. package/tgsl/makeResolvable.d.ts +22 -0
  343. package/tgsl/makeResolvable.js +33 -0
  344. package/tgsl/shaderGenerator.d.ts +77 -17
  345. package/tgsl/shaderGenerator.js +1 -0
  346. package/tgsl/shellless.d.ts +6 -9
  347. package/tgsl/shellless.js +73 -43
  348. package/tgsl/wgslGenerator.d.ts +66 -59
  349. package/tgsl/wgslGenerator.js +1344 -747
  350. package/types.d.ts +287 -221
  351. package/types.js +61 -44
  352. package/unwrapper.d.ts +31 -26
  353. package/unwrapper.js +1 -0
  354. package/wgslExtensions.d.ts +3 -5
  355. package/wgslExtensions.js +12 -16
  356. package/_virtual/rolldown_runtime.js +0 -13
  357. package/core/buffer/bufferShorthand.d.ts +0 -50
  358. package/core/buffer/bufferShorthand.js +0 -55
  359. package/core/pipeline/applyPipelineState.js +0 -37
  360. package/package.js +0 -5
  361. package/tgsl/shaderGenerator_members.d.ts +0 -33
  362. package/tgsl/shaderGenerator_members.js +0 -12
package/data/snippet.js CHANGED
@@ -1,99 +1,88 @@
1
+ import { undecorate } from "./dataTypes.js";
1
2
  import { DEV } from "../shared/env.js";
2
3
  import { isNumericSchema } from "./wgslTypes.js";
3
- import { undecorate } from "./dataTypes.js";
4
-
5
- //#region src/data/snippet.ts
6
4
  /**
7
- * What happens to a snippet's origin when it's deep copied in JS, and left as is in WGSL?
8
- * e.g. `vec3f(vec3f(0, 1, 2))`
9
- */
10
- function fallthroughCopyOrigin(origin) {
11
- if (origin === "runtime" || origin === "constant") return origin;
12
- return "runtime";
5
+ * What happens to a snippet's origin when it's deep copied in JS, and left as is in WGSL?
6
+ * e.g. `vec3f(vec3f(0, 1, 2))`
7
+ */
8
+ export function fallthroughCopyOrigin(origin) {
9
+ if (origin === 'runtime' || // runtime values stay runtime
10
+ origin === 'constant' // constant values stay constant
11
+ ) {
12
+ // The origin is kept as-is
13
+ return origin;
14
+ }
15
+ // All other origins become runtime
16
+ return 'runtime';
13
17
  }
14
18
  /**
15
- * Whether a snippet aliases a value that lives outside the current expression.
16
- *
17
- * @example
18
- * ```ts
19
- * function foo(a: number) {
20
- * const color = d.vec3f(1, 2, 3);
21
- * return color * a;
22
- * }
23
- *
24
- * // References:
25
- * // - color
26
- * // - a
27
- * //
28
- * // Not references:
29
- * // - d.vec3f(1, 2, 3)
30
- * // - color * a
31
- * ```
32
- */
33
- function isAlias(snippet) {
34
- return !(snippet.origin === "runtime" || snippet.origin === "constant");
19
+ * Whether a snippet aliases a value that lives outside the current expression.
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * function foo(a: number) {
24
+ * const color = d.vec3f(1, 2, 3);
25
+ * return color * a;
26
+ * }
27
+ *
28
+ * // References:
29
+ * // - color
30
+ * // - a
31
+ * //
32
+ * // Not references:
33
+ * // - d.vec3f(1, 2, 3)
34
+ * // - color * a
35
+ * ```
36
+ */
37
+ export function isAlias(snippet) {
38
+ return !(snippet.origin === 'runtime' || snippet.origin === 'constant');
35
39
  }
36
- const originToPtrParams = {
37
- uniform: {
38
- space: "uniform",
39
- access: "read"
40
- },
41
- readonly: {
42
- space: "storage",
43
- access: "read"
44
- },
45
- mutable: {
46
- space: "storage",
47
- access: "read-write"
48
- },
49
- workgroup: {
50
- space: "workgroup",
51
- access: "read-write"
52
- },
53
- private: {
54
- space: "private",
55
- access: "read-write"
56
- },
57
- function: {
58
- space: "function",
59
- access: "read-write"
60
- },
61
- "local-def": {
62
- space: "function",
63
- access: "read-write"
64
- }
65
- };
66
- var SnippetImpl = class {
67
- value;
68
- dataType;
69
- origin;
70
- possibleSideEffects;
71
- constructor(value, dataType, origin, possibleSideEffects) {
72
- this.value = value;
73
- this.dataType = dataType;
74
- this.origin = origin;
75
- this.possibleSideEffects = possibleSideEffects;
76
- }
40
+ export const originToPtrParams = {
41
+ uniform: { space: 'uniform', access: 'read' },
42
+ readonly: { space: 'storage', access: 'read' },
43
+ mutable: { space: 'storage', access: 'read-write' },
44
+ workgroup: { space: 'workgroup', access: 'read-write' },
45
+ private: { space: 'private', access: 'read-write' },
46
+ function: { space: 'function', access: 'read-write' },
47
+ // Local declarations are also in the `function` address space
48
+ 'local-def': { space: 'function', access: 'read-write' },
77
49
  };
78
- function isSnippet(value) {
79
- return value instanceof SnippetImpl;
50
+ class SnippetImpl {
51
+ value;
52
+ dataType;
53
+ origin;
54
+ possibleSideEffects;
55
+ constructor(value, dataType, origin, possibleSideEffects) {
56
+ this.value = value;
57
+ this.dataType = dataType;
58
+ this.origin = origin;
59
+ this.possibleSideEffects = possibleSideEffects;
60
+ }
61
+ }
62
+ export function isSnippet(value) {
63
+ return value instanceof SnippetImpl;
64
+ }
65
+ export function isSnippetNumeric(snippet) {
66
+ return isNumericSchema(snippet.dataType);
80
67
  }
81
- function isSnippetNumeric(snippet) {
82
- return isNumericSchema(snippet.dataType);
68
+ export function snip(value, dataType, origin, possibleSideEffects = true) {
69
+ if (DEV && isSnippet(value)) {
70
+ // An early error, but not worth checking every time in production
71
+ throw new Error('Cannot nest snippets');
72
+ }
73
+ return new SnippetImpl(value,
74
+ // We don't care about attributes in snippet land, so we discard that information.
75
+ undecorate(dataType), origin, possibleSideEffects);
83
76
  }
84
- function snip(value, dataType, origin, possibleSideEffects = true) {
85
- if (DEV && isSnippet(value)) throw new Error("Cannot nest snippets");
86
- return new SnippetImpl(value, undecorate(dataType), origin, possibleSideEffects);
77
+ export function withDataType(dataType, snippet) {
78
+ return new SnippetImpl(snippet.value, dataType, snippet.origin, snippet.possibleSideEffects);
87
79
  }
88
- function withDataType(dataType, snippet) {
89
- return new SnippetImpl(snippet.value, dataType, snippet.origin, snippet.possibleSideEffects);
80
+ export function withValue(value, snippet) {
81
+ return new SnippetImpl(value, snippet.dataType, snippet.origin, snippet.possibleSideEffects);
90
82
  }
91
- function withSideEffects(possibleSideEffects, snippet) {
92
- return new SnippetImpl(snippet.value, snippet.dataType, snippet.origin, possibleSideEffects);
83
+ export function withSideEffects(possibleSideEffects, snippet) {
84
+ return new SnippetImpl(snippet.value, snippet.dataType, snippet.origin, possibleSideEffects);
93
85
  }
94
- function noSideEffects(snippet) {
95
- return withSideEffects(false, snippet);
86
+ export function noSideEffects(snippet) {
87
+ return withSideEffects(/* possibleSideEffects */ false, snippet);
96
88
  }
97
-
98
- //#endregion
99
- export { fallthroughCopyOrigin, isAlias, isSnippet, isSnippetNumeric, noSideEffects, originToPtrParams, snip, withDataType };
package/data/struct.d.ts CHANGED
@@ -1,7 +1,4 @@
1
- import { AnyWgslData, WgslStruct } from "./wgslTypes.js";
2
-
3
- //#region src/data/struct.d.ts
4
-
1
+ import type { AnyWgslData, BaseData, WgslStruct } from './wgslTypes.ts';
5
2
  /**
6
3
  * Creates a struct schema that can be used to construct GPU buffers.
7
4
  * Ensures proper alignment and padding of properties (as opposed to a `d.unstruct` schema).
@@ -13,6 +10,6 @@ import { AnyWgslData, WgslStruct } from "./wgslTypes.js";
13
10
  * @param props Record with `string` keys and `TgpuData` values,
14
11
  * each entry describing one struct member.
15
12
  */
16
- declare function struct<TProps extends Record<string, AnyWgslData>>(props: TProps): WgslStruct<TProps>;
17
- //#endregion
18
- export { struct };
13
+ export declare function struct<TProps extends Record<string, AnyWgslData>>(props: TProps): WgslStruct<TProps>;
14
+ export declare function abstruct<TProps extends Record<string, AnyWgslData>>(props: TProps): WgslStruct<TProps>;
15
+ export declare function INTERNAL_createStruct<TProps extends Record<string, BaseData>>(props: TProps, isAbstruct: boolean): WgslStruct<TProps>;
package/data/struct.js CHANGED
@@ -1,47 +1,59 @@
1
- import { $internal } from "../shared/symbols.js";
1
+ import { validateProp } from "../nameUtils.js";
2
2
  import { getName, setName } from "../shared/meta.js";
3
+ import { $internal } from "../shared/symbols.js";
3
4
  import { schemaCallWrapper } from "./schemaCallWrapper.js";
4
- import { validateProp } from "../nameUtils.js";
5
-
6
- //#region src/data/struct.ts
5
+ // ----------
6
+ // Public API
7
+ // ----------
7
8
  /**
8
- * Creates a struct schema that can be used to construct GPU buffers.
9
- * Ensures proper alignment and padding of properties (as opposed to a `d.unstruct` schema).
10
- * The order of members matches the passed in properties object.
11
- *
12
- * @example
13
- * const CircleStruct = d.struct({ radius: d.f32, pos: d.vec3f });
14
- *
15
- * @param props Record with `string` keys and `TgpuData` values,
16
- * each entry describing one struct member.
17
- */
18
- function struct(props) {
19
- return INTERNAL_createStruct(props, false);
9
+ * Creates a struct schema that can be used to construct GPU buffers.
10
+ * Ensures proper alignment and padding of properties (as opposed to a `d.unstruct` schema).
11
+ * The order of members matches the passed in properties object.
12
+ *
13
+ * @example
14
+ * const CircleStruct = d.struct({ radius: d.f32, pos: d.vec3f });
15
+ *
16
+ * @param props Record with `string` keys and `TgpuData` values,
17
+ * each entry describing one struct member.
18
+ */
19
+ export function struct(props) {
20
+ return INTERNAL_createStruct(props, false);
20
21
  }
21
- function abstruct(props) {
22
- return INTERNAL_createStruct(props, true);
22
+ export function abstruct(props) {
23
+ return INTERNAL_createStruct(props, true);
23
24
  }
24
- function INTERNAL_createStruct(props, isAbstruct) {
25
- Object.keys(props).forEach((key) => {
26
- const result = /* @__PURE__ */ validateProp(key);
27
- if (!result.success) throw new Error(`Invalid property key '${key}'${result.error ? `: ${result.error}` : ""}`);
28
- });
29
- const structSchema = (instanceProps) => Object.fromEntries(Object.entries(props).map(([key, schema]) => [key, schemaCallWrapper(schema, instanceProps?.[key])]));
30
- Object.setPrototypeOf(structSchema, WgslStructImpl);
31
- structSchema.propTypes = props;
32
- Object.defineProperty(structSchema, $internal, { value: { isAbstruct } });
33
- return structSchema;
25
+ // --------------
26
+ // Implementation
27
+ // --------------
28
+ export function INTERNAL_createStruct(props, isAbstruct) {
29
+ Object.keys(props).forEach((key) => {
30
+ const result = validateProp(key);
31
+ if (!result.success) {
32
+ throw new Error(`Invalid property key '${key}'${result.error ? `: ${result.error}` : ''}`);
33
+ }
34
+ });
35
+ // In the schema call, create and return a deep copy
36
+ // by wrapping all the values in corresponding schema calls.
37
+ const structSchema = (instanceProps) => Object.fromEntries(Object.entries(props).map(([key, schema]) => [
38
+ key,
39
+ schemaCallWrapper(schema, instanceProps?.[key]),
40
+ ]));
41
+ Object.setPrototypeOf(structSchema, WgslStructImpl);
42
+ structSchema.propTypes = props;
43
+ Object.defineProperty(structSchema, $internal, {
44
+ value: {
45
+ isAbstruct,
46
+ },
47
+ });
48
+ return structSchema;
34
49
  }
35
50
  const WgslStructImpl = {
36
- type: "struct",
37
- $name(label) {
38
- setName(this, label);
39
- return this;
40
- },
41
- toString() {
42
- return `struct:${getName(this) ?? "<unnamed>"}`;
43
- }
51
+ type: 'struct',
52
+ $name(label) {
53
+ setName(this, label);
54
+ return this;
55
+ },
56
+ toString() {
57
+ return `struct:${getName(this) ?? '<unnamed>'}`;
58
+ },
44
59
  };
45
-
46
- //#endregion
47
- export { INTERNAL_createStruct, abstruct, struct };