typegpu 0.11.9 → 0.12.1

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