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
@@ -1,200 +1,228 @@
1
- import { isDecorated, isWgslArray, isWgslStruct } from "./wgslTypes.js";
2
- import { getCustomSize, isDisarray, isLooseDecorated, isUnstruct, undecorate } from "./dataTypes.js";
3
- import { alignmentOf, customAlignmentOf } from "./alignmentOf.js";
4
1
  import { roundUp } from "../mathUtils.js";
5
-
6
- //#region src/data/schemaMemoryLayout.ts
2
+ import { alignmentOf, customAlignmentOf } from "./alignmentOf.js";
3
+ import { getCustomSize, isDisarray, isLooseDecorated, isUnstruct, undecorate, } from "./dataTypes.js";
4
+ import { isDecorated, isWgslArray, isWgslStruct } from "./wgslTypes.js";
7
5
  const knownSizesMap = {
8
- bool: 4,
9
- f32: 4,
10
- f16: 2,
11
- i32: 4,
12
- u32: 4,
13
- u16: 2,
14
- vec2f: 8,
15
- vec2h: 4,
16
- vec2i: 8,
17
- vec2u: 8,
18
- "vec2<bool>": 8,
19
- vec3f: 12,
20
- vec3h: 6,
21
- vec3i: 12,
22
- vec3u: 12,
23
- "vec3<bool>": 12,
24
- vec4f: 16,
25
- vec4h: 8,
26
- vec4i: 16,
27
- vec4u: 16,
28
- "vec4<bool>": 16,
29
- mat2x2f: 16,
30
- mat3x3f: 48,
31
- mat4x4f: 64,
32
- uint8: 1,
33
- uint8x2: 2,
34
- uint8x4: 4,
35
- sint8: 1,
36
- sint8x2: 2,
37
- sint8x4: 4,
38
- unorm8: 1,
39
- unorm8x2: 2,
40
- unorm8x4: 4,
41
- snorm8: 1,
42
- snorm8x2: 2,
43
- snorm8x4: 4,
44
- uint16: 2,
45
- uint16x2: 4,
46
- uint16x4: 8,
47
- sint16: 2,
48
- sint16x2: 4,
49
- sint16x4: 8,
50
- unorm16: 2,
51
- unorm16x2: 4,
52
- unorm16x4: 8,
53
- snorm16: 2,
54
- snorm16x2: 4,
55
- snorm16x4: 8,
56
- float16: 2,
57
- float16x2: 4,
58
- float16x4: 8,
59
- float32: 4,
60
- float32x2: 8,
61
- float32x3: 12,
62
- float32x4: 16,
63
- uint32: 4,
64
- uint32x2: 8,
65
- uint32x3: 12,
66
- uint32x4: 16,
67
- sint32: 4,
68
- sint32x2: 8,
69
- sint32x3: 12,
70
- sint32x4: 16,
71
- "unorm10-10-10-2": 4,
72
- "unorm8x4-bgra": 4,
73
- atomic: 4
6
+ bool: 4,
7
+ f32: 4,
8
+ f16: 2,
9
+ i32: 4,
10
+ u32: 4,
11
+ u16: 2,
12
+ vec2f: 8,
13
+ vec2h: 4,
14
+ vec2i: 8,
15
+ vec2u: 8,
16
+ 'vec2<bool>': 8,
17
+ vec3f: 12,
18
+ vec3h: 6,
19
+ vec3i: 12,
20
+ vec3u: 12,
21
+ 'vec3<bool>': 12,
22
+ vec4f: 16,
23
+ vec4h: 8,
24
+ vec4i: 16,
25
+ vec4u: 16,
26
+ 'vec4<bool>': 16,
27
+ mat2x2f: 16,
28
+ mat3x3f: 48,
29
+ mat4x4f: 64,
30
+ uint8: 1,
31
+ uint8x2: 2,
32
+ uint8x4: 4,
33
+ sint8: 1,
34
+ sint8x2: 2,
35
+ sint8x4: 4,
36
+ unorm8: 1,
37
+ unorm8x2: 2,
38
+ unorm8x4: 4,
39
+ snorm8: 1,
40
+ snorm8x2: 2,
41
+ snorm8x4: 4,
42
+ uint16: 2,
43
+ uint16x2: 4,
44
+ uint16x4: 8,
45
+ sint16: 2,
46
+ sint16x2: 4,
47
+ sint16x4: 8,
48
+ unorm16: 2,
49
+ unorm16x2: 4,
50
+ unorm16x4: 8,
51
+ snorm16: 2,
52
+ snorm16x2: 4,
53
+ snorm16x4: 8,
54
+ float16: 2,
55
+ float16x2: 4,
56
+ float16x4: 8,
57
+ float32: 4,
58
+ float32x2: 8,
59
+ float32x3: 12,
60
+ float32x4: 16,
61
+ uint32: 4,
62
+ uint32x2: 8,
63
+ uint32x3: 12,
64
+ uint32x4: 16,
65
+ sint32: 4,
66
+ sint32x2: 8,
67
+ sint32x3: 12,
68
+ sint32x4: 16,
69
+ 'unorm10-10-10-2': 4,
70
+ 'unorm8x4-bgra': 4,
71
+ atomic: 4,
74
72
  };
