typegpu 0.11.9 → 0.12.1

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 (366) hide show
  1. package/bin.mjs +28 -6
  2. package/builtin.d.ts +51 -53
  3. package/builtin.js +30 -34
  4. package/common/fullScreenTriangle.d.ts +2 -10
  5. package/common/fullScreenTriangle.js +20 -28
  6. package/common/index.d.ts +2 -9
  7. package/common/index.js +3 -12
  8. package/common/writeSoA.d.ts +11 -12
  9. package/common/writeSoA.js +88 -76
  10. package/core/buffer/buffer.d.ts +79 -62
  11. package/core/buffer/buffer.js +283 -205
  12. package/core/buffer/bufferBinding.d.ts +71 -0
  13. package/core/buffer/bufferBinding.js +154 -0
  14. package/core/buffer/bufferUsage.d.ts +14 -45
  15. package/core/buffer/bufferUsage.js +1 -171
  16. package/core/buffer/laidOutBuffer.d.ts +25 -0
  17. package/core/buffer/laidOutBuffer.js +55 -0
  18. package/core/commandEncoder/attachments.d.ts +125 -0
  19. package/core/commandEncoder/attachments.js +29 -0
  20. package/core/commandEncoder/commandEncoder.d.ts +53 -0
  21. package/core/commandEncoder/commandEncoder.js +56 -0
  22. package/core/commandEncoder/computePass.d.ts +58 -0
  23. package/core/commandEncoder/computePass.js +63 -0
  24. package/core/commandEncoder/renderPass.d.ts +121 -0
  25. package/core/commandEncoder/renderPass.js +196 -0
  26. package/core/constant/tgpuConstant.d.ts +26 -26
  27. package/core/constant/tgpuConstant.js +76 -65
  28. package/core/declare/tgpuDeclare.d.ts +3 -6
  29. package/core/declare/tgpuDeclare.js +36 -36
  30. package/core/function/autoIO.d.ts +61 -33
  31. package/core/function/autoIO.js +68 -73
  32. package/core/function/comptime.d.ts +11 -13
  33. package/core/function/comptime.js +60 -52
  34. package/core/function/createCallableSchema.d.ts +16 -0
  35. package/core/function/createCallableSchema.js +50 -40
  36. package/core/function/dualImpl.d.ts +44 -0
  37. package/core/function/dualImpl.js +71 -50
  38. package/core/function/entryInputRouter.d.ts +26 -0
  39. package/core/function/entryInputRouter.js +31 -33
  40. package/core/function/extractArgs.d.ts +38 -0
  41. package/core/function/extractArgs.js +202 -200
  42. package/core/function/fnCore.d.ts +44 -5
  43. package/core/function/fnCore.js +148 -93
  44. package/core/function/fnTypes.d.ts +31 -29
  45. package/core/function/fnTypes.js +1 -0
  46. package/core/function/ioSchema.d.ts +12 -10
  47. package/core/function/ioSchema.js +65 -47
  48. package/core/function/shelllessImpl.d.ts +9 -12
  49. package/core/function/shelllessImpl.js +17 -22
  50. package/core/function/templateUtils.d.ts +2 -0
  51. package/core/function/templateUtils.js +9 -8
  52. package/core/function/tgpuComputeFn.d.ts +26 -28
  53. package/core/function/tgpuComputeFn.js +47 -48
  54. package/core/function/tgpuFn.d.ts +34 -37
  55. package/core/function/tgpuFn.js +179 -153
  56. package/core/function/tgpuFragmentFn.d.ts +52 -53
  57. package/core/function/tgpuFragmentFn.js +63 -56
  58. package/core/function/tgpuVertexFn.d.ts +36 -39
  59. package/core/function/tgpuVertexFn.js +56 -53
  60. package/core/pipeline/computePipeline.d.ts +141 -53
  61. package/core/pipeline/computePipeline.js +291 -225
  62. package/core/pipeline/connectAttachmentToShader.d.ts +4 -0
  63. package/core/pipeline/connectAttachmentToShader.js +25 -22
  64. package/core/pipeline/connectTargetsToShader.d.ts +3 -0
  65. package/core/pipeline/connectTargetsToShader.js +29 -27
  66. package/core/pipeline/drawState.d.ts +52 -0
  67. package/core/pipeline/drawState.js +225 -0
  68. package/core/pipeline/performanceTracker.d.ts +14 -0
  69. package/core/pipeline/performanceTracker.js +34 -0
  70. package/core/pipeline/pipelineUtils.d.ts +18 -0
  71. package/core/pipeline/pipelineUtils.js +54 -25
  72. package/core/pipeline/priors.d.ts +1 -0
  73. package/core/pipeline/priors.js +12 -0
  74. package/core/pipeline/renderPipeline.d.ts +246 -261
  75. package/core/pipeline/renderPipeline.js +487 -480
  76. package/core/pipeline/timeable.d.ts +28 -18
  77. package/core/pipeline/timeable.js +90 -52
  78. package/core/pipeline/typeGuards.d.ts +17 -0
  79. package/core/pipeline/typeGuards.js +52 -22
  80. package/core/pipeline/webgpuLimitations.d.ts +10 -0
  81. package/core/pipeline/webgpuLimitations.js +81 -0
  82. package/core/querySet/querySet.d.ts +26 -21
  83. package/core/querySet/querySet.js +127 -103
  84. package/core/rawCodeSnippet/tgpuRawCodeSnippet.d.ts +13 -18
  85. package/core/rawCodeSnippet/tgpuRawCodeSnippet.js +89 -90
  86. package/core/resolve/externals.d.ts +25 -8
  87. package/core/resolve/externals.js +78 -54
  88. package/core/resolve/namespace.d.ts +22 -25
  89. package/core/resolve/namespace.js +16 -21
  90. package/core/resolve/resolvableString.d.ts +7 -0
  91. package/core/resolve/resolvableString.js +13 -0
  92. package/core/resolve/resolveData.d.ts +10 -0
  93. package/core/resolve/resolveData.js +162 -121
  94. package/core/resolve/stitch.d.ts +8 -0
  95. package/core/resolve/stitch.js +23 -21
  96. package/core/resolve/tgpuResolve.d.ts +55 -53
  97. package/core/resolve/tgpuResolve.js +106 -53
  98. package/core/root/configurableImpl.d.ts +10 -0
  99. package/core/root/configurableImpl.js +17 -19
  100. package/core/root/init.d.ts +76 -38
  101. package/core/root/init.js +346 -455
  102. package/core/root/rootTypes.d.ts +461 -636
  103. package/core/root/rootTypes.js +1 -0
  104. package/core/sampler/sampler.d.ts +50 -31
  105. package/core/sampler/sampler.js +120 -113
  106. package/core/simulate/tgpuSimulate.d.ts +9 -12
  107. package/core/simulate/tgpuSimulate.js +68 -71
  108. package/core/slot/accessor.d.ts +36 -13
  109. package/core/slot/accessor.js +138 -91
  110. package/core/slot/internalSlots.d.ts +2 -0
  111. package/core/slot/internalSlots.js +1 -6
  112. package/core/slot/lazy.d.ts +2 -6
  113. package/core/slot/lazy.js +71 -39
  114. package/core/slot/slot.d.ts +2 -6
  115. package/core/slot/slot.js +45 -38
  116. package/core/slot/slotTypes.d.ts +78 -80
  117. package/core/slot/slotTypes.js +11 -16
  118. package/core/texture/externalTexture.d.ts +20 -11
  119. package/core/texture/externalTexture.js +46 -46
  120. package/core/texture/texture.d.ts +152 -97
  121. package/core/texture/texture.js +407 -314
  122. package/core/texture/textureFormats.d.ts +42 -23
  123. package/core/texture/textureFormats.js +104 -75
  124. package/core/texture/textureProps.d.ts +7 -10
  125. package/core/texture/textureProps.js +1 -0
  126. package/core/texture/textureUtils.d.ts +8 -0
  127. package/core/texture/textureUtils.js +185 -179
  128. package/core/texture/usageExtension.d.ts +21 -18
  129. package/core/texture/usageExtension.js +13 -17
  130. package/core/unroll/tgpuUnroll.d.ts +20 -19
  131. package/core/unroll/tgpuUnroll.js +82 -91
  132. package/core/valueProxyUtils.d.ts +3 -0
  133. package/core/valueProxyUtils.js +52 -41
  134. package/core/variable/tgpuVariable.d.ts +26 -27
  135. package/core/variable/tgpuVariable.js +93 -96
  136. package/core/vertexLayout/connectAttributesToShader.d.ts +9 -0
  137. package/core/vertexLayout/connectAttributesToShader.js +61 -56
  138. package/core/vertexLayout/vertexAttribute.d.ts +21 -17
  139. package/core/vertexLayout/vertexAttribute.js +1 -0
  140. package/core/vertexLayout/vertexLayout.d.ts +24 -18
  141. package/core/vertexLayout/vertexLayout.js +130 -99
  142. package/core/whitespaces.d.ts +2 -0
  143. package/core/whitespaces.js +16 -0
  144. package/data/alignIO.d.ts +7 -0
  145. package/data/alignIO.js +13 -13
  146. package/data/alignmentOf.d.ts +5 -8
  147. package/data/alignmentOf.js +90 -75
  148. package/data/array.d.ts +17 -9
  149. package/data/array.js +57 -40
  150. package/data/atomic.d.ts +2 -7
  151. package/data/atomic.js +26 -23
  152. package/data/attributes.d.ts +19 -21
  153. package/data/attributes.js +192 -132
  154. package/data/autoStruct.d.ts +36 -3
  155. package/data/autoStruct.js +84 -81
  156. package/data/compiledIO.d.ts +5 -0
  157. package/data/compiledIO.js +231 -215
  158. package/data/dataIO.d.ts +13 -11
  159. package/data/dataIO.js +643 -589
  160. package/data/dataTypes.d.ts +83 -65
  161. package/data/dataTypes.js +66 -68
  162. package/data/deepEqual.d.ts +2 -7
  163. package/data/deepEqual.js +80 -55
  164. package/data/disarray.d.ts +6 -10
  165. package/data/disarray.js +52 -46
  166. package/data/float16Conversion.d.ts +4 -0
  167. package/data/float16Conversion.js +7 -0
  168. package/data/generalizeFn.d.ts +25 -0
  169. package/data/generalizeFn.js +89 -0
  170. package/data/getLongestContiguousPrefix.d.ts +4 -8
  171. package/data/getLongestContiguousPrefix.js +6 -11
  172. package/data/index.d.ts +30 -31
  173. package/data/index.js +39 -172
  174. package/data/instanceToSchema.d.ts +24 -27
  175. package/data/instanceToSchema.js +1 -0
  176. package/data/isContiguous.d.ts +4 -8
  177. package/data/isContiguous.js +6 -11
  178. package/data/matrix.d.ts +21 -21
  179. package/data/matrix.js +513 -505
  180. package/data/numberOps.d.ts +5 -0
  181. package/data/numberOps.js +21 -21
  182. package/data/numeric.d.ts +21 -12
  183. package/data/numeric.js +287 -197
  184. package/data/offsetUtils.d.ts +9 -13
  185. package/data/offsetUtils.js +204 -144
  186. package/data/offsets.d.ts +8 -0
  187. package/data/offsets.js +33 -33
  188. package/data/partialIO.d.ts +13 -8
  189. package/data/partialIO.js +124 -113
  190. package/data/ptr.d.ts +12 -12
  191. package/data/ptr.js +42 -44
  192. package/data/ref.d.ts +40 -27
  193. package/data/ref.js +125 -95
  194. package/data/sampler.d.ts +99 -101
  195. package/data/sampler.js +17 -21
  196. package/data/schemaCallWrapper.d.ts +19 -0
  197. package/data/schemaCallWrapper.js +31 -26
  198. package/data/schemaMemoryLayout.d.ts +8 -0
  199. package/data/schemaMemoryLayout.js +213 -185
  200. package/data/sizeOf.d.ts +4 -8
  201. package/data/sizeOf.js +6 -11
  202. package/data/snippet.d.ts +96 -20
  203. package/data/snippet.js +75 -86
  204. package/data/struct.d.ts +4 -7
  205. package/data/struct.js +51 -39
  206. package/data/texture.d.ts +253 -250
  207. package/data/texture.js +238 -200
  208. package/data/unstruct.d.ts +2 -7
  209. package/data/unstruct.js +43 -37
  210. package/data/vector.d.ts +33 -21
  211. package/data/vector.js +234 -221
  212. package/data/vectorImpl.d.ts +231 -0
  213. package/data/vectorImpl.js +563 -515
  214. package/data/vectorOps.d.ts +25 -0
  215. package/data/vectorOps.js +118 -669
  216. package/data/vertexFormatData.d.ts +181 -184
  217. package/data/vertexFormatData.js +104 -106
  218. package/data/wgslTypes.d.ts +665 -600
  219. package/data/wgslTypes.js +220 -198
  220. package/errors.d.ts +50 -24
  221. package/errors.js +146 -126
  222. package/execMode.d.ts +16 -0
  223. package/execMode.js +47 -40
  224. package/extension.d.ts +13 -8
  225. package/extension.js +10 -16
  226. package/getGPUValue.d.ts +1 -0
  227. package/getGPUValue.js +2 -7
  228. package/index.d.ts +28 -68
  229. package/index.js +8 -28
  230. package/indexNamedExports.d.ts +69 -42
  231. package/indexNamedExports.js +25 -0
  232. package/internal.d.ts +16 -0
  233. package/internal.js +12 -0
  234. package/mathUtils.d.ts +5 -0
  235. package/mathUtils.js +7 -11
  236. package/memo.d.ts +11 -0
  237. package/memo.js +20 -22
  238. package/minify.d.ts +5 -0
  239. package/minify.js +93 -0
  240. package/nameUtils.d.ts +29 -0
  241. package/nameUtils.js +427 -394
  242. package/package.json +5 -1
  243. package/resolutionCtx.d.ts +162 -22
  244. package/resolutionCtx.js +911 -629
  245. package/serial/registry.d.ts +15 -0
  246. package/serial/registry.js +106 -0
  247. package/serial/restore.d.ts +49 -0
  248. package/serial/restore.js +68 -0
  249. package/serial/schema.d.ts +58 -0
  250. package/serial/schema.js +209 -0
  251. package/serial/types.d.ts +5 -0
  252. package/serial/types.js +1 -0
  253. package/shared/env.d.ts +9 -0
  254. package/shared/env.js +9 -12
  255. package/shared/generators.d.ts +4 -0
  256. package/shared/generators.js +10 -12
  257. package/shared/meta.d.ts +29 -14
  258. package/shared/meta.js +71 -55
  259. package/shared/normalizeMetadata.d.ts +32 -27
  260. package/shared/normalizeMetadata.js +23 -36
  261. package/shared/repr.d.ts +73 -55
  262. package/shared/repr.js +1 -0
  263. package/shared/soul.d.ts +17 -0
  264. package/shared/soul.js +1 -0
  265. package/shared/stringify.d.ts +2 -0
  266. package/shared/stringify.js +29 -20
  267. package/shared/symbols.d.ts +26 -20
  268. package/shared/symbols.js +79 -79
  269. package/shared/tseynit.d.ts +2 -0
  270. package/shared/tseynit.js +160 -75
  271. package/shared/utilityTypes.d.ts +30 -14
  272. package/shared/utilityTypes.js +2 -6
  273. package/shared/vertexFormat.d.ts +41 -43
  274. package/shared/vertexFormat.js +59 -62
  275. package/std/array.d.ts +2 -7
  276. package/std/array.js +18 -23
  277. package/std/atomic.d.ts +14 -18
  278. package/std/atomic.js +96 -95
  279. package/std/bitcast.d.ts +193 -10
  280. package/std/bitcast.js +309 -39
  281. package/std/boolean.d.ts +19 -33
  282. package/std/boolean.js +296 -292
  283. package/std/copy.d.ts +2 -7
  284. package/std/copy.js +27 -24
  285. package/std/derivative.d.ts +11 -15
  286. package/std/derivative.js +56 -79
  287. package/std/discard.d.ts +1 -6
  288. package/std/discard.js +7 -14
  289. package/std/environment.d.ts +19 -14
  290. package/std/environment.js +71 -51
  291. package/std/extensions.d.ts +2 -8
  292. package/std/extensions.js +10 -11
  293. package/std/index.d.ts +20 -24
  294. package/std/index.js +32 -187
  295. package/std/matrix.d.ts +6 -12
  296. package/std/matrix.js +60 -69
  297. package/std/numeric.d.ts +150 -146
  298. package/std/numeric.js +771 -727
  299. package/std/operators.d.ts +19 -27
  300. package/std/operators.js +195 -194
  301. package/std/packing.d.ts +5 -11
  302. package/std/packing.js +67 -75
  303. package/std/range.d.ts +6 -11
  304. package/std/range.js +48 -36
  305. package/std/subgroup.d.ts +33 -37
  306. package/std/subgroup.js +180 -217
  307. package/std/texture.d.ts +70 -38
  308. package/std/texture.js +176 -172
  309. package/taskQueue.d.ts +6 -0
  310. package/taskQueue.js +30 -0
  311. package/tgpu.d.ts +16 -0
  312. package/tgpu.js +17 -44
  313. package/tgpuBindGroupLayout.d.ts +132 -152
  314. package/tgpuBindGroupLayout.js +346 -268
  315. package/tgpuLogger.d.ts +34 -0
  316. package/tgpuLogger.js +64 -0
  317. package/tgpuUnstable.d.ts +16 -22
  318. package/tgpuUnstable.js +13 -35
  319. package/tgsl/accessIndex.d.ts +2 -0
  320. package/tgsl/accessIndex.js +76 -33
  321. package/tgsl/accessProp.d.ts +2 -0
  322. package/tgsl/accessProp.js +142 -101
  323. package/tgsl/accessStructProp.d.ts +5 -0
  324. package/tgsl/accessStructProp.js +13 -15
  325. package/tgsl/consoleLog/deserializers.d.ts +13 -0
  326. package/tgsl/consoleLog/deserializers.js +119 -103
  327. package/tgsl/consoleLog/logGenerator.d.ts +21 -0
  328. package/tgsl/consoleLog/logGenerator.js +85 -80
  329. package/tgsl/consoleLog/serializers.d.ts +21 -0
  330. package/tgsl/consoleLog/serializers.js +119 -100
  331. package/tgsl/consoleLog/types.d.ts +40 -39
  332. package/tgsl/consoleLog/types.js +1 -0
  333. package/tgsl/conversion.d.ts +33 -0
  334. package/tgsl/conversion.js +271 -216
  335. package/tgsl/forOfUtils.d.ts +15 -0
  336. package/tgsl/forOfUtils.js +85 -70
  337. package/tgsl/generationHelpers.d.ts +22 -39
  338. package/tgsl/generationHelpers.js +85 -58
  339. package/tgsl/infixDispatch.d.ts +70 -0
  340. package/tgsl/infixDispatch.js +48 -46
  341. package/tgsl/jsPolyfills.d.ts +16 -19
  342. package/tgsl/jsPolyfills.js +44 -42
  343. package/tgsl/makeDereferenceable.d.ts +48 -0
  344. package/tgsl/makeDereferenceable.js +86 -0
  345. package/tgsl/makeResolvable.d.ts +22 -0
  346. package/tgsl/makeResolvable.js +33 -0
  347. package/tgsl/shaderGenerator.d.ts +77 -17
  348. package/tgsl/shaderGenerator.js +1 -0
  349. package/tgsl/shellless.d.ts +6 -9
  350. package/tgsl/shellless.js +73 -43
  351. package/tgsl/wgslGenerator.d.ts +66 -59
  352. package/tgsl/wgslGenerator.js +1345 -760
  353. package/types.d.ts +287 -222
  354. package/types.js +61 -44
  355. package/unwrapper.d.ts +31 -26
  356. package/unwrapper.js +1 -0
  357. package/wgslExtensions.d.ts +3 -5
  358. package/wgslExtensions.js +12 -16
  359. package/_virtual/rolldown_runtime.js +0 -13
  360. package/core/buffer/bufferShorthand.d.ts +0 -50
  361. package/core/buffer/bufferShorthand.js +0 -55
  362. package/core/pipeline/applyPipelineState.js +0 -37
  363. package/core/pipeline/limitsOverflow.js +0 -13
  364. package/package.js +0 -5
  365. package/tgsl/shaderGenerator_members.d.ts +0 -33
  366. 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 };