typegpu 0.11.9 → 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 +36 -36
  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 -5
  42. package/core/function/fnCore.js +148 -93
  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 +17 -22
  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 +89 -90
  85. package/core/resolve/externals.d.ts +25 -8
  86. package/core/resolve/externals.js +78 -54
  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 -53
  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 -455
  101. package/core/root/rootTypes.d.ts +461 -636
  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 -215
  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 -197
  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 -126
  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 +427 -394
  239. package/package.json +5 -1
  240. package/resolutionCtx.d.ts +162 -22
  241. package/resolutionCtx.js +911 -629
  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 -101
  320. package/tgsl/accessStructProp.d.ts +5 -0
  321. package/tgsl/accessStructProp.js +13 -15
  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 +271 -216
  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 -760
  350. package/types.d.ts +287 -222
  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,88 +1,103 @@
1
- import { isDecorated, isWgslArray, isWgslStruct } from "./wgslTypes.js";
2
1
  import { safeStringify } from "../shared/stringify.js";
3
- import { getCustomAlignment, isDisarray, isLooseDecorated, isUnstruct } from "./dataTypes.js";
2
+ import { getCustomAlignment, isDisarray, isLooseDecorated, isUnstruct, } from "./dataTypes.js";
4
3
  import { packedFormats } from "./vertexFormatData.js";
5
-
6
- //#region src/data/alignmentOf.ts
4
+ import { isDecorated, isWgslArray, isWgslStruct } from "./wgslTypes.js";
7
5
  const knownAlignmentMap = {
8
- f32: 4,
9
- f16: 2,
10
- i32: 4,
11
- u32: 4,
12
- bool: 4,
13
- u16: 2,
14
- vec2f: 8,
15
- vec2h: 4,
16
- vec2i: 8,
17
- vec2u: 8,
18
- "vec2<bool>": 8,
19
- vec3f: 16,
20
- vec3h: 8,
21
- vec3i: 16,
22
- vec3u: 16,
23
- "vec3<bool>": 16,
24
- vec4f: 16,
25
- vec4h: 8,
26
- vec4i: 16,
27
- vec4u: 16,
28
- "vec4<bool>": 16,
29
- mat2x2f: 8,
30
- mat3x3f: 16,
31
- mat4x4f: 16,
32
- atomic: 4
6
+ f32: 4,
7
+ f16: 2,
8
+ i32: 4,
9
+ u32: 4,
10
+ bool: 4,
11
+ u16: 2,
12
+ vec2f: 8,
13
+ vec2h: 4,
14
+ vec2i: 8,
15
+ vec2u: 8,
16
+ 'vec2<bool>': 8,
17
+ vec3f: 16,
18
+ vec3h: 8,
19
+ vec3i: 16,
20
+ vec3u: 16,
21
+ 'vec3<bool>': 16,
22
+ vec4f: 16,
23
+ vec4h: 8,
24
+ vec4i: 16,
25
+ vec4u: 16,
26
+ 'vec4<bool>': 16,
27
+ mat2x2f: 8,
28
+ mat3x3f: 16,
29
+ mat4x4f: 16,
30
+ atomic: 4,
33
31
  };