75
73
  function computeMLOfStruct(struct) {
76
- let size = 0;
77
- let longestContiguousPrefix = 0;
78
- let isContiguous = true;
79
- let prefixEnd = false;
80
- for (const property of Object.values(struct.propTypes)) {
81
- if (Number.isNaN(size)) throw new Error("Only the last property of a struct can be unbounded");
82
- const prevSize = size;
83
- size = roundUp(size, alignmentOf(property));
84
- const hasPadding = prevSize !== size;
85
- const propLayout = computeMemoryLayout(property);
86
- size += propLayout.size;
87
- if (Number.isNaN(size) && property.type !== "array") throw new Error("Cannot nest unbounded struct within another struct");
88
- if (prefixEnd) continue;
89
- if (!hasPadding && propLayout.isContiguous) longestContiguousPrefix += propLayout.size;
90
- else {
91
- prefixEnd = true;
92
- isContiguous = false;
93
- if (!hasPadding) longestContiguousPrefix += propLayout.longestContiguousPrefix;
94
- }
95
- }
96
- const trueSize = roundUp(size, alignmentOf(struct));
97
- return {
98
- isContiguous: size === trueSize && isContiguous,
99
- size: trueSize,
100
- longestContiguousPrefix
101
- };
74
+ let size = 0;
75
+ let longestContiguousPrefix = 0;
76
+ let isContiguous = true;
77
+ let prefixEnd = false;
78
+ for (const property of Object.values(struct.propTypes)) {
79
+ if (Number.isNaN(size)) {
80
+ throw new Error('Only the last property of a struct can be unbounded');
81
+ }
82
+ const prevSize = size;
83
+ size = roundUp(size, alignmentOf(property));
84
+ const hasPadding = prevSize !== size;
85
+ const propLayout = computeMemoryLayout(property);
86
+ size += propLayout.size;
87
+ if (Number.isNaN(size) && property.type !== 'array') {
88
+ throw new Error('Cannot nest unbounded struct within another struct');
89
+ }
90
+ if (prefixEnd) {
91
+ continue;
92
+ }
93
+ if (!hasPadding && propLayout.isContiguous) {
94
+ longestContiguousPrefix += propLayout.size;
95
+ }
96
+ else {
97
+ prefixEnd = true;
98
+ isContiguous = false;
99
+ if (!hasPadding) {
100
+ longestContiguousPrefix += propLayout.longestContiguousPrefix;
101
+ }
102
+ }
103
+ }
104
+ const trueSize = roundUp(size, alignmentOf(struct));
105
+ return {
106
+ isContiguous: size === trueSize && isContiguous,
107
+ size: trueSize,
108
+ longestContiguousPrefix,
109
+ };
102
110
  }
