typegpu 0.11.8 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. package/builtin.d.ts +51 -53
  2. package/builtin.js +30 -34
  3. package/common/fullScreenTriangle.d.ts +2 -10
  4. package/common/fullScreenTriangle.js +20 -28
  5. package/common/index.d.ts +2 -9
  6. package/common/index.js +3 -12
  7. package/common/writeSoA.d.ts +11 -12
  8. package/common/writeSoA.js +88 -76
  9. package/core/buffer/buffer.d.ts +79 -62
  10. package/core/buffer/buffer.js +279 -205
  11. package/core/buffer/bufferBinding.d.ts +71 -0
  12. package/core/buffer/bufferBinding.js +154 -0
  13. package/core/buffer/bufferUsage.d.ts +14 -45
  14. package/core/buffer/bufferUsage.js +1 -171
  15. package/core/buffer/laidOutBuffer.d.ts +25 -0
  16. package/core/buffer/laidOutBuffer.js +55 -0
  17. package/core/commandEncoder/attachments.d.ts +125 -0
  18. package/core/commandEncoder/attachments.js +29 -0
  19. package/core/commandEncoder/commandEncoder.d.ts +53 -0
  20. package/core/commandEncoder/commandEncoder.js +56 -0
  21. package/core/commandEncoder/computePass.d.ts +58 -0
  22. package/core/commandEncoder/computePass.js +63 -0
  23. package/core/commandEncoder/renderPass.d.ts +121 -0
  24. package/core/commandEncoder/renderPass.js +196 -0
  25. package/core/constant/tgpuConstant.d.ts +26 -26
  26. package/core/constant/tgpuConstant.js +76 -65
  27. package/core/declare/tgpuDeclare.d.ts +3 -6
  28. package/core/declare/tgpuDeclare.js +37 -38
  29. package/core/function/autoIO.d.ts +61 -33
  30. package/core/function/autoIO.js +68 -73
  31. package/core/function/comptime.d.ts +11 -13
  32. package/core/function/comptime.js +60 -52
  33. package/core/function/createCallableSchema.d.ts +16 -0
  34. package/core/function/createCallableSchema.js +50 -40
  35. package/core/function/dualImpl.d.ts +44 -0
  36. package/core/function/dualImpl.js +71 -50
  37. package/core/function/entryInputRouter.d.ts +26 -0
  38. package/core/function/entryInputRouter.js +31 -33
  39. package/core/function/extractArgs.d.ts +38 -0
  40. package/core/function/extractArgs.js +202 -200
  41. package/core/function/fnCore.d.ts +44 -0
  42. package/core/function/fnCore.js +148 -92
  43. package/core/function/fnTypes.d.ts +31 -29
  44. package/core/function/fnTypes.js +1 -0
  45. package/core/function/ioSchema.d.ts +12 -10
  46. package/core/function/ioSchema.js +65 -47
  47. package/core/function/shelllessImpl.d.ts +9 -12
  48. package/core/function/shelllessImpl.js +18 -20
  49. package/core/function/templateUtils.d.ts +2 -0
  50. package/core/function/templateUtils.js +9 -8
  51. package/core/function/tgpuComputeFn.d.ts +26 -28
  52. package/core/function/tgpuComputeFn.js +47 -48
  53. package/core/function/tgpuFn.d.ts +34 -37
  54. package/core/function/tgpuFn.js +179 -153
  55. package/core/function/tgpuFragmentFn.d.ts +52 -53
  56. package/core/function/tgpuFragmentFn.js +63 -56
  57. package/core/function/tgpuVertexFn.d.ts +36 -39
  58. package/core/function/tgpuVertexFn.js +56 -53
  59. package/core/pipeline/computePipeline.d.ts +141 -53
  60. package/core/pipeline/computePipeline.js +291 -225
  61. package/core/pipeline/connectAttachmentToShader.d.ts +4 -0
  62. package/core/pipeline/connectAttachmentToShader.js +25 -22
  63. package/core/pipeline/connectTargetsToShader.d.ts +3 -0
  64. package/core/pipeline/connectTargetsToShader.js +29 -27
  65. package/core/pipeline/drawState.d.ts +52 -0
  66. package/core/pipeline/drawState.js +225 -0
  67. package/core/pipeline/limitsOverflow.d.ts +2 -0
  68. package/core/pipeline/limitsOverflow.js +13 -10
  69. package/core/pipeline/performanceTracker.d.ts +14 -0
  70. package/core/pipeline/performanceTracker.js +34 -0
  71. package/core/pipeline/pipelineUtils.d.ts +18 -0
  72. package/core/pipeline/pipelineUtils.js +54 -25
  73. package/core/pipeline/priors.d.ts +1 -0
  74. package/core/pipeline/priors.js +12 -0
  75. package/core/pipeline/renderPipeline.d.ts +246 -261
  76. package/core/pipeline/renderPipeline.js +487 -480
  77. package/core/pipeline/timeable.d.ts +28 -18
  78. package/core/pipeline/timeable.js +90 -52
  79. package/core/pipeline/typeGuards.d.ts +17 -0
  80. package/core/pipeline/typeGuards.js +52 -22
  81. package/core/querySet/querySet.d.ts +26 -21
  82. package/core/querySet/querySet.js +127 -103
  83. package/core/rawCodeSnippet/tgpuRawCodeSnippet.d.ts +13 -18
  84. package/core/rawCodeSnippet/tgpuRawCodeSnippet.js +90 -93
  85. package/core/resolve/externals.d.ts +25 -7
  86. package/core/resolve/externals.js +79 -62
  87. package/core/resolve/namespace.d.ts +22 -25
  88. package/core/resolve/namespace.js +16 -21
  89. package/core/resolve/resolvableString.d.ts +7 -0
  90. package/core/resolve/resolvableString.js +13 -0
  91. package/core/resolve/resolveData.d.ts +10 -0
  92. package/core/resolve/resolveData.js +162 -121
  93. package/core/resolve/stitch.d.ts +8 -0
  94. package/core/resolve/stitch.js +23 -21
  95. package/core/resolve/tgpuResolve.d.ts +55 -53
  96. package/core/resolve/tgpuResolve.js +106 -55
  97. package/core/root/configurableImpl.d.ts +10 -0
  98. package/core/root/configurableImpl.js +17 -19
  99. package/core/root/init.d.ts +76 -38
  100. package/core/root/init.js +346 -454
  101. package/core/root/rootTypes.d.ts +461 -627
  102. package/core/root/rootTypes.js +1 -0
  103. package/core/sampler/sampler.d.ts +50 -31
  104. package/core/sampler/sampler.js +120 -113
  105. package/core/simulate/tgpuSimulate.d.ts +9 -12
  106. package/core/simulate/tgpuSimulate.js +68 -71
  107. package/core/slot/accessor.d.ts +36 -13
  108. package/core/slot/accessor.js +138 -91
  109. package/core/slot/internalSlots.d.ts +2 -0
  110. package/core/slot/internalSlots.js +1 -6
  111. package/core/slot/lazy.d.ts +2 -6
  112. package/core/slot/lazy.js +71 -39
  113. package/core/slot/slot.d.ts +2 -6
  114. package/core/slot/slot.js +45 -38
  115. package/core/slot/slotTypes.d.ts +78 -80
  116. package/core/slot/slotTypes.js +11 -16
  117. package/core/texture/externalTexture.d.ts +20 -11
  118. package/core/texture/externalTexture.js +46 -46
  119. package/core/texture/texture.d.ts +152 -97
  120. package/core/texture/texture.js +407 -314
  121. package/core/texture/textureFormats.d.ts +42 -23
  122. package/core/texture/textureFormats.js +104 -75
  123. package/core/texture/textureProps.d.ts +7 -10
  124. package/core/texture/textureProps.js +1 -0
  125. package/core/texture/textureUtils.d.ts +8 -0
  126. package/core/texture/textureUtils.js +185 -179
  127. package/core/texture/usageExtension.d.ts +21 -18
  128. package/core/texture/usageExtension.js +13 -17
  129. package/core/unroll/tgpuUnroll.d.ts +20 -19
  130. package/core/unroll/tgpuUnroll.js +82 -91
  131. package/core/valueProxyUtils.d.ts +3 -0
  132. package/core/valueProxyUtils.js +52 -41
  133. package/core/variable/tgpuVariable.d.ts +26 -27
  134. package/core/variable/tgpuVariable.js +93 -96
  135. package/core/vertexLayout/connectAttributesToShader.d.ts +9 -0
  136. package/core/vertexLayout/connectAttributesToShader.js +61 -56
  137. package/core/vertexLayout/vertexAttribute.d.ts +21 -17
  138. package/core/vertexLayout/vertexAttribute.js +1 -0
  139. package/core/vertexLayout/vertexLayout.d.ts +24 -18
  140. package/core/vertexLayout/vertexLayout.js +130 -99
  141. package/core/whitespaces.d.ts +2 -0
  142. package/core/whitespaces.js +16 -0
  143. package/data/alignIO.d.ts +7 -0
  144. package/data/alignIO.js +13 -13
  145. package/data/alignmentOf.d.ts +5 -8
  146. package/data/alignmentOf.js +90 -75
  147. package/data/array.d.ts +6 -9
  148. package/data/array.js +48 -40
  149. package/data/atomic.d.ts +2 -7
  150. package/data/atomic.js +26 -23
  151. package/data/attributes.d.ts +19 -21
  152. package/data/attributes.js +192 -132
  153. package/data/autoStruct.d.ts +36 -3
  154. package/data/autoStruct.js +84 -81
  155. package/data/compiledIO.d.ts +5 -0
  156. package/data/compiledIO.js +231 -214
  157. package/data/dataIO.d.ts +13 -11
  158. package/data/dataIO.js +643 -589
  159. package/data/dataTypes.d.ts +83 -65
  160. package/data/dataTypes.js +66 -68
  161. package/data/deepEqual.d.ts +2 -7
  162. package/data/deepEqual.js +80 -55
  163. package/data/disarray.d.ts +6 -10
  164. package/data/disarray.js +52 -46
  165. package/data/float16Conversion.d.ts +4 -0
  166. package/data/float16Conversion.js +7 -0
  167. package/data/getLongestContiguousPrefix.d.ts +4 -8
  168. package/data/getLongestContiguousPrefix.js +6 -11
  169. package/data/index.d.ts +30 -31
  170. package/data/index.js +39 -172
  171. package/data/instanceToSchema.d.ts +24 -27
  172. package/data/instanceToSchema.js +1 -0
  173. package/data/isContiguous.d.ts +4 -8
  174. package/data/isContiguous.js +6 -11
  175. package/data/matrix.d.ts +21 -21
  176. package/data/matrix.js +513 -505
  177. package/data/numberOps.d.ts +6 -0
  178. package/data/numberOps.js +26 -20
  179. package/data/numeric.d.ts +21 -12
  180. package/data/numeric.js +287 -192
  181. package/data/offsetUtils.d.ts +9 -13
  182. package/data/offsetUtils.js +204 -144
  183. package/data/offsets.d.ts +8 -0
  184. package/data/offsets.js +33 -33
  185. package/data/partialIO.d.ts +13 -8
  186. package/data/partialIO.js +124 -113
  187. package/data/ptr.d.ts +12 -12
  188. package/data/ptr.js +42 -44
  189. package/data/ref.d.ts +40 -27
  190. package/data/ref.js +125 -95
  191. package/data/sampler.d.ts +99 -101
  192. package/data/sampler.js +17 -21
  193. package/data/schemaCallWrapper.d.ts +19 -0
  194. package/data/schemaCallWrapper.js +31 -26
  195. package/data/schemaMemoryLayout.d.ts +8 -0
  196. package/data/schemaMemoryLayout.js +213 -185
  197. package/data/sizeOf.d.ts +4 -8
  198. package/data/sizeOf.js +6 -11
  199. package/data/snippet.d.ts +96 -20
  200. package/data/snippet.js +75 -86
  201. package/data/struct.d.ts +4 -7
  202. package/data/struct.js +51 -39
  203. package/data/texture.d.ts +253 -250
  204. package/data/texture.js +238 -200
  205. package/data/unstruct.d.ts +2 -7
  206. package/data/unstruct.js +43 -37
  207. package/data/vector.d.ts +33 -21
  208. package/data/vector.js +234 -221
  209. package/data/vectorImpl.d.ts +231 -0
  210. package/data/vectorImpl.js +563 -515
  211. package/data/vectorOps.d.ts +63 -0
  212. package/data/vectorOps.js +642 -630
  213. package/data/vertexFormatData.d.ts +181 -184
  214. package/data/vertexFormatData.js +104 -106
  215. package/data/wgslTypes.d.ts +665 -600
  216. package/data/wgslTypes.js +220 -198
  217. package/errors.d.ts +50 -24
  218. package/errors.js +146 -120
  219. package/execMode.d.ts +16 -0
  220. package/execMode.js +47 -40
  221. package/extension.d.ts +13 -8
  222. package/extension.js +10 -16
  223. package/getGPUValue.d.ts +1 -0
  224. package/getGPUValue.js +2 -7
  225. package/index.d.ts +28 -68
  226. package/index.js +8 -28
  227. package/indexNamedExports.d.ts +69 -42
  228. package/indexNamedExports.js +25 -0
  229. package/internal.d.ts +16 -0
  230. package/internal.js +12 -0
  231. package/mathUtils.d.ts +5 -0
  232. package/mathUtils.js +7 -11
  233. package/memo.d.ts +11 -0
  234. package/memo.js +20 -22
  235. package/minify.d.ts +5 -0
  236. package/minify.js +93 -0
  237. package/nameUtils.d.ts +29 -0
  238. package/nameUtils.js +428 -398
  239. package/package.json +9 -3
  240. package/resolutionCtx.d.ts +162 -22
  241. package/resolutionCtx.js +911 -624
  242. package/serial/registry.d.ts +15 -0
  243. package/serial/registry.js +106 -0
  244. package/serial/restore.d.ts +49 -0
  245. package/serial/restore.js +68 -0
  246. package/serial/schema.d.ts +58 -0
  247. package/serial/schema.js +209 -0
  248. package/serial/types.d.ts +5 -0
  249. package/serial/types.js +1 -0
  250. package/shared/env.d.ts +9 -0
  251. package/shared/env.js +9 -12
  252. package/shared/generators.d.ts +4 -0
  253. package/shared/generators.js +10 -12
  254. package/shared/meta.d.ts +29 -14
  255. package/shared/meta.js +71 -55
  256. package/shared/normalizeMetadata.d.ts +32 -27
  257. package/shared/normalizeMetadata.js +23 -36
  258. package/shared/repr.d.ts +73 -55
  259. package/shared/repr.js +1 -0
  260. package/shared/soul.d.ts +17 -0
  261. package/shared/soul.js +1 -0
  262. package/shared/stringify.d.ts +2 -0
  263. package/shared/stringify.js +29 -20
  264. package/shared/symbols.d.ts +26 -20
  265. package/shared/symbols.js +79 -79
  266. package/shared/tseynit.d.ts +2 -0
  267. package/shared/tseynit.js +160 -75
  268. package/shared/utilityTypes.d.ts +30 -14
  269. package/shared/utilityTypes.js +2 -6
  270. package/shared/vertexFormat.d.ts +41 -43
  271. package/shared/vertexFormat.js +59 -62
  272. package/std/array.d.ts +2 -7
  273. package/std/array.js +18 -23
  274. package/std/atomic.d.ts +14 -18
  275. package/std/atomic.js +96 -95
  276. package/std/bitcast.d.ts +193 -10
  277. package/std/bitcast.js +309 -39
  278. package/std/boolean.d.ts +19 -33
  279. package/std/boolean.js +296 -288
  280. package/std/copy.d.ts +2 -7
  281. package/std/copy.js +27 -24
  282. package/std/derivative.d.ts +11 -15
  283. package/std/derivative.js +56 -79
  284. package/std/discard.d.ts +1 -6
  285. package/std/discard.js +7 -14
  286. package/std/environment.d.ts +19 -14
  287. package/std/environment.js +71 -51
  288. package/std/extensions.d.ts +2 -8
  289. package/std/extensions.js +10 -11
  290. package/std/index.d.ts +20 -24
  291. package/std/index.js +32 -187
  292. package/std/matrix.d.ts +6 -12
  293. package/std/matrix.js +60 -69
  294. package/std/numeric.d.ts +143 -146
  295. package/std/numeric.js +858 -749
  296. package/std/operators.d.ts +19 -27
  297. package/std/operators.js +227 -193
  298. package/std/packing.d.ts +5 -11
  299. package/std/packing.js +67 -75
  300. package/std/range.d.ts +6 -11
  301. package/std/range.js +48 -36
  302. package/std/subgroup.d.ts +33 -37
  303. package/std/subgroup.js +180 -217
  304. package/std/texture.d.ts +70 -38
  305. package/std/texture.js +176 -172
  306. package/taskQueue.d.ts +6 -0
  307. package/taskQueue.js +30 -0
  308. package/tgpu.d.ts +16 -0
  309. package/tgpu.js +17 -44
  310. package/tgpuBindGroupLayout.d.ts +132 -152
  311. package/tgpuBindGroupLayout.js +346 -268
  312. package/tgpuLogger.d.ts +34 -0
  313. package/tgpuLogger.js +63 -0
  314. package/tgpuUnstable.d.ts +16 -22
  315. package/tgpuUnstable.js +13 -35
  316. package/tgsl/accessIndex.d.ts +2 -0
  317. package/tgsl/accessIndex.js +76 -33
  318. package/tgsl/accessProp.d.ts +2 -0
  319. package/tgsl/accessProp.js +142 -100
  320. package/tgsl/accessStructProp.d.ts +5 -0
  321. package/tgsl/accessStructProp.js +18 -0
  322. package/tgsl/consoleLog/deserializers.d.ts +13 -0
  323. package/tgsl/consoleLog/deserializers.js +119 -103
  324. package/tgsl/consoleLog/logGenerator.d.ts +21 -0
  325. package/tgsl/consoleLog/logGenerator.js +85 -80
  326. package/tgsl/consoleLog/serializers.d.ts +21 -0
  327. package/tgsl/consoleLog/serializers.js +119 -100
  328. package/tgsl/consoleLog/types.d.ts +40 -39
  329. package/tgsl/consoleLog/types.js +1 -0
  330. package/tgsl/conversion.d.ts +33 -0
  331. package/tgsl/conversion.js +272 -193
  332. package/tgsl/forOfUtils.d.ts +15 -0
  333. package/tgsl/forOfUtils.js +85 -70
  334. package/tgsl/generationHelpers.d.ts +22 -39
  335. package/tgsl/generationHelpers.js +85 -58
  336. package/tgsl/infixDispatch.d.ts +70 -0
  337. package/tgsl/infixDispatch.js +48 -46
  338. package/tgsl/jsPolyfills.d.ts +16 -19
  339. package/tgsl/jsPolyfills.js +44 -42
  340. package/tgsl/makeDereferenceable.d.ts +48 -0
  341. package/tgsl/makeDereferenceable.js +86 -0
  342. package/tgsl/makeResolvable.d.ts +22 -0
  343. package/tgsl/makeResolvable.js +33 -0
  344. package/tgsl/shaderGenerator.d.ts +77 -17
  345. package/tgsl/shaderGenerator.js +1 -0
  346. package/tgsl/shellless.d.ts +6 -9
  347. package/tgsl/shellless.js +73 -43
  348. package/tgsl/wgslGenerator.d.ts +66 -59
  349. package/tgsl/wgslGenerator.js +1344 -747
  350. package/types.d.ts +287 -221
  351. package/types.js +61 -44
  352. package/unwrapper.d.ts +31 -26
  353. package/unwrapper.js +1 -0
  354. package/wgslExtensions.d.ts +3 -5
  355. package/wgslExtensions.js +12 -16
  356. package/_virtual/rolldown_runtime.js +0 -13
  357. package/core/buffer/bufferShorthand.d.ts +0 -50
  358. package/core/buffer/bufferShorthand.js +0 -55
  359. package/core/pipeline/applyPipelineState.js +0 -37
  360. package/package.js +0 -5
  361. package/tgsl/shaderGenerator_members.d.ts +0 -33
  362. package/tgsl/shaderGenerator_members.js +0 -12