34
32
  function computeAlignment(data) {
35
- const dataType = data?.type;
36
- const knownAlignment = knownAlignmentMap[dataType];
37
- if (knownAlignment !== void 0) return knownAlignment;
38
- if (isWgslStruct(data)) return Object.values(data.propTypes).map(alignmentOf).reduce((a, b) => a > b ? a : b);
39
- if (isWgslArray(data)) return alignmentOf(data.elementType);
40
- if (isUnstruct(data)) {
41
- const firstProp = Object.values(data.propTypes)[0];
42
- return firstProp ? getCustomAlignment(firstProp) ?? 1 : 1;
43
- }
44
- if (isDisarray(data)) return getCustomAlignment(data.elementType) ?? 1;
45
- if (isDecorated(data) || isLooseDecorated(data)) return getCustomAlignment(data) ?? alignmentOf(data.inner);
46
- if (packedFormats.has(dataType)) return 1;
47
- throw new Error(`Cannot determine alignment of data: ${safeStringify(data)}`);
33
+ const dataType = data?.type;
34
+ const knownAlignment = knownAlignmentMap[dataType];
35
+ if (knownAlignment !== undefined) {
36
+ return knownAlignment;
37
+ }
38
+ if (isWgslStruct(data)) {
39
+ return Object.values(data.propTypes)
40
+ .map(alignmentOf)
41
+ .reduce((a, b) => (a > b ? a : b));
42
+ }
43
+ if (isWgslArray(data)) {
44
+ return alignmentOf(data.elementType);
45
+ }
46
+ if (isUnstruct(data)) {
47
+ // A loose struct is aligned to its first property.
48
+ const firstProp = Object.values(data.propTypes)[0];
49
+ return firstProp ? (getCustomAlignment(firstProp) ?? 1) : 1;
50
+ }
51
+ if (isDisarray(data)) {
52
+ return getCustomAlignment(data.elementType) ?? 1;
53
+ }
54
+ if (isDecorated(data) || isLooseDecorated(data)) {
55
+ return getCustomAlignment(data) ?? alignmentOf(data.inner);
56
+ }
57
+ if (packedFormats.has(dataType)) {
58
+ return 1;
59
+ }
60
+ throw new Error(`Cannot determine alignment of data: ${safeStringify(data)}`);
48
61
  }
49
62
  function computeCustomAlignment(data) {
50
- if (isUnstruct(data)) {
51
- const firstProp = Object.values(data.propTypes)[0];
52
- return firstProp ? customAlignmentOf(firstProp) : 1;
53
- }
54
- if (isDisarray(data)) return customAlignmentOf(data.elementType);
55
- if (isLooseDecorated(data)) return getCustomAlignment(data) ?? customAlignmentOf(data.inner);
56
- return getCustomAlignment(data) ?? 1;
63
+ if (isUnstruct(data)) {
64
+ // A loose struct is aligned to its first property.
65
+ const firstProp = Object.values(data.propTypes)[0];
66
+ return firstProp ? customAlignmentOf(firstProp) : 1;
67
+ }
68
+ if (isDisarray(data)) {
69
+ return customAlignmentOf(data.elementType);
70
+ }
71
+ if (isLooseDecorated(data)) {
72
+ return getCustomAlignment(data) ?? customAlignmentOf(data.inner);
73
+ }
74
+ return getCustomAlignment(data) ?? 1;
57
75
  }