103
111
  function computeMLOfUnstruct(data) {
104
- let size = 0;
105
- let longestContiguousPrefix = 0;
106
- let isContiguous = true;
107
- let prefixEnd = false;
108
- for (const property of Object.values(data.propTypes)) {
109
- const alignment = customAlignmentOf(property);
110
- const prevSize = size;
111
- size = roundUp(size, alignment);
112
- const hasPadding = prevSize !== size;
113
- if (hasPadding) isContiguous = false;
114
- const propLayout = computeMemoryLayout(property);
115
- size += propLayout.size;
116
- if (prefixEnd) continue;
117
- if (!hasPadding && propLayout.isContiguous) longestContiguousPrefix += propLayout.size;
118
- else {
119
- prefixEnd = true;
120
- isContiguous = false;
121
- if (!hasPadding) longestContiguousPrefix += propLayout.longestContiguousPrefix;
122
- }
123
- }
124
- return {
125
- isContiguous,
126
- size,
127
- longestContiguousPrefix
128
- };
112
+ let size = 0;
113
+ let longestContiguousPrefix = 0;
114
+ let isContiguous = true;
115
+ let prefixEnd = false;
116
+ for (const property of Object.values(data.propTypes)) {
117
+ const alignment = customAlignmentOf(property);
118
+ const prevSize = size;
119
+ size = roundUp(size, alignment);
120
+ const hasPadding = prevSize !== size;
121
+ if (hasPadding) {
122
+ isContiguous = false;
123
+ }
124
+ const propLayout = computeMemoryLayout(property);
125
+ size += propLayout.size;
126
+ if (prefixEnd) {
127
+ continue;
128
+ }
129
+ if (!hasPadding && propLayout.isContiguous) {
130
+ longestContiguousPrefix += propLayout.size;
131
+ }
132
+ else {
133
+ prefixEnd = true;
134
+ isContiguous = false;
135
+ if (!hasPadding) {
136
+ longestContiguousPrefix += propLayout.longestContiguousPrefix;
137
+ }
138
+ }
139
+ }
140
+ return {
141
+ isContiguous: isContiguous,
142
+ size,
143
+ longestContiguousPrefix,
144
+ };
129
145
  }
130
146
  function computeMLOfWgslArray(data) {
131
- const elementType = data.elementType;
132
- const elementMemoryLayout = computeMemoryLayout(elementType);
133
- const elementSize = elementMemoryLayout.size;
134
- const stride = roundUp(elementSize, alignmentOf(elementType));
135
- const isContiguous = !(stride > elementSize) && elementMemoryLayout.isContiguous;
136
- const size = data.elementCount === 0 ? NaN : data.elementCount * stride;
137
- let longestContiguousPrefix;
138
- if (isContiguous) longestContiguousPrefix = size;
139
- else longestContiguousPrefix = elementMemoryLayout.longestContiguousPrefix;
140
- return {
141
- size,
142
- isContiguous,
143
- longestContiguousPrefix
144
- };
147
+ const elementType = data.elementType;
148
+ const elementMemoryLayout = computeMemoryLayout(elementType);
149
+ const elementSize = elementMemoryLayout.size;
150
+ const stride = roundUp(elementSize, alignmentOf(elementType));
151
+ const hasPadding = stride > elementSize;
152
+ const isContiguous = !hasPadding && elementMemoryLayout.isContiguous;
153
+ const size = data.elementCount === 0 ? Number.NaN : data.elementCount * stride;
154
+ let longestContiguousPrefix;
155
+ if (isContiguous) {
156
+ longestContiguousPrefix = size;
157
+ }
158
+ else {
159
+ longestContiguousPrefix = elementMemoryLayout.longestContiguousPrefix;
160
+ }
161
+ return { size, isContiguous, longestContiguousPrefix };
145
162
  }
