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
@@ -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;