package/builtin.d.ts CHANGED
@@ -1,54 +1,52 @@
1
- import { BaseData, Bool, Builtin, Decorated, F32, U32, Vec3u, Vec4f, WgslArray } from "./data/wgslTypes.js";
2
-
3
- //#region src/builtin.d.ts
4
- type BuiltinVertexIndex = Decorated<U32, [Builtin<'vertex_index'>]>;
5
- type BuiltinInstanceIndex = Decorated<U32, [Builtin<'instance_index'>]>;
6
- type BuiltinClipDistances = Decorated<WgslArray<U32>, [Builtin<'clip_distances'>]>;
7
- type BuiltinPosition = Decorated<Vec4f, [Builtin<'position'>]>;
8
- type BuiltinFrontFacing = Decorated<Bool, [Builtin<'front_facing'>]>;
9
- type BuiltinFragDepth = Decorated<F32, [Builtin<'frag_depth'>]>;
10
- type BuiltinPrimitiveIndex = Decorated<U32, [Builtin<'primitive_index'>]>;
11
- type BuiltinSampleIndex = Decorated<U32, [Builtin<'sample_index'>]>;
12
- type BuiltinSampleMask = Decorated<U32, [Builtin<'sample_mask'>]>;
13
- type BuiltinLocalInvocationId = Decorated<Vec3u, [Builtin<'local_invocation_id'>]>;
14
- type BuiltinLocalInvocationIndex = Decorated<U32, [Builtin<'local_invocation_index'>]>;
15
- type BuiltinGlobalInvocationId = Decorated<Vec3u, [Builtin<'global_invocation_id'>]>;
16
- type BuiltinGlobalInvocationIndex = Decorated<U32, [Builtin<'global_invocation_index'>]>;
17
- type BuiltinWorkgroupId = Decorated<Vec3u, [Builtin<'workgroup_id'>]>;
18
- type BuiltinWorkgroupIndex = Decorated<U32, [Builtin<'workgroup_index'>]>;
19
- type BuiltinNumWorkgroups = Decorated<Vec3u, [Builtin<'num_workgroups'>]>;
20
- type BuiltinSubgroupInvocationId = Decorated<U32, [Builtin<'subgroup_invocation_id'>]>;
21
- type BuiltinSubgroupSize = Decorated<U32, [Builtin<'subgroup_size'>]>;
22
- type BuiltinSubgroupId = Decorated<U32, [Builtin<'subgroup_id'>]>;
23
- type BuiltinNumSubgroups = Decorated<U32, [Builtin<'num_subgroups'>]>;
24
- declare const builtin: {
25
- readonly vertexIndex: BuiltinVertexIndex;
26
- readonly instanceIndex: BuiltinInstanceIndex;
27
- readonly clipDistances: BuiltinClipDistances;
28
- readonly position: BuiltinPosition;
29
- readonly frontFacing: BuiltinFrontFacing;
30
- readonly fragDepth: BuiltinFragDepth;
31
- readonly primitiveIndex: BuiltinPrimitiveIndex;
32
- readonly sampleIndex: BuiltinSampleIndex;
33
- readonly sampleMask: BuiltinSampleMask;
34
- readonly localInvocationId: BuiltinLocalInvocationId;
35
- readonly localInvocationIndex: BuiltinLocalInvocationIndex;
36
- readonly globalInvocationId: BuiltinGlobalInvocationId;
37
- readonly globalInvocationIndex: BuiltinGlobalInvocationIndex;
38
- readonly workgroupId: BuiltinWorkgroupId;
39
- readonly workgroupIndex: BuiltinWorkgroupIndex;
40
- readonly numWorkgroups: BuiltinNumWorkgroups;
41
- readonly subgroupInvocationId: BuiltinSubgroupInvocationId;
42
- readonly subgroupSize: BuiltinSubgroupSize;
43
- readonly subgroupId: BuiltinSubgroupId;
44
- readonly numSubgroups: BuiltinNumSubgroups;
1
+ import type { BaseData, Bool, Builtin, Decorated, F32, U32, Vec3u, Vec4f, WgslArray } from './data/wgslTypes.ts';
2
+ export type BuiltinVertexIndex = Decorated<U32, [Builtin<'vertex_index'>]>;
3
+ export type BuiltinInstanceIndex = Decorated<U32, [Builtin<'instance_index'>]>;
4
+ export type BuiltinClipDistances = Decorated<WgslArray<U32>, [Builtin<'clip_distances'>]>;
5
+ export type BuiltinPosition = Decorated<Vec4f, [Builtin<'position'>]>;
6
+ export type BuiltinFrontFacing = Decorated<Bool, [Builtin<'front_facing'>]>;
7
+ export type BuiltinFragDepth = Decorated<F32, [Builtin<'frag_depth'>]>;
8
+ export type BuiltinPrimitiveIndex = Decorated<U32, [Builtin<'primitive_index'>]>;
9
+ export type BuiltinSampleIndex = Decorated<U32, [Builtin<'sample_index'>]>;
10
+ export type BuiltinSampleMask = Decorated<U32, [Builtin<'sample_mask'>]>;
11
+ export type BuiltinLocalInvocationId = Decorated<Vec3u, [Builtin<'local_invocation_id'>]>;
12
+ export type BuiltinLocalInvocationIndex = Decorated<U32, [Builtin<'local_invocation_index'>]>;
13
+ export type BuiltinGlobalInvocationId = Decorated<Vec3u, [Builtin<'global_invocation_id'>]>;
14
+ export type BuiltinGlobalInvocationIndex = Decorated<U32, [Builtin<'global_invocation_index'>]>;
15
+ export type BuiltinWorkgroupId = Decorated<Vec3u, [Builtin<'workgroup_id'>]>;
16
+ export type BuiltinWorkgroupIndex = Decorated<U32, [Builtin<'workgroup_index'>]>;
17
+ export type BuiltinNumWorkgroups = Decorated<Vec3u, [Builtin<'num_workgroups'>]>;
18
+ export type BuiltinSubgroupInvocationId = Decorated<U32, [Builtin<'subgroup_invocation_id'>]>;
19
+ export type BuiltinSubgroupSize = Decorated<U32, [Builtin<'subgroup_size'>]>;
20
+ export type BuiltinSubgroupId = Decorated<U32, [Builtin<'subgroup_id'>]>;
21
+ export type BuiltinNumSubgroups = Decorated<U32, [Builtin<'num_subgroups'>]>;
22
+ export declare const builtin: {
23
+ readonly vertexIndex: BuiltinVertexIndex;
24
+ readonly instanceIndex: BuiltinInstanceIndex;
25
+ readonly clipDistances: BuiltinClipDistances;
26
+ readonly position: BuiltinPosition;
27
+ readonly frontFacing: BuiltinFrontFacing;
28
+ readonly fragDepth: BuiltinFragDepth;
29
+ readonly primitiveIndex: BuiltinPrimitiveIndex;
30
+ readonly sampleIndex: BuiltinSampleIndex;
31
+ readonly sampleMask: BuiltinSampleMask;
32
+ readonly localInvocationId: BuiltinLocalInvocationId;
33
+ readonly localInvocationIndex: BuiltinLocalInvocationIndex;
34
+ readonly globalInvocationId: BuiltinGlobalInvocationId;
35
+ readonly globalInvocationIndex: BuiltinGlobalInvocationIndex;
36
+ readonly workgroupId: BuiltinWorkgroupId;
37
+ readonly workgroupIndex: BuiltinWorkgroupIndex;
38
+ readonly numWorkgroups: BuiltinNumWorkgroups;
39
+ readonly subgroupInvocationId: BuiltinSubgroupInvocationId;
40
+ readonly subgroupSize: BuiltinSubgroupSize;
41
+ readonly subgroupId: BuiltinSubgroupId;
42
+ readonly numSubgroups: BuiltinNumSubgroups;
43
+ };
44
+ export type AnyBuiltin = (typeof builtin)[keyof typeof builtin];
45
+ export type AnyComputeBuiltin = BuiltinLocalInvocationId | BuiltinLocalInvocationIndex | BuiltinGlobalInvocationId | BuiltinGlobalInvocationIndex | BuiltinWorkgroupId | BuiltinWorkgroupIndex | BuiltinNumWorkgroups | BuiltinSubgroupInvocationId | BuiltinSubgroupSize | BuiltinSubgroupId | BuiltinNumSubgroups;
46
+ export type AnyVertexInputBuiltin = BuiltinVertexIndex | BuiltinInstanceIndex;
47
+ export type AnyVertexOutputBuiltin = BuiltinClipDistances | BuiltinPosition;
48
+ export type AnyFragmentInputBuiltin = BuiltinPosition | BuiltinFrontFacing | BuiltinPrimitiveIndex | BuiltinSampleIndex | BuiltinSampleMask | BuiltinSubgroupInvocationId | BuiltinSubgroupSize;
49
+ export type AnyFragmentOutputBuiltin = BuiltinFragDepth | BuiltinSampleMask;
50
+ export type OmitBuiltins<S> = S extends AnyBuiltin ? never : S extends BaseData ? S : {
51
+ [Key in keyof S as S[Key] extends AnyBuiltin ? never : Key extends `$${string}` ? never : Key]: S[Key];
45
52
  };
46
- type AnyBuiltin = (typeof builtin)[keyof typeof builtin];
47
- type AnyComputeBuiltin = BuiltinLocalInvocationId | BuiltinLocalInvocationIndex | BuiltinGlobalInvocationId | BuiltinGlobalInvocationIndex | BuiltinWorkgroupId | BuiltinWorkgroupIndex | BuiltinNumWorkgroups | BuiltinSubgroupInvocationId | BuiltinSubgroupSize | BuiltinSubgroupId | BuiltinNumSubgroups;
48
- type AnyVertexInputBuiltin = BuiltinVertexIndex | BuiltinInstanceIndex;
49
- type AnyVertexOutputBuiltin = BuiltinClipDistances | BuiltinPosition;
50
- type AnyFragmentInputBuiltin = BuiltinPosition | BuiltinFrontFacing | BuiltinPrimitiveIndex | BuiltinSampleIndex | BuiltinSampleMask | BuiltinSubgroupInvocationId | BuiltinSubgroupSize;
51
- type AnyFragmentOutputBuiltin = BuiltinFragDepth | BuiltinSampleMask;
52
- type OmitBuiltins<S> = S extends AnyBuiltin ? never : S extends BaseData ? S : { [Key in keyof S as S[Key] extends AnyBuiltin ? never : Key extends `$${string}` ? never : Key]: S[Key] };
53
- //#endregion
54
- export { AnyBuiltin, AnyComputeBuiltin, AnyFragmentInputBuiltin, AnyFragmentOutputBuiltin, AnyVertexInputBuiltin, AnyVertexOutputBuiltin, BuiltinClipDistances, BuiltinFragDepth, BuiltinFrontFacing, BuiltinGlobalInvocationId, BuiltinInstanceIndex, BuiltinLocalInvocationId, BuiltinLocalInvocationIndex, BuiltinNumWorkgroups, BuiltinPosition, BuiltinPrimitiveIndex, BuiltinSampleIndex, BuiltinSampleMask, BuiltinSubgroupInvocationId, BuiltinSubgroupSize, BuiltinVertexIndex, BuiltinWorkgroupId, OmitBuiltins, builtin };
package/builtin.js CHANGED
@@ -1,39 +1,35 @@
1
- import { $internal } from "./shared/symbols.js";
1
+ import { arrayOf } from "./data/array.js";
2
+ import { attribute } from "./data/attributes.js";
2
3
  import { bool, f32, u32 } from "./data/numeric.js";
3
4
  import { vec3u, vec4f } from "./data/vector.js";
4
- import { attribute } from "./data/attributes.js";
5
- import { arrayOf } from "./data/array.js";
6
-
7
- //#region src/builtin.ts
5
+ import { $internal } from "./shared/symbols.js";
8
6
  function defineBuiltin(dataType, value) {
9
- return attribute(dataType, {
10
- [$internal]: true,
11
- type: "@builtin",
12
- params: [value]
13
- });
7
+ return attribute(dataType, {
8
+ [$internal]: true,
9
+ type: '@builtin',
10
+ // oxlint-disable-next-line typescript/no-explicit-any -- it's fine
11
+ params: [value],
12
+ });
14
13
  }
15
- const builtin = {
16
- vertexIndex: defineBuiltin(u32, "vertex_index"),
17
- instanceIndex: defineBuiltin(u32, "instance_index"),
18
- clipDistances: defineBuiltin(arrayOf(u32, 8), "clip_distances"),
19
- position: defineBuiltin(vec4f, "position"),
20
- frontFacing: defineBuiltin(bool, "front_facing"),
21
- fragDepth: defineBuiltin(f32, "frag_depth"),
22
- primitiveIndex: defineBuiltin(u32, "primitive_index"),
23
- sampleIndex: defineBuiltin(u32, "sample_index"),
24
- sampleMask: defineBuiltin(u32, "sample_mask"),
25
- localInvocationId: defineBuiltin(vec3u, "local_invocation_id"),
26
- localInvocationIndex: defineBuiltin(u32, "local_invocation_index"),
27
- globalInvocationId: defineBuiltin(vec3u, "global_invocation_id"),
28
- globalInvocationIndex: defineBuiltin(u32, "global_invocation_index"),
29
- workgroupId: defineBuiltin(vec3u, "workgroup_id"),
30
- workgroupIndex: defineBuiltin(u32, "workgroup_index"),
31
- numWorkgroups: defineBuiltin(vec3u, "num_workgroups"),
32
- subgroupInvocationId: defineBuiltin(u32, "subgroup_invocation_id"),
33
- subgroupSize: defineBuiltin(u32, "subgroup_size"),
34
- subgroupId: defineBuiltin(u32, "subgroup_id"),
35
- numSubgroups: defineBuiltin(u32, "num_subgroups")
14
+ export const builtin = {
15
+ vertexIndex: defineBuiltin(u32, 'vertex_index'),
16
+ instanceIndex: defineBuiltin(u32, 'instance_index'),
17
+ clipDistances: defineBuiltin(arrayOf(u32, 8), 'clip_distances'),
18
+ position: defineBuiltin(vec4f, 'position'),
19
+ frontFacing: defineBuiltin(bool, 'front_facing'),
20
+ fragDepth: defineBuiltin(f32, 'frag_depth'),
21
+ primitiveIndex: defineBuiltin(u32, 'primitive_index'),
22
+ sampleIndex: defineBuiltin(u32, 'sample_index'),
23
+ sampleMask: defineBuiltin(u32, 'sample_mask'),
24
+ localInvocationId: defineBuiltin(vec3u, 'local_invocation_id'),
25
+ localInvocationIndex: defineBuiltin(u32, 'local_invocation_index'),
26
+ globalInvocationId: defineBuiltin(vec3u, 'global_invocation_id'),
27
+ globalInvocationIndex: defineBuiltin(u32, 'global_invocation_index'),
28
+ workgroupId: defineBuiltin(vec3u, 'workgroup_id'),
29
+ workgroupIndex: defineBuiltin(u32, 'workgroup_index'),
30
+ numWorkgroups: defineBuiltin(vec3u, 'num_workgroups'),
31
+ subgroupInvocationId: defineBuiltin(u32, 'subgroup_invocation_id'),
32
+ subgroupSize: defineBuiltin(u32, 'subgroup_size'),
33
+ subgroupId: defineBuiltin(u32, 'subgroup_id'),
34
+ numSubgroups: defineBuiltin(u32, 'num_subgroups'),
36
35
  };
37
-
38
- //#endregion
39
- export { builtin };
@@ -1,9 +1,3 @@
1
- import { TgpuVertexFn } from "../core/function/tgpuVertexFn.js";
2
- import { Vec2f } from "../data/wgslTypes.js";
3
- import "../indexNamedExports.js";
4
-
5
- //#region src/common/fullScreenTriangle.d.ts
6
-
7
1
  /**
8
2
  * A vertex function that defines a single full-screen triangle out
9
3
  * of three points.
@@ -20,8 +14,6 @@ import "../indexNamedExports.js";
20
14
  * pipeline.draw(3);
21
15
  * ```
22
16
  */
23
- declare const fullScreenTriangle: TgpuVertexFn<{}, {
24
- uv: Vec2f;
17
+ export declare const fullScreenTriangle: import("../indexNamedExports.ts").TgpuVertexFn<{}, {
18
+ uv: import("../data/wgslTypes.ts").Vec2f;
25
19
  }>;
26
- //#endregion
27
- export { fullScreenTriangle };
@@ -1,36 +1,28 @@
1
- import { vec2f } from "../data/vector.js";
2
1
  import { builtin } from "../builtin.js";
3
2
  import { vertexFn } from "../core/function/tgpuVertexFn.js";
4
-
5
- //#region src/common/fullScreenTriangle.ts
3
+ import { vec2f } from "../data/vector.js";
6
4
  /**
7
- * A vertex function that defines a single full-screen triangle out
8
- * of three points.
9
- *
10
- * @example
11
- * ```ts
12
- * import { common } from 'typegpu';
13
- *
14
- * const pipeline = root.createRenderPipeline({
15
- * vertex: common.fullScreenTriangle,
16
- * fragment: yourFragmentShader,
17
- * });
18
- *
19
- * pipeline.draw(3);
20
- * ```
21
- */
22
- const fullScreenTriangle = vertexFn({
23
- in: { vertexIndex: builtin.vertexIndex },
24
- out: {
25
- pos: builtin.position,
26
- uv: vec2f
27
- }
28
- })`{
5
+ * A vertex function that defines a single full-screen triangle out
6
+ * of three points.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { common } from 'typegpu';
11
+ *
12
+ * const pipeline = root.createRenderPipeline({
13
+ * vertex: common.fullScreenTriangle,
14
+ * fragment: yourFragmentShader,
15
+ * });
16
+ *
17
+ * pipeline.draw(3);
18
+ * ```
19
+ */
20
+ export const fullScreenTriangle = vertexFn({
21
+ in: { vertexIndex: builtin.vertexIndex },
22
+ out: { pos: builtin.position, uv: vec2f },
23
+ }) `{
29
24
  const pos = array<vec2f, 3>(vec2f(-1, -1), vec2f(3, -1), vec2f(-1, 3));
30
25
  const uv = array<vec2f, 3>(vec2f(0, 1), vec2f(2, 1), vec2f(0, -1));
31
26
 
32
27
  return Out(vec4f(pos[in.vertexIndex], 0, 1), uv[in.vertexIndex]);
33
28
  }`;
34
-
35
- //#endregion
36
- export { fullScreenTriangle };
package/common/index.d.ts CHANGED
@@ -1,9 +1,2 @@
1
- import { fullScreenTriangle } from "./fullScreenTriangle.js";
2
- import { writeSoA } from "./writeSoA.js";
3
-
4
- //#region src/common/index.d.ts
5
- declare namespace index_d_exports {
6
- export { fullScreenTriangle, writeSoA };
7
- }
8
- //#endregion
9
- export { fullScreenTriangle, index_d_exports, writeSoA };
1
+ export { fullScreenTriangle } from './fullScreenTriangle.ts';
2
+ export { writeSoA } from './writeSoA.ts';
package/common/index.js CHANGED
@@ -1,12 +1,3 @@
1
- import { __export } from "../_virtual/rolldown_runtime.js";
2
- import { fullScreenTriangle } from "./fullScreenTriangle.js";
3
- import { writeSoA } from "./writeSoA.js";
4
-
5
- //#region src/common/index.ts
6
- var common_exports = /* @__PURE__ */ __export({
7
- fullScreenTriangle: () => fullScreenTriangle,
8
- writeSoA: () => writeSoA
9
- });
10
-
11
- //#endregion
12
- export { common_exports, fullScreenTriangle, writeSoA };
1
+ // NOTE: This is a barrel file, internal files should not import things from this file
2
+ export { fullScreenTriangle } from "./fullScreenTriangle.js";
3
+ export { writeSoA } from "./writeSoA.js";
@@ -1,16 +1,15 @@
1
- import { Prettify } from "../shared/utilityTypes.js";
2
- import { BufferWriteOptions, TgpuBuffer } from "../core/buffer/buffer.js";
3
- import { BaseData, TypedArrayFor, WgslArray, WgslStruct } from "../data/wgslTypes.js";
4
- import { Undecorate } from "../data/dataTypes.js";
5
-
6
- //#region src/common/writeSoA.d.ts
1
+ import type { Undecorate } from '../data/dataTypes.ts';
2
+ import type { BaseData, TypedArrayFor, WgslArray, WgslStruct } from '../data/wgslTypes.ts';
3
+ import type { BufferWriteOptions, TgpuBuffer } from '../core/buffer/buffer.ts';
4
+ import type { Prettify } from '../shared/utilityTypes.ts';
7
5
  type PackedScalarFor<T> = Undecorate<T> extends WgslArray<infer TElement> ? PackedScalarFor<TElement> : Undecorate<T>;
8
6
  type PackedSoAInputFor<T> = TypedArrayFor<PackedScalarFor<T>>;
9
- type SoAFieldsFor<T extends Record<string, BaseData>> = { [K in keyof T as [PackedSoAInputFor<T[K]>] extends [never] ? never : K]: PackedSoAInputFor<T[K]> };
7
+ type SoAFieldsFor<T extends Record<string, BaseData>> = {
8
+ [K in keyof T as [PackedSoAInputFor<T[K]>] extends [never] ? never : K]: PackedSoAInputFor<T[K]>;
9
+ };
10
10
  type SoAInputFor<T extends Record<string, BaseData>> = [keyof T] extends [keyof SoAFieldsFor<T>] ? Prettify<SoAFieldsFor<T>> : never;
11
- declare function writeSoA<TProps extends Record<string, BaseData>>(buffer: TgpuBuffer<WgslArray<WgslStruct<TProps>>>, data: SoAInputFor<TProps>, options?: BufferWriteOptions): void;
12
- declare namespace writeSoA {
13
- type InputFor<TProps extends Record<string, BaseData>> = SoAInputFor<TProps>;
11
+ export declare function writeSoA<TProps extends Record<string, BaseData>>(buffer: TgpuBuffer<WgslArray<WgslStruct<TProps>>>, data: SoAInputFor<TProps>, options?: BufferWriteOptions): void;
12
+ export declare namespace writeSoA {
13
+ type InputFor<TProps extends Record<string, BaseData>> = SoAInputFor<TProps>;
14
14
  }
15
- //#endregion
16
- export { writeSoA };
15
+ export {};
@@ -1,92 +1,104 @@
1
- import { isAtomic, isMat, isMat2x2f, isMat3x3f, isWgslArray } from "../data/wgslTypes.js";
2
- import { undecorate } from "../data/dataTypes.js";
3
1
  import { invariant } from "../errors.js";
4
- import { alignmentOf } from "../data/alignmentOf.js";
5
2
  import { roundUp } from "../mathUtils.js";
6
- import { sizeOf } from "../data/sizeOf.js";
3
+ import { alignmentOf } from "../data/alignmentOf.js";
4
+ import { undecorate } from "../data/dataTypes.js";
7
5
  import { offsetsForProps } from "../data/offsets.js";
8
-
9
- //#region src/common/writeSoA.ts
6
+ import { sizeOf } from "../data/sizeOf.js";
7
+ import { isAtomic, isMat, isMat2x2f, isMat3x3f, isWgslArray } from "../data/wgslTypes.js";
10
8
  function packedSchemaOf(schema) {
11
- const unpackedSchema = undecorate(schema);
12
- return isAtomic(unpackedSchema) ? unpackedSchema.inner : unpackedSchema;
9
+ const unpackedSchema = undecorate(schema);
10
+ return isAtomic(unpackedSchema) ? unpackedSchema.inner : unpackedSchema;
13
11
  }
14
12
  function packedMatrixDimOf(schema) {
15
- return isMat3x3f(schema) ? 3 : isMat2x2f(schema) ? 2 : isMat(schema) ? 4 : void 0;
13
+ return isMat3x3f(schema) ? 3 : isMat2x2f(schema) ? 2 : isMat(schema) ? 4 : undefined;
16
14
  }
17
15
  function packedSizeOf(schema) {
18
- const packedSchema = packedSchemaOf(schema);
19
- const matrixDim = packedMatrixDimOf(packedSchema);
20
- if (matrixDim) return matrixDim * matrixDim * 4;
21
- if (isWgslArray(packedSchema)) return packedSchema.elementCount * packedSizeOf(packedSchema.elementType);
22
- return sizeOf(packedSchema);
16
+ const packedSchema = packedSchemaOf(schema);
17
+ const matrixDim = packedMatrixDimOf(packedSchema);
18
+ if (matrixDim) {
19
+ return matrixDim * matrixDim * 4;
20
+ }
21
+ if (isWgslArray(packedSchema)) {
22
+ return packedSchema.elementCount * packedSizeOf(packedSchema.elementType);
23
+ }
24
+ return sizeOf(packedSchema);
23
25
  }
24
26
  function computeSoAByteLength(arraySchema, soaData) {
25
- const structSchema = arraySchema.elementType;
26
- let inferredCount;
27
- for (const key in structSchema.propTypes) {
28
- const srcArray = soaData[key];
29
- const fieldSchema = structSchema.propTypes[key];
30
- if (srcArray === void 0 || fieldSchema === void 0) continue;
31
- const packedFieldSize = packedSizeOf(fieldSchema);
32
- if (packedFieldSize === 0) continue;
33
- const fieldElementCount = Math.floor(srcArray.byteLength / packedFieldSize);
34
- inferredCount = inferredCount === void 0 ? fieldElementCount : Math.min(inferredCount, fieldElementCount);
35
- }
36
- if (inferredCount === void 0) return;
37
- const elementStride = roundUp(sizeOf(structSchema), alignmentOf(structSchema));
38
- return inferredCount * elementStride;
27
+ const structSchema = arraySchema.elementType;
28
+ let inferredCount;
29
+ for (const key in structSchema.propTypes) {
30
+ const srcArray = soaData[key];
31
+ const fieldSchema = structSchema.propTypes[key];
32
+ if (srcArray === undefined || fieldSchema === undefined) {
33
+ continue;
34
+ }
35
+ const packedFieldSize = packedSizeOf(fieldSchema);
36
+ if (packedFieldSize === 0) {
37
+ continue;
38
+ }
39
+ const fieldElementCount = Math.floor(srcArray.byteLength / packedFieldSize);
40
+ inferredCount =
41
+ inferredCount === undefined ? fieldElementCount : Math.min(inferredCount, fieldElementCount);
42
+ }
43
+ if (inferredCount === undefined) {
44
+ return undefined;
45
+ }
46
+ const elementStride = roundUp(sizeOf(structSchema), alignmentOf(structSchema));
47
+ return inferredCount * elementStride;
39
48
  }
40
49
  function writePackedValue(target, schema, srcBytes, dstOffset, srcOffset) {
41
- const unpackedSchema = undecorate(schema);
42
- const packedSchema = isAtomic(unpackedSchema) ? unpackedSchema.inner : unpackedSchema;
43
- const matrixDim = packedMatrixDimOf(packedSchema);
44
- if (matrixDim) {
45
- const packedColumnSize = matrixDim * 4;
46
- const gpuColumnStride = roundUp(packedColumnSize, alignmentOf(schema));
47
- for (let col = 0; col < matrixDim; col++) target.set(srcBytes.subarray(srcOffset + col * packedColumnSize, srcOffset + col * packedColumnSize + packedColumnSize), dstOffset + col * gpuColumnStride);
48
- return;
49
- }
50
- if (isWgslArray(unpackedSchema)) {
51
- const packedElementSize = packedSizeOf(unpackedSchema.elementType);
52
- const gpuElementStride = roundUp(sizeOf(unpackedSchema.elementType), alignmentOf(unpackedSchema.elementType));
53
- for (let i = 0; i < unpackedSchema.elementCount; i++) writePackedValue(target, unpackedSchema.elementType, srcBytes, dstOffset + i * gpuElementStride, srcOffset + i * packedElementSize);
54
- return;
55
- }
56
- target.set(srcBytes.subarray(srcOffset, srcOffset + sizeOf(packedSchema)), dstOffset);
50
+ const unpackedSchema = undecorate(schema);
51
+ const packedSchema = isAtomic(unpackedSchema) ? unpackedSchema.inner : unpackedSchema;
52
+ const matrixDim = packedMatrixDimOf(packedSchema);
53
+ if (matrixDim) {
54
+ const packedColumnSize = matrixDim * 4;
55
+ const gpuColumnStride = roundUp(packedColumnSize, alignmentOf(schema));
56
+ for (let col = 0; col < matrixDim; col++) {
57
+ target.set(srcBytes.subarray(srcOffset + col * packedColumnSize, srcOffset + col * packedColumnSize + packedColumnSize), dstOffset + col * gpuColumnStride);
58
+ }
59
+ return;
60
+ }
61
+ if (isWgslArray(unpackedSchema)) {
62
+ const packedElementSize = packedSizeOf(unpackedSchema.elementType);
63
+ const gpuElementStride = roundUp(sizeOf(unpackedSchema.elementType), alignmentOf(unpackedSchema.elementType));
64
+ for (let i = 0; i < unpackedSchema.elementCount; i++) {
65
+ writePackedValue(target, unpackedSchema.elementType, srcBytes, dstOffset + i * gpuElementStride, srcOffset + i * packedElementSize);
66
+ }
67
+ return;
68
+ }
69
+ target.set(srcBytes.subarray(srcOffset, srcOffset + sizeOf(packedSchema)), dstOffset);
57
70
  }
58
71
  function scatterSoA(target, arraySchema, soaData, startOffset, endOffset) {
59
- const structSchema = arraySchema.elementType;
60
- const elementStride = roundUp(sizeOf(structSchema), alignmentOf(structSchema));
61
- invariant(startOffset % elementStride === 0, `startOffset (${startOffset}) must be aligned to the element stride (${elementStride})`);
62
- const startElement = Math.floor(startOffset / elementStride);
63
- const endElement = Math.min(arraySchema.elementCount, Math.ceil(endOffset / elementStride));
64
- const elementCount = Math.max(0, endElement - startElement);
65
- const offsets = offsetsForProps(structSchema);
66
- for (const key in structSchema.propTypes) {
67
- const fieldSchema = structSchema.propTypes[key];
68
- if (fieldSchema === void 0) continue;
69
- const srcArray = soaData[key];
70
- invariant(srcArray !== void 0, `Missing SoA data for field '${key}'`);
71
- const fieldOffset = offsets[key]?.offset;
72
- invariant(fieldOffset !== void 0, `Field ${key} not found in struct schema`);
73
- const packedFieldSize = packedSizeOf(fieldSchema);
74
- const srcBytes = new Uint8Array(srcArray.buffer, srcArray.byteOffset, srcArray.byteLength);
75
- for (let i = 0; i < elementCount; i++) writePackedValue(target, fieldSchema, srcBytes, (startElement + i) * elementStride + fieldOffset, i * packedFieldSize);
76
- }
72
+ const structSchema = arraySchema.elementType;
73
+ const elementStride = roundUp(sizeOf(structSchema), alignmentOf(structSchema));
74
+ invariant(startOffset % elementStride === 0, `startOffset (${startOffset}) must be aligned to the element stride (${elementStride})`);
75
+ const startElement = Math.floor(startOffset / elementStride);
76
+ const endElement = Math.min(arraySchema.elementCount, Math.ceil(endOffset / elementStride));
77
+ const elementCount = Math.max(0, endElement - startElement);
78
+ const offsets = offsetsForProps(structSchema);
79
+ for (const key in structSchema.propTypes) {
80
+ const fieldSchema = structSchema.propTypes[key];
81
+ if (fieldSchema === undefined) {
82
+ continue;
83
+ }
84
+ const srcArray = soaData[key];
85
+ invariant(srcArray !== undefined, `Missing SoA data for field '${key}'`);
86
+ const fieldOffset = offsets[key]?.offset;
87
+ invariant(fieldOffset !== undefined, `Field ${key} not found in struct schema`);
88
+ const packedFieldSize = packedSizeOf(fieldSchema);
89
+ const srcBytes = new Uint8Array(srcArray.buffer, srcArray.byteOffset, srcArray.byteLength);
90
+ for (let i = 0; i < elementCount; i++) {
91
+ writePackedValue(target, fieldSchema, srcBytes, (startElement + i) * elementStride + fieldOffset, i * packedFieldSize);
92
+ }
93
+ }
77
94
  }
78
- function writeSoA(buffer, data, options) {
79
- const arrayBuffer = buffer.arrayBuffer;
80
- const startOffset = options?.startOffset ?? 0;
81
- const bufferSize = sizeOf(buffer.dataType);
82
- const naturalSize = computeSoAByteLength(buffer.dataType, data);
83
- const endOffset = options?.endOffset ?? (naturalSize === void 0 ? bufferSize : Math.min(startOffset + naturalSize, bufferSize));
84
- scatterSoA(new Uint8Array(arrayBuffer), buffer.dataType, data, startOffset, endOffset);
85
- buffer.write(arrayBuffer, {
86
- startOffset,
87
- endOffset
88
- });
95
+ export function writeSoA(buffer, data, options) {
96
+ const arrayBuffer = buffer.arrayBuffer;
97
+ const startOffset = options?.startOffset ?? 0;
98
+ const bufferSize = sizeOf(buffer.dataType);
99
+ const naturalSize = computeSoAByteLength(buffer.dataType, data);
100
+ const endOffset = options?.endOffset ??
101
+ (naturalSize === undefined ? bufferSize : Math.min(startOffset + naturalSize, bufferSize));
102
+ scatterSoA(new Uint8Array(arrayBuffer), buffer.dataType, data, startOffset, endOffset);
103
+ buffer.write(arrayBuffer, { startOffset, endOffset });
89
104
  }
90
-
91
- //#endregion
92
- export { writeSoA };