146
163
  function computeMLOfDisarray(data) {
147
- const elementType = data.elementType;
148
- const elementMemoryLayout = computeMemoryLayout(elementType);
149
- const elementSize = elementMemoryLayout.size;
150
- const stride = roundUp(elementSize, customAlignmentOf(elementType));
151
- const isContiguous = !(stride > elementSize) && elementMemoryLayout.isContiguous;
152
- const size = data.elementCount * stride;
153
- let longestContiguousPrefix;
154
- if (isContiguous) longestContiguousPrefix = size;
155
- else longestContiguousPrefix = elementMemoryLayout.longestContiguousPrefix;
156
- return {
157
- size,
158
- isContiguous,
159
- longestContiguousPrefix
160
- };
164
+ const elementType = data.elementType;
165
+ const elementMemoryLayout = computeMemoryLayout(elementType);
166
+ const elementSize = elementMemoryLayout.size;
167
+ const stride = roundUp(elementSize, customAlignmentOf(elementType));
168
+ const hasPadding = stride > elementSize;
169
+ const isContiguous = !hasPadding && elementMemoryLayout.isContiguous;
170
+ const size = data.elementCount * stride;
171
+ let longestContiguousPrefix;
172
+ if (isContiguous) {
173
+ longestContiguousPrefix = size;
174
+ }
175
+ else {
176
+ longestContiguousPrefix = elementMemoryLayout.longestContiguousPrefix;
177
+ }
178
+ return { size, isContiguous, longestContiguousPrefix };
161
179
  }
162
180
  function computeMemoryLayout(data) {
163
- const knownSize = knownSizesMap[data.type];
164
- if (knownSize !== void 0) return {
165
- isContiguous: data.type !== "mat3x3f",
166
- size: knownSize,
167
- longestContiguousPrefix: data.type === "mat3x3f" ? 12 : knownSize
168
- };
169
- if (isWgslStruct(data)) return computeMLOfStruct(data);
170
- if (isUnstruct(data)) return computeMLOfUnstruct(data);
171
- if (isWgslArray(data)) return computeMLOfWgslArray(data);
172
- if (isDisarray(data)) return computeMLOfDisarray(data);
173
- if (isDecorated(data) || isLooseDecorated(data)) {
174
- const size = getCustomSize(data);
175
- const undecoratedLayout = computeMemoryLayout(undecorate(data));
176
- if (size) return {
177
- isContiguous: size === undecoratedLayout.size && undecoratedLayout.isContiguous,
178
- size,
179
- longestContiguousPrefix: undecoratedLayout.longestContiguousPrefix
180
- };
181
- return computeMemoryLayout(data.inner);
182
- }
183
- throw new Error(`Cannot determine memory layout of data: ${data}`);
181
+ const knownSize = knownSizesMap[data.type];
182
+ if (knownSize !== undefined) {
183
+ return {
184
+ isContiguous: data.type !== 'mat3x3f',
185
+ size: knownSize,
186
+ longestContiguousPrefix: data.type === 'mat3x3f' ? 12 : knownSize,
187
+ };
188
+ }
189
+ if (isWgslStruct(data)) {
190
+ return computeMLOfStruct(data);
191
+ }
192
+ if (isUnstruct(data)) {
193
+ return computeMLOfUnstruct(data);
194
+ }
195
+ if (isWgslArray(data)) {
196
+ return computeMLOfWgslArray(data);
197
+ }
198
+ if (isDisarray(data)) {
199
+ return computeMLOfDisarray(data);
200
+ }
201
+ if (isDecorated(data) || isLooseDecorated(data)) {
202
+ const size = getCustomSize(data);
203
+ const undecoratedLayout = computeMemoryLayout(undecorate(data));
204
+ if (size) {
205
+ const isContiguous = size === undecoratedLayout.size && undecoratedLayout.isContiguous;
206
+ return {
207
+ isContiguous,
208
+ size,
209
+ longestContiguousPrefix: undecoratedLayout.longestContiguousPrefix,
210
+ };
211
+ }
212
+ return computeMemoryLayout(data.inner);
213
+ }
214
+ throw new Error(`Cannot determine memory layout of data: ${data}`);
184
215
  }