58
76
  /**
59
- * Since alignments can be inferred from data types, they are not stored on them.
60
- * Instead, this weak map acts as an extended property of those data types.
61
- */
62
- const cachedAlignments = /* @__PURE__ */ new WeakMap();
63
- const cachedCustomAlignments = /* @__PURE__ */ new WeakMap();
64
- function alignmentOf(data) {
65
- let alignment = cachedAlignments.get(data);
66
- if (alignment === void 0) {
67
- alignment = computeAlignment(data);
68
- cachedAlignments.set(data, alignment);
69
- }
70
- return alignment;
77
+ * Since alignments can be inferred from data types, they are not stored on them.
78
+ * Instead, this weak map acts as an extended property of those data types.
79
+ */
80
+ const cachedAlignments = new WeakMap();
81
+ const cachedCustomAlignments = new WeakMap();
82
+ export function alignmentOf(data) {
83
+ let alignment = cachedAlignments.get(data);
84
+ if (alignment === undefined) {
85
+ alignment = computeAlignment(data);
86
+ cachedAlignments.set(data, alignment);
87
+ }
88
+ return alignment;
71
89
  }
72
- function customAlignmentOf(data) {
73
- let alignment = cachedCustomAlignments.get(data);
74
- if (alignment === void 0) {
75
- alignment = computeCustomAlignment(data);
76
- cachedCustomAlignments.set(data, alignment);
77
- }
78
- return alignment;
90
+ export function customAlignmentOf(data) {
91
+ let alignment = cachedCustomAlignments.get(data);
92
+ if (alignment === undefined) {
93
+ alignment = computeCustomAlignment(data);
94
+ cachedCustomAlignments.set(data, alignment);
95
+ }
96
+ return alignment;
79
97
  }
80
98
  /**
81
- * Returns the alignment (in bytes) of data represented by the `schema`.
82
- */
83
- function PUBLIC_alignmentOf(schema) {
84
- return alignmentOf(schema);
99
+ * Returns the alignment (in bytes) of data represented by the `schema`.
100
+ */
101
+ export function PUBLIC_alignmentOf(schema) {
102
+ return alignmentOf(schema);
85
103
  }
86
-
87
- //#endregion
88
- export { PUBLIC_alignmentOf, alignmentOf, customAlignmentOf };
package/data/array.d.ts CHANGED
@@ -1,10 +1,8 @@
1
- import { AnyWgslData, WgslArray } from "./wgslTypes.js";
2
- import { TgpuComptime } from "../core/function/comptime.js";
3
-
4
- //#region src/data/array.d.ts
1
+ import { type TgpuComptime } from '../core/function/comptime.ts';
2
+ import type { AnyWgslData, WgslArray } from './wgslTypes.ts';
5
3
  interface WgslArrayConstructor {
6
- <TElement extends AnyWgslData>(elementType: TElement): (elementCount: number) => WgslArray<TElement>;
7
- <TElement extends AnyWgslData>(elementType: TElement, elementCount: number): WgslArray<TElement>;
4
+ <TElement extends AnyWgslData>(elementType: TElement): (elementCount: number) => WgslArray<TElement>;
5
+ <TElement extends AnyWgslData>(elementType: TElement, elementCount: number): WgslArray<TElement>;
8
6
  }
9
7
  /**
10
8
  * Creates an array schema that can be used to construct gpu buffers.
@@ -22,6 +20,5 @@ interface WgslArrayConstructor {
22
20
  * @param elementType The type of elements in the array.
23
21
  * @param elementCount The number of elements in the array.
24
22
  */
25
- declare const arrayOf: TgpuComptime<WgslArrayConstructor>;
26
- //#endregion
27
- export { arrayOf };
23
+ export declare const arrayOf: TgpuComptime<WgslArrayConstructor>;
24
+ export {};
package/data/array.js CHANGED
@@ -1,48 +1,56 @@
1
+ import { comptime } from "../core/function/comptime.js";
1
2
  import { $internal } from "../shared/symbols.js";
2
3
  import { schemaCallWrapper } from "./schemaCallWrapper.js";
3
4
  import { sizeOf } from "./sizeOf.js";
4
- import { comptime } from "../core/function/comptime.js";
5
-
6
- //#region src/data/array.ts
7
5
  /**
8
- * Creates an array schema that can be used to construct gpu buffers.
9
- * Describes arrays with fixed-size length, storing elements of the same type.
10
- *
11
- * @example
12
- * const LENGTH = 3;
13
- * const array = d.arrayOf(d.u32, LENGTH);
14
- *
15
- * If `elementCount` is not specified, a partially applied function is returned.
16
- * @example
17
- * const array = d.arrayOf(d.vec3f);
18
- * // ^? (n: number) => WgslArray<d.Vec3f>
19
- *
20
- * @param elementType The type of elements in the array.
21
- * @param elementCount The number of elements in the array.
22
- */
23
- const arrayOf = comptime(((elementType, elementCount) => {
24
- if (elementCount === void 0) return comptime((count) => cpu_arrayOf(elementType, count));
25
- return cpu_arrayOf(elementType, elementCount);
26
- })).$name("arrayOf");
6
+ * Creates an array schema that can be used to construct gpu buffers.
7
+ * Describes arrays with fixed-size length, storing elements of the same type.
8
+ *
9
+ * @example
10
+ * const LENGTH = 3;
11
+ * const array = d.arrayOf(d.u32, LENGTH);
12
+ *
13
+ * If `elementCount` is not specified, a partially applied function is returned.
14
+ * @example
15
+ * const array = d.arrayOf(d.vec3f);
16
+ * // ^? (n: number) => WgslArray<d.Vec3f>
17
+ *
18
+ * @param elementType The type of elements in the array.
19
+ * @param elementCount The number of elements in the array.
20
+ */
21
+ export const arrayOf = comptime(((elementType, elementCount) => {
22
+ if (elementCount === undefined) {
23
+ return comptime((count) => cpu_arrayOf(elementType, count));
24
+ }
25
+ return cpu_arrayOf(elementType, elementCount);
26
+ })).$name('arrayOf');
27
+ // --------------
28
+ // Implementation
29
+ // --------------
27
30
  function cpu_arrayOf(elementType, elementCount) {
28
- const arraySchema = (elements) => {
29
- if (elements && elements.length !== elementCount) throw new Error(`Array schema of ${elementCount} elements of type ${elementType.type} called with ${elements.length} argument(s).`);
30
- return Array.from({ length: elementCount }, (_, i) => schemaCallWrapper(elementType, elements?.[i]));
31
- };
32
- Object.setPrototypeOf(arraySchema, WgslArrayImpl);
33
- if (Number.isNaN(sizeOf(elementType))) throw new Error("Cannot nest runtime sized arrays.");
34
- arraySchema.elementType = elementType;
35
- if (!Number.isInteger(elementCount) || elementCount < 0) throw new Error(`Cannot create array schema with invalid element count: ${elementCount}.`);
36
- arraySchema.elementCount = elementCount;
37
- return arraySchema;
31
+ // In the schema call, create and return a deep copy
32
+ // by wrapping all the values in `elementType` schema calls.
33
+ const arraySchema = (elements) => {
34
+ if (elements && elements.length !== elementCount) {
35
+ throw new Error(`Array schema of ${elementCount} elements of type ${elementType.type} called with ${elements.length} argument(s).`);
36
+ }
37
+ return Array.from({ length: elementCount }, (_, i) => schemaCallWrapper(elementType, elements?.[i]));
38
+ };
39
+ Object.setPrototypeOf(arraySchema, WgslArrayImpl);
40
+ if (Number.isNaN(sizeOf(elementType))) {
41
+ throw new Error('Cannot nest runtime sized arrays.');
42
+ }
43
+ arraySchema.elementType = elementType;
44
+ if (!Number.isInteger(elementCount) || elementCount < 0) {
45
+ throw new Error(`Cannot create array schema with invalid element count: ${elementCount}.`);
46
+ }
47
+ arraySchema.elementCount = elementCount;
48
+ return arraySchema;
38
49
  }
39
50
  const WgslArrayImpl = {
40
- [$internal]: true,
41
- type: "array",
42
- toString() {
43
- return `arrayOf(${String(this.elementType)}, ${this.elementCount})`;
44
- }
51
+ [$internal]: true,
52
+ type: 'array',
53
+ toString() {
54
+ return `arrayOf(${String(this.elementType)}, ${this.elementCount})`;
55
+ },
45
56
  };
46
-
47
- //#endregion
48
- export { arrayOf };
package/data/atomic.d.ts CHANGED
@@ -1,7 +1,4 @@
1
- import { Atomic, I32, U32 } from "./wgslTypes.js";
2
-
3
- //#region src/data/atomic.d.ts
4
-
1
+ import type { Atomic, I32, U32 } from './wgslTypes.ts';
5
2
  /**
6
3
  * Marks a concrete integer scalar type schema (u32 or i32) as a WGSL atomic.
7
4
  *
@@ -11,6 +8,4 @@ import { Atomic, I32, U32 } from "./wgslTypes.js";
11
8
  *
12
9
  * @param data Underlying type schema.
13
10
  */
14
- declare function atomic<TSchema extends U32 | I32>(data: TSchema): Atomic<TSchema>;
15
- //#endregion
16
- export { atomic };
11
+ export declare function atomic<TSchema extends U32 | I32>(data: TSchema): Atomic<TSchema>;
package/data/atomic.js CHANGED
@@ -1,26 +1,29 @@
1
1
  import { $internal } from "../shared/symbols.js";
2
-
3
- //#region src/data/atomic.ts
2
+ import { $gpuRepr, $memIdent, $repr, $validStorageSchema, $validUniformSchema, $validVertexSchema, } from "../shared/symbols.js";
3
+ // ----------
4
+ // Public API
5
+ // ----------
4
6
  /**
5
- * Marks a concrete integer scalar type schema (u32 or i32) as a WGSL atomic.
6
- *
7
- * @example
8
- * const atomicU32 = d.atomic(d.u32);
9
- * const atomicI32 = d.atomic(d.i32);
10
- *
11
- * @param data Underlying type schema.
12
- */
13
- function atomic(data) {
14
- return new AtomicImpl(data);
7
+ * Marks a concrete integer scalar type schema (u32 or i32) as a WGSL atomic.
8
+ *
9
+ * @example
10
+ * const atomicU32 = d.atomic(d.u32);
11
+ * const atomicI32 = d.atomic(d.i32);
12
+ *
13
+ * @param data Underlying type schema.
14
+ */
15
+ export function atomic(data) {
16
+ return new AtomicImpl(data);
17
+ }
18
+ // --------------
19
+ // Implementation
20
+ // --------------
21
+ class AtomicImpl {
22
+ [$internal] = {};
23
+ type = 'atomic';
24
+ inner;
25
+ // ---
26
+ constructor(inner) {
27
+ this.inner = inner;
28
+ }
15
29
  }
16
- var AtomicImpl = class {
17
- [$internal] = {};
18
- type = "atomic";
19
- inner;
20
- constructor(inner) {
21
- this.inner = inner;
22
- }
23
- };
24
-
25
- //#endregion
26
- export { atomic };
@@ -1,12 +1,10 @@
1
- import { Align, AnyWgslData, BaseData, Builtin, Decorated, FlatInterpolatableData, FlatInterpolationType, Interpolate, Invariant, IsWgslData, Location, PerspectiveOrLinearInterpolatableData, PerspectiveOrLinearInterpolationType, Size, Vec4f } from "./wgslTypes.js";
2
- import { AnyData, AnyLooseData, IsLooseData, LooseDecorated, Undecorate } from "./dataTypes.js";
3
-
4
- //#region src/data/attributes.d.ts
5
- declare const builtinNames: readonly ["vertex_index", "instance_index", "clip_distances", "position", "front_facing", "frag_depth", "primitive_index", "sample_index", "sample_mask", "fragment", "local_invocation_id", "local_invocation_index", "global_invocation_id", "global_invocation_index", "workgroup_id", "workgroup_index", "num_workgroups", "subgroup_invocation_id", "subgroup_size", "subgroup_id", "num_subgroups"];
6
- type BuiltinName = (typeof builtinNames)[number];
7
- type AnyAttribute<AllowedBuiltins extends Builtin<BuiltinName> = Builtin<BuiltinName>> = Align<number> | Size<number> | Location | Interpolate | Invariant | AllowedBuiltins;
8
- type ExtractAttributes<T> = T extends {
9
- readonly attribs: unknown[];
1
+ import { type AnyData, type AnyLooseData, type IsLooseData, type LooseDecorated, type Undecorate } from './dataTypes.ts';
2
+ import { type Align, type AnyWgslData, type BaseData, type Builtin, type Decorated, type FlatInterpolatableData, type FlatInterpolationType, type Interpolate, type Invariant, type IsWgslData, type Location, type PerspectiveOrLinearInterpolatableData, type PerspectiveOrLinearInterpolationType, type Size, type Vec4f } from './wgslTypes.ts';
3
+ export declare const builtinNames: readonly ["vertex_index", "instance_index", "clip_distances", "position", "front_facing", "frag_depth", "primitive_index", "sample_index", "sample_mask", "fragment", "local_invocation_id", "local_invocation_index", "global_invocation_id", "global_invocation_index", "workgroup_id", "workgroup_index", "num_workgroups", "subgroup_invocation_id", "subgroup_size", "subgroup_id", "num_subgroups"];
4
+ export type BuiltinName = (typeof builtinNames)[number];
5
+ export type AnyAttribute<AllowedBuiltins extends Builtin<BuiltinName> = Builtin<BuiltinName>> = Align<number> | Size<number> | Location | Interpolate | Invariant | AllowedBuiltins;
6
+ export type ExtractAttributes<T> = T extends {
7
+ readonly attribs: unknown[];
10
8
  } ? T['attribs'] : [];
11
9
  /**
12
10
  * Decorates a data-type `TData` with an attribute `TAttrib`.
@@ -22,9 +20,10 @@ type ExtractAttributes<T> = T extends {
22
20
  * - else
23
21
  * - Wrap `TData` with `Decorated` and a single attribute `[TAttrib]`
24
22
  */
25
- type Decorate<TData extends BaseData, TAttrib extends AnyAttribute> = IsWgslData<TData> extends true ? Decorated<Undecorate<TData>, [TAttrib, ...ExtractAttributes<TData>]> : IsLooseData<TData> extends true ? LooseDecorated<Undecorate<TData>, [TAttrib, ...ExtractAttributes<TData>]> : never;
26
- type IsBuiltin<T> = ExtractAttributes<T>[number] extends [] ? false : ExtractAttributes<T>[number] extends Builtin<BuiltinName> ? true : false;
27
- type HasCustomLocation<T> = ExtractAttributes<T>[number] extends [] ? false : ExtractAttributes<T>[number] extends Location ? true : false;
23
+ export type Decorate<TData extends BaseData, TAttrib extends AnyAttribute> = IsWgslData<TData> extends true ? Decorated<Undecorate<TData>, [TAttrib, ...ExtractAttributes<TData>]> : IsLooseData<TData> extends true ? LooseDecorated<Undecorate<TData>, [TAttrib, ...ExtractAttributes<TData>]> : never;
24
+ export type IsBuiltin<T> = ExtractAttributes<T>[number] extends [] ? false : ExtractAttributes<T>[number] extends Builtin<BuiltinName> ? true : false;
25
+ export type HasCustomLocation<T> = ExtractAttributes<T>[number] extends [] ? false : ExtractAttributes<T>[number] extends Location ? true : false;
26
+ export declare function attribute(data: BaseData, attrib: AnyAttribute): Decorated | LooseDecorated;
28
27
  /**
29
28
  * Gives the wrapped data-type a custom byte alignment. Useful in order to
30
29
  * fulfill uniform alignment requirements.
@@ -39,7 +38,7 @@ type HasCustomLocation<T> = ExtractAttributes<T>[number] extends [] ? false : Ex
39
38
  * @param alignment The multiple of bytes this data should align itself to.
40
39
  * @param data The data-type to align.
41
40
  */
42
- declare function align<TAlign extends number, TData extends AnyData>(alignment: TAlign, data: TData): Decorate<TData, Align<TAlign>>;
41
+ export declare function align<TAlign extends number, TData extends AnyData>(alignment: TAlign, data: TData): Decorate<TData, Align<TAlign>>;
43
42
  /**
44
43
  * Adds padding bytes after the wrapped data-type, until the whole value takes up `size` bytes.
45
44
  *
@@ -52,7 +51,7 @@ declare function align<TAlign extends number, TData extends AnyData>(alignment:
52
51
  * @param size The amount of bytes that should be reserved for this data-type.
53
52
  * @param data The data-type to wrap.
54
53
  */
55
- declare function size<TSize extends number, TData extends AnyData>(size: TSize, data: TData): Decorate<TData, Size<TSize>>;
54
+ export declare function size<TSize extends number, TData extends AnyData>(size: TSize, data: TData): Decorate<TData, Size<TSize>>;
56
55
  /**
57
56
  * Assigns an explicit numeric location to a struct member or a parameter that has this type.
58
57
  *
@@ -66,7 +65,7 @@ declare function size<TSize extends number, TData extends AnyData>(size: TSize,
66
65
  * @param location The explicit numeric location.
67
66
  * @param data The data-type to wrap.
68
67
  */
69
- declare function location<TLocation extends number, TData extends BaseData>(location: TLocation, data: TData): Decorate<TData, Location<TLocation>>;
68
+ export declare function location<TLocation extends number, TData extends BaseData>(location: TLocation, data: TData): Decorate<TData, Location<TLocation>>;
70
69
  /**
71
70
  * Specifies how user-defined vertex shader output (fragment shader input)
72
71
  * must be interpolated.
@@ -82,7 +81,7 @@ declare function location<TLocation extends number, TData extends BaseData>(loca
82
81
  * @param interpolationType How data should be interpolated.
83
82
  * @param data The data-type to wrap.
84
83
  */
85
- declare function interpolate<TInterpolation extends PerspectiveOrLinearInterpolationType, TData extends PerspectiveOrLinearInterpolatableData>(interpolationType: TInterpolation, data: TData): Decorate<TData, Interpolate<TInterpolation>>;
84
+ export declare function interpolate<TInterpolation extends PerspectiveOrLinearInterpolationType, TData extends PerspectiveOrLinearInterpolatableData>(interpolationType: TInterpolation, data: TData): Decorate<TData, Interpolate<TInterpolation>>;
86
85
  /**
87
86
  * Specifies how user-defined vertex shader output (fragment shader input)
88
87
  * must be interpolated.
@@ -100,7 +99,7 @@ declare function interpolate<TInterpolation extends PerspectiveOrLinearInterpola
100
99
  * @param interpolationType How data should be interpolated.
101
100
  * @param data The data-type to wrap.
102
101
  */
103
- declare function interpolate<TInterpolation extends FlatInterpolationType, TData extends FlatInterpolatableData>(interpolationType: TInterpolation, data: TData): Decorate<TData, Interpolate<TInterpolation>>;
102
+ export declare function interpolate<TInterpolation extends FlatInterpolationType, TData extends FlatInterpolatableData>(interpolationType: TInterpolation, data: TData): Decorate<TData, Interpolate<TInterpolation>>;
104
103
  /**
105
104
  * Marks a position built-in output value as invariant in vertex shaders.
106
105
  * If the data and control flow match for two position outputs in different
@@ -115,7 +114,6 @@ declare function interpolate<TInterpolation extends FlatInterpolationType, TData
115
114
  *
116
115
  * @param data The position built-in data-type to mark as invariant.
117
116
  */
118
- declare function invariant(data: Decorated<Vec4f, [Builtin<'position'>]>): Decorated<Vec4f, [Builtin<'position'>, Invariant]>;
119
- declare function isBuiltin(value: unknown): value is Decorated<AnyWgslData, AnyAttribute[]> | LooseDecorated<AnyLooseData, AnyAttribute[]>;
120
- //#endregion
121
- export { AnyAttribute, Decorate, HasCustomLocation, IsBuiltin, align, interpolate, invariant, isBuiltin, location, size };
117
+ export declare function invariant(data: Decorated<Vec4f, [Builtin<'position'>]>): Decorated<Vec4f, [Builtin<'position'>, Invariant]>;
118
+ export declare function isBuiltin(value: unknown): value is Decorated<AnyWgslData, AnyAttribute[]> | LooseDecorated<AnyLooseData, AnyAttribute[]>;
119
+ export declare function getAttributesString<T extends BaseData>(field: T): string;