185
216
  /**
186
- * Since memory layout can be inferred from data types, they are not stored on them.
187
- * Instead, this weak map acts as an extended property of those data types.
188
- */
189
- const cachedLayouts = /* @__PURE__ */ new WeakMap();
190
- function getLayoutInfo(schema, key) {
191
- let layout = cachedLayouts.get(schema);
192
- if (layout === void 0) {
193
- layout = computeMemoryLayout(schema);
194
- cachedLayouts.set(schema, layout);
195
- }
196
- return layout[key];
217
+ * Since memory layout can be inferred from data types, they are not stored on them.
218
+ * Instead, this weak map acts as an extended property of those data types.
219
+ */
220
+ const cachedLayouts = new WeakMap();
221
+ export function getLayoutInfo(schema, key) {
222
+ let layout = cachedLayouts.get(schema);
223
+ if (layout === undefined) {
224
+ layout = computeMemoryLayout(schema);
225
+ cachedLayouts.set(schema, layout);
226
+ }
227
+ return layout[key];
197
228
  }
198
-
199
- //#endregion
200
- export { getLayoutInfo };
package/data/sizeOf.d.ts CHANGED
@@ -1,11 +1,7 @@
1
- import "./wgslTypes.js";
2
- import { AnyData } from "./dataTypes.js";
3
-
4
- //#region src/data/sizeOf.d.ts
5
-
1
+ import type { AnyData } from './dataTypes.ts';
2
+ import type { BaseData } from './wgslTypes.ts';
3
+ export declare function sizeOf(schema: BaseData): number;
6
4
  /**
7
5
  * Returns the size (in bytes) of data represented by the `schema`.
8
6
  */
9
- declare function PUBLIC_sizeOf(schema: AnyData): number;
10
- //#endregion
11
- export { PUBLIC_sizeOf };
7
+ export declare function PUBLIC_sizeOf(schema: AnyData): number;
package/data/sizeOf.js CHANGED
@@ -1,15 +1,10 @@
1
1
  import { getLayoutInfo } from "./schemaMemoryLayout.js";
2
-
3
- //#region src/data/sizeOf.ts
4
- function sizeOf(schema) {
5
- return getLayoutInfo(schema, "size");
2
+ export function sizeOf(schema) {
3
+ return getLayoutInfo(schema, 'size');
6
4
  }
7
5
  /**
8
- * Returns the size (in bytes) of data represented by the `schema`.
9
- */
10
- function PUBLIC_sizeOf(schema) {
11
- return sizeOf(schema);
6
+ * Returns the size (in bytes) of data represented by the `schema`.
7
+ */
8
+ export function PUBLIC_sizeOf(schema) {
9
+ return sizeOf(schema);
12
10
  }
13
-
14
- //#endregion
15
- export { PUBLIC_sizeOf, sizeOf };
package/data/snippet.d.ts CHANGED
@@ -1,22 +1,98 @@
1
- import { BaseData } from "./wgslTypes.js";
2
- import { UnknownData } from "./dataTypes.js";
3
-
4
- //#region src/data/snippet.d.ts
5
- type Origin = 'uniform' | 'readonly' | 'mutable' | 'workgroup' | 'private' | 'handle' | 'function' | 'local-def' | 'constant-immutable-def' | 'runtime-immutable-def' | 'argument' | 'runtime' | 'constant';
6
- interface Snippet {
7
- readonly value: unknown;
8
- /**
9
- * The type that `value` is assignable to (not necessary exactly inferred as).
10
- * E.g. `1.1` is assignable to `f32`, but `1.1` itself is an abstract float
11
- */
12
- readonly dataType: BaseData | UnknownData;
13
- readonly origin: Origin;
14
- readonly possibleSideEffects: boolean;
1
+ import type { UnknownData } from './dataTypes.ts';
2
+ import { type BaseData } from './wgslTypes.ts';
3
+ export type Origin = 'uniform' | 'readonly' | 'mutable' | 'workgroup' | 'private' | 'handle' | 'function' | 'local-def' | 'constant-immutable-def' | 'runtime-immutable-def' | 'argument' | 'runtime' | 'constant';
4
+ /**
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 declare function fallthroughCopyOrigin(origin: Origin): Origin;
9
+ /**
10
+ * Whether a snippet aliases a value that lives outside the current expression.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * function foo(a: number) {
15
+ * const color = d.vec3f(1, 2, 3);
16
+ * return color * a;
17
+ * }
18
+ *
19
+ * // References:
20
+ * // - color
21
+ * // - a
22
+ * //
23
+ * // Not references:
24
+ * // - d.vec3f(1, 2, 3)
25
+ * // - color * a
26
+ * ```
27
+ */
28
+ export declare function isAlias(snippet: Snippet): boolean;
29
+ export declare const originToPtrParams: {
30
+ readonly uniform: {
31
+ readonly space: "uniform";
32
+ readonly access: "read";
33
+ };
34
+ readonly readonly: {
35
+ readonly space: "storage";
36
+ readonly access: "read";
37
+ };
38
+ readonly mutable: {
39
+ readonly space: "storage";
40
+ readonly access: "read-write";
41
+ };
42
+ readonly workgroup: {
43
+ readonly space: "workgroup";
44
+ readonly access: "read-write";
45
+ };
46
+ readonly private: {
47
+ readonly space: "private";
48
+ readonly access: "read-write";
49
+ };
50
+ readonly function: {
51
+ readonly space: "function";
52
+ readonly access: "read-write";
53
+ };
54
+ readonly 'local-def': {
55
+ readonly space: "function";
56
+ readonly access: "read-write";
57
+ };
58
+ };
59
+ export type OriginToPtrParams = typeof originToPtrParams;
60
+ export interface Snippet {
61
+ readonly value: unknown;
62
+ /**
63
+ * The type that `value` is assignable to (not necessary exactly inferred as).
64
+ * E.g. `1.1` is assignable to `f32`, but `1.1` itself is an abstract float
65
+ */
66
+ readonly dataType: BaseData | UnknownData;
67
+ readonly origin: Origin;
68
+ /**
69
+ * A snippet has possible side effects either if we're sure that it has side
70
+ * effects, or if our systems are unable to reliably determine that it
71
+ * doesn't have side effects.
72
+ *
73
+ * A snippet has side-effects if executing the WGSL code within and not using
74
+ * the return value is not equivalent to just not executing the WGSL code at
75
+ * all, with a margin of executing a few more instructions. For example, code
76
+ * that mutates memory, or synchronizes threads, has side effects.
77
+ */
78
+ readonly possibleSideEffects: boolean;
15
79
  }
16
- interface ResolvedSnippet extends Snippet {
17
- readonly value: string;
18
- readonly dataType: BaseData;
80
+ export interface ResolvedSnippet extends Snippet {
81
+ readonly value: string;
82
+ readonly dataType: BaseData;
19
83
  }
20
- type MapValueToSnippet<T> = { [K in keyof T]: Snippet };
21
- //#endregion
22
- export { MapValueToSnippet, Origin, ResolvedSnippet, Snippet };
84
+ export type MapValueToSnippet<T> = {
85
+ [K in keyof T]: Snippet;
86
+ };
87
+ export declare function isSnippet(value: unknown): value is Snippet;
88
+ export declare function isSnippetNumeric(snippet: Snippet): boolean;
89
+ export declare function snip(value: string, dataType: BaseData, origin: Origin, possibleSideEffects?: boolean): ResolvedSnippet;
90
+ export declare function snip(value: unknown, dataType: BaseData | UnknownData, origin: Origin, possibleSideEffects?: boolean): Snippet;
91
+ export declare function withDataType(dataType: BaseData | UnknownData, snippet: ResolvedSnippet): ResolvedSnippet;
92
+ export declare function withDataType(dataType: BaseData | UnknownData, snippet: Snippet): Snippet;
93
+ export declare function withValue(value: string, snippet: Snippet): ResolvedSnippet;
94
+ export declare function withValue(value: unknown, snippet: Snippet): Snippet;
95
+ export declare function withSideEffects(possibleSideEffects: boolean, snippet: ResolvedSnippet): ResolvedSnippet;
96
+ export declare function withSideEffects(possibleSideEffects: boolean, snippet: Snippet): Snippet;
97
+ export declare function noSideEffects(snippet: ResolvedSnippet): ResolvedSnippet;
98
+ export declare function noSideEffects(snippet: Snippet): Snippet;