typegpu 0.11.8 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. package/builtin.d.ts +51 -53
  2. package/builtin.js +30 -34
  3. package/common/fullScreenTriangle.d.ts +2 -10
  4. package/common/fullScreenTriangle.js +20 -28
  5. package/common/index.d.ts +2 -9
  6. package/common/index.js +3 -12
  7. package/common/writeSoA.d.ts +11 -12
  8. package/common/writeSoA.js +88 -76
  9. package/core/buffer/buffer.d.ts +79 -62
  10. package/core/buffer/buffer.js +279 -205
  11. package/core/buffer/bufferBinding.d.ts +71 -0
  12. package/core/buffer/bufferBinding.js +154 -0
  13. package/core/buffer/bufferUsage.d.ts +14 -45
  14. package/core/buffer/bufferUsage.js +1 -171
  15. package/core/buffer/laidOutBuffer.d.ts +25 -0
  16. package/core/buffer/laidOutBuffer.js +55 -0
  17. package/core/commandEncoder/attachments.d.ts +125 -0
  18. package/core/commandEncoder/attachments.js +29 -0
  19. package/core/commandEncoder/commandEncoder.d.ts +53 -0
  20. package/core/commandEncoder/commandEncoder.js +56 -0
  21. package/core/commandEncoder/computePass.d.ts +58 -0
  22. package/core/commandEncoder/computePass.js +63 -0
  23. package/core/commandEncoder/renderPass.d.ts +121 -0
  24. package/core/commandEncoder/renderPass.js +196 -0
  25. package/core/constant/tgpuConstant.d.ts +26 -26
  26. package/core/constant/tgpuConstant.js +76 -65
  27. package/core/declare/tgpuDeclare.d.ts +3 -6
  28. package/core/declare/tgpuDeclare.js +37 -38
  29. package/core/function/autoIO.d.ts +61 -33
  30. package/core/function/autoIO.js +68 -73
  31. package/core/function/comptime.d.ts +11 -13
  32. package/core/function/comptime.js +60 -52
  33. package/core/function/createCallableSchema.d.ts +16 -0
  34. package/core/function/createCallableSchema.js +50 -40
  35. package/core/function/dualImpl.d.ts +44 -0
  36. package/core/function/dualImpl.js +71 -50
  37. package/core/function/entryInputRouter.d.ts +26 -0
  38. package/core/function/entryInputRouter.js +31 -33
  39. package/core/function/extractArgs.d.ts +38 -0
  40. package/core/function/extractArgs.js +202 -200
  41. package/core/function/fnCore.d.ts +44 -0
  42. package/core/function/fnCore.js +148 -92
  43. package/core/function/fnTypes.d.ts +31 -29
  44. package/core/function/fnTypes.js +1 -0
  45. package/core/function/ioSchema.d.ts +12 -10
  46. package/core/function/ioSchema.js +65 -47
  47. package/core/function/shelllessImpl.d.ts +9 -12
  48. package/core/function/shelllessImpl.js +18 -20
  49. package/core/function/templateUtils.d.ts +2 -0
  50. package/core/function/templateUtils.js +9 -8
  51. package/core/function/tgpuComputeFn.d.ts +26 -28
  52. package/core/function/tgpuComputeFn.js +47 -48
  53. package/core/function/tgpuFn.d.ts +34 -37
  54. package/core/function/tgpuFn.js +179 -153
  55. package/core/function/tgpuFragmentFn.d.ts +52 -53
  56. package/core/function/tgpuFragmentFn.js +63 -56
  57. package/core/function/tgpuVertexFn.d.ts +36 -39
  58. package/core/function/tgpuVertexFn.js +56 -53
  59. package/core/pipeline/computePipeline.d.ts +141 -53
  60. package/core/pipeline/computePipeline.js +291 -225
  61. package/core/pipeline/connectAttachmentToShader.d.ts +4 -0
  62. package/core/pipeline/connectAttachmentToShader.js +25 -22
  63. package/core/pipeline/connectTargetsToShader.d.ts +3 -0
  64. package/core/pipeline/connectTargetsToShader.js +29 -27
  65. package/core/pipeline/drawState.d.ts +52 -0
  66. package/core/pipeline/drawState.js +225 -0
  67. package/core/pipeline/limitsOverflow.d.ts +2 -0
  68. package/core/pipeline/limitsOverflow.js +13 -10
  69. package/core/pipeline/performanceTracker.d.ts +14 -0
  70. package/core/pipeline/performanceTracker.js +34 -0
  71. package/core/pipeline/pipelineUtils.d.ts +18 -0
  72. package/core/pipeline/pipelineUtils.js +54 -25
  73. package/core/pipeline/priors.d.ts +1 -0
  74. package/core/pipeline/priors.js +12 -0
  75. package/core/pipeline/renderPipeline.d.ts +246 -261
  76. package/core/pipeline/renderPipeline.js +487 -480
  77. package/core/pipeline/timeable.d.ts +28 -18
  78. package/core/pipeline/timeable.js +90 -52
  79. package/core/pipeline/typeGuards.d.ts +17 -0
  80. package/core/pipeline/typeGuards.js +52 -22
  81. package/core/querySet/querySet.d.ts +26 -21
  82. package/core/querySet/querySet.js +127 -103
  83. package/core/rawCodeSnippet/tgpuRawCodeSnippet.d.ts +13 -18
  84. package/core/rawCodeSnippet/tgpuRawCodeSnippet.js +90 -93
  85. package/core/resolve/externals.d.ts +25 -7
  86. package/core/resolve/externals.js +79 -62
  87. package/core/resolve/namespace.d.ts +22 -25
  88. package/core/resolve/namespace.js +16 -21
  89. package/core/resolve/resolvableString.d.ts +7 -0
  90. package/core/resolve/resolvableString.js +13 -0
  91. package/core/resolve/resolveData.d.ts +10 -0
  92. package/core/resolve/resolveData.js +162 -121
  93. package/core/resolve/stitch.d.ts +8 -0
  94. package/core/resolve/stitch.js +23 -21
  95. package/core/resolve/tgpuResolve.d.ts +55 -53
  96. package/core/resolve/tgpuResolve.js +106 -55
  97. package/core/root/configurableImpl.d.ts +10 -0
  98. package/core/root/configurableImpl.js +17 -19
  99. package/core/root/init.d.ts +76 -38
  100. package/core/root/init.js +346 -454
  101. package/core/root/rootTypes.d.ts +461 -627
  102. package/core/root/rootTypes.js +1 -0
  103. package/core/sampler/sampler.d.ts +50 -31
  104. package/core/sampler/sampler.js +120 -113
  105. package/core/simulate/tgpuSimulate.d.ts +9 -12
  106. package/core/simulate/tgpuSimulate.js +68 -71
  107. package/core/slot/accessor.d.ts +36 -13
  108. package/core/slot/accessor.js +138 -91
  109. package/core/slot/internalSlots.d.ts +2 -0
  110. package/core/slot/internalSlots.js +1 -6
  111. package/core/slot/lazy.d.ts +2 -6
  112. package/core/slot/lazy.js +71 -39
  113. package/core/slot/slot.d.ts +2 -6
  114. package/core/slot/slot.js +45 -38
  115. package/core/slot/slotTypes.d.ts +78 -80
  116. package/core/slot/slotTypes.js +11 -16
  117. package/core/texture/externalTexture.d.ts +20 -11
  118. package/core/texture/externalTexture.js +46 -46
  119. package/core/texture/texture.d.ts +152 -97
  120. package/core/texture/texture.js +407 -314
  121. package/core/texture/textureFormats.d.ts +42 -23
  122. package/core/texture/textureFormats.js +104 -75
  123. package/core/texture/textureProps.d.ts +7 -10
  124. package/core/texture/textureProps.js +1 -0
  125. package/core/texture/textureUtils.d.ts +8 -0
  126. package/core/texture/textureUtils.js +185 -179
  127. package/core/texture/usageExtension.d.ts +21 -18
  128. package/core/texture/usageExtension.js +13 -17
  129. package/core/unroll/tgpuUnroll.d.ts +20 -19
  130. package/core/unroll/tgpuUnroll.js +82 -91
  131. package/core/valueProxyUtils.d.ts +3 -0
  132. package/core/valueProxyUtils.js +52 -41
  133. package/core/variable/tgpuVariable.d.ts +26 -27
  134. package/core/variable/tgpuVariable.js +93 -96
  135. package/core/vertexLayout/connectAttributesToShader.d.ts +9 -0
  136. package/core/vertexLayout/connectAttributesToShader.js +61 -56
  137. package/core/vertexLayout/vertexAttribute.d.ts +21 -17
  138. package/core/vertexLayout/vertexAttribute.js +1 -0
  139. package/core/vertexLayout/vertexLayout.d.ts +24 -18
  140. package/core/vertexLayout/vertexLayout.js +130 -99
  141. package/core/whitespaces.d.ts +2 -0
  142. package/core/whitespaces.js +16 -0
  143. package/data/alignIO.d.ts +7 -0
  144. package/data/alignIO.js +13 -13
  145. package/data/alignmentOf.d.ts +5 -8
  146. package/data/alignmentOf.js +90 -75
  147. package/data/array.d.ts +6 -9
  148. package/data/array.js +48 -40
  149. package/data/atomic.d.ts +2 -7
  150. package/data/atomic.js +26 -23
  151. package/data/attributes.d.ts +19 -21
  152. package/data/attributes.js +192 -132
  153. package/data/autoStruct.d.ts +36 -3
  154. package/data/autoStruct.js +84 -81
  155. package/data/compiledIO.d.ts +5 -0
  156. package/data/compiledIO.js +231 -214
  157. package/data/dataIO.d.ts +13 -11
  158. package/data/dataIO.js +643 -589
  159. package/data/dataTypes.d.ts +83 -65
  160. package/data/dataTypes.js +66 -68
  161. package/data/deepEqual.d.ts +2 -7
  162. package/data/deepEqual.js +80 -55
  163. package/data/disarray.d.ts +6 -10
  164. package/data/disarray.js +52 -46
  165. package/data/float16Conversion.d.ts +4 -0
  166. package/data/float16Conversion.js +7 -0
  167. package/data/getLongestContiguousPrefix.d.ts +4 -8
  168. package/data/getLongestContiguousPrefix.js +6 -11
  169. package/data/index.d.ts +30 -31
  170. package/data/index.js +39 -172
  171. package/data/instanceToSchema.d.ts +24 -27
  172. package/data/instanceToSchema.js +1 -0
  173. package/data/isContiguous.d.ts +4 -8
  174. package/data/isContiguous.js +6 -11
  175. package/data/matrix.d.ts +21 -21
  176. package/data/matrix.js +513 -505
  177. package/data/numberOps.d.ts +6 -0
  178. package/data/numberOps.js +26 -20
  179. package/data/numeric.d.ts +21 -12
  180. package/data/numeric.js +287 -192
  181. package/data/offsetUtils.d.ts +9 -13
  182. package/data/offsetUtils.js +204 -144
  183. package/data/offsets.d.ts +8 -0
  184. package/data/offsets.js +33 -33
  185. package/data/partialIO.d.ts +13 -8
  186. package/data/partialIO.js +124 -113
  187. package/data/ptr.d.ts +12 -12
  188. package/data/ptr.js +42 -44
  189. package/data/ref.d.ts +40 -27
  190. package/data/ref.js +125 -95
  191. package/data/sampler.d.ts +99 -101
  192. package/data/sampler.js +17 -21
  193. package/data/schemaCallWrapper.d.ts +19 -0
  194. package/data/schemaCallWrapper.js +31 -26
  195. package/data/schemaMemoryLayout.d.ts +8 -0
  196. package/data/schemaMemoryLayout.js +213 -185
  197. package/data/sizeOf.d.ts +4 -8
  198. package/data/sizeOf.js +6 -11
  199. package/data/snippet.d.ts +96 -20
  200. package/data/snippet.js +75 -86
  201. package/data/struct.d.ts +4 -7
  202. package/data/struct.js +51 -39
  203. package/data/texture.d.ts +253 -250
  204. package/data/texture.js +238 -200
  205. package/data/unstruct.d.ts +2 -7
  206. package/data/unstruct.js +43 -37
  207. package/data/vector.d.ts +33 -21
  208. package/data/vector.js +234 -221
  209. package/data/vectorImpl.d.ts +231 -0
  210. package/data/vectorImpl.js +563 -515
  211. package/data/vectorOps.d.ts +63 -0
  212. package/data/vectorOps.js +642 -630
  213. package/data/vertexFormatData.d.ts +181 -184
  214. package/data/vertexFormatData.js +104 -106
  215. package/data/wgslTypes.d.ts +665 -600
  216. package/data/wgslTypes.js +220 -198
  217. package/errors.d.ts +50 -24
  218. package/errors.js +146 -120
  219. package/execMode.d.ts +16 -0
  220. package/execMode.js +47 -40
  221. package/extension.d.ts +13 -8
  222. package/extension.js +10 -16
  223. package/getGPUValue.d.ts +1 -0
  224. package/getGPUValue.js +2 -7
  225. package/index.d.ts +28 -68
  226. package/index.js +8 -28
  227. package/indexNamedExports.d.ts +69 -42
  228. package/indexNamedExports.js +25 -0
  229. package/internal.d.ts +16 -0
  230. package/internal.js +12 -0
  231. package/mathUtils.d.ts +5 -0
  232. package/mathUtils.js +7 -11
  233. package/memo.d.ts +11 -0
  234. package/memo.js +20 -22
  235. package/minify.d.ts +5 -0
  236. package/minify.js +93 -0
  237. package/nameUtils.d.ts +29 -0
  238. package/nameUtils.js +428 -398
  239. package/package.json +9 -3
  240. package/resolutionCtx.d.ts +162 -22
  241. package/resolutionCtx.js +911 -624
  242. package/serial/registry.d.ts +15 -0
  243. package/serial/registry.js +106 -0
  244. package/serial/restore.d.ts +49 -0
  245. package/serial/restore.js +68 -0
  246. package/serial/schema.d.ts +58 -0
  247. package/serial/schema.js +209 -0
  248. package/serial/types.d.ts +5 -0
  249. package/serial/types.js +1 -0
  250. package/shared/env.d.ts +9 -0
  251. package/shared/env.js +9 -12
  252. package/shared/generators.d.ts +4 -0
  253. package/shared/generators.js +10 -12
  254. package/shared/meta.d.ts +29 -14
  255. package/shared/meta.js +71 -55
  256. package/shared/normalizeMetadata.d.ts +32 -27
  257. package/shared/normalizeMetadata.js +23 -36
  258. package/shared/repr.d.ts +73 -55
  259. package/shared/repr.js +1 -0
  260. package/shared/soul.d.ts +17 -0
  261. package/shared/soul.js +1 -0
  262. package/shared/stringify.d.ts +2 -0
  263. package/shared/stringify.js +29 -20
  264. package/shared/symbols.d.ts +26 -20
  265. package/shared/symbols.js +79 -79
  266. package/shared/tseynit.d.ts +2 -0
  267. package/shared/tseynit.js +160 -75
  268. package/shared/utilityTypes.d.ts +30 -14
  269. package/shared/utilityTypes.js +2 -6
  270. package/shared/vertexFormat.d.ts +41 -43
  271. package/shared/vertexFormat.js +59 -62
  272. package/std/array.d.ts +2 -7
  273. package/std/array.js +18 -23
  274. package/std/atomic.d.ts +14 -18
  275. package/std/atomic.js +96 -95
  276. package/std/bitcast.d.ts +193 -10
  277. package/std/bitcast.js +309 -39
  278. package/std/boolean.d.ts +19 -33
  279. package/std/boolean.js +296 -288
  280. package/std/copy.d.ts +2 -7
  281. package/std/copy.js +27 -24
  282. package/std/derivative.d.ts +11 -15
  283. package/std/derivative.js +56 -79
  284. package/std/discard.d.ts +1 -6
  285. package/std/discard.js +7 -14
  286. package/std/environment.d.ts +19 -14
  287. package/std/environment.js +71 -51
  288. package/std/extensions.d.ts +2 -8
  289. package/std/extensions.js +10 -11
  290. package/std/index.d.ts +20 -24
  291. package/std/index.js +32 -187
  292. package/std/matrix.d.ts +6 -12
  293. package/std/matrix.js +60 -69
  294. package/std/numeric.d.ts +143 -146
  295. package/std/numeric.js +858 -749
  296. package/std/operators.d.ts +19 -27
  297. package/std/operators.js +227 -193
  298. package/std/packing.d.ts +5 -11
  299. package/std/packing.js +67 -75
  300. package/std/range.d.ts +6 -11
  301. package/std/range.js +48 -36
  302. package/std/subgroup.d.ts +33 -37
  303. package/std/subgroup.js +180 -217
  304. package/std/texture.d.ts +70 -38
  305. package/std/texture.js +176 -172
  306. package/taskQueue.d.ts +6 -0
  307. package/taskQueue.js +30 -0
  308. package/tgpu.d.ts +16 -0
  309. package/tgpu.js +17 -44
  310. package/tgpuBindGroupLayout.d.ts +132 -152
  311. package/tgpuBindGroupLayout.js +346 -268
  312. package/tgpuLogger.d.ts +34 -0
  313. package/tgpuLogger.js +63 -0
  314. package/tgpuUnstable.d.ts +16 -22
  315. package/tgpuUnstable.js +13 -35
  316. package/tgsl/accessIndex.d.ts +2 -0
  317. package/tgsl/accessIndex.js +76 -33
  318. package/tgsl/accessProp.d.ts +2 -0
  319. package/tgsl/accessProp.js +142 -100
  320. package/tgsl/accessStructProp.d.ts +5 -0
  321. package/tgsl/accessStructProp.js +18 -0
  322. package/tgsl/consoleLog/deserializers.d.ts +13 -0
  323. package/tgsl/consoleLog/deserializers.js +119 -103
  324. package/tgsl/consoleLog/logGenerator.d.ts +21 -0
  325. package/tgsl/consoleLog/logGenerator.js +85 -80
  326. package/tgsl/consoleLog/serializers.d.ts +21 -0
  327. package/tgsl/consoleLog/serializers.js +119 -100
  328. package/tgsl/consoleLog/types.d.ts +40 -39
  329. package/tgsl/consoleLog/types.js +1 -0
  330. package/tgsl/conversion.d.ts +33 -0
  331. package/tgsl/conversion.js +272 -193
  332. package/tgsl/forOfUtils.d.ts +15 -0
  333. package/tgsl/forOfUtils.js +85 -70
  334. package/tgsl/generationHelpers.d.ts +22 -39
  335. package/tgsl/generationHelpers.js +85 -58
  336. package/tgsl/infixDispatch.d.ts +70 -0
  337. package/tgsl/infixDispatch.js +48 -46
  338. package/tgsl/jsPolyfills.d.ts +16 -19
  339. package/tgsl/jsPolyfills.js +44 -42
  340. package/tgsl/makeDereferenceable.d.ts +48 -0
  341. package/tgsl/makeDereferenceable.js +86 -0
  342. package/tgsl/makeResolvable.d.ts +22 -0
  343. package/tgsl/makeResolvable.js +33 -0
  344. package/tgsl/shaderGenerator.d.ts +77 -17
  345. package/tgsl/shaderGenerator.js +1 -0
  346. package/tgsl/shellless.d.ts +6 -9
  347. package/tgsl/shellless.js +73 -43
  348. package/tgsl/wgslGenerator.d.ts +66 -59
  349. package/tgsl/wgslGenerator.js +1344 -747
  350. package/types.d.ts +287 -221
  351. package/types.js +61 -44
  352. package/unwrapper.d.ts +31 -26
  353. package/unwrapper.js +1 -0
  354. package/wgslExtensions.d.ts +3 -5
  355. package/wgslExtensions.js +12 -16
  356. package/_virtual/rolldown_runtime.js +0 -13
  357. package/core/buffer/bufferShorthand.d.ts +0 -50
  358. package/core/buffer/bufferShorthand.js +0 -55
  359. package/core/pipeline/applyPipelineState.js +0 -37
  360. package/package.js +0 -5
  361. package/tgsl/shaderGenerator_members.d.ts +0 -33
  362. package/tgsl/shaderGenerator_members.js +0 -12
@@ -1,230 +1,247 @@
1
- import { isAtomic, isDecorated, isMat, isMat2x2f, isMat3x3f, isVec, isVecBool, isWgslArray, isWgslStruct } from "./wgslTypes.js";
2
- import { isDisarray, isUnstruct } from "./dataTypes.js";
3
- import { formatToWGSLType, isPackedData } from "./vertexFormatData.js";
4
- import { alignmentOf } from "./alignmentOf.js";
5
1
  import { roundUp } from "../mathUtils.js";
6
- import { sizeOf } from "./sizeOf.js";
2
+ import { logger } from "../tgpuLogger.js";
3
+ import { alignmentOf } from "./alignmentOf.js";
4
+ import { isDisarray, isUnstruct } from "./dataTypes.js";
7
5
  import { offsetsForProps } from "./offsets.js";
8
-
9
- //#region src/data/compiledIO.ts
10
- const EVAL_ALLOWED_IN_ENV = (() => {
11
- try {
12
- new Function("return true");
13
- return true;
14
- } catch {
15
- return false;
16
- }
6
+ import { sizeOf } from "./sizeOf.js";
7
+ import { formatToWGSLType, isPackedData } from "./vertexFormatData.js";
8
+ import * as wgsl from "./wgslTypes.js";
9
+ export const EVAL_ALLOWED_IN_ENV = (() => {
10
+ try {
11
+ // oxlint-disable-next-line typescript-eslint/no-implied-eval typescript-eslint/no-new
12
+ new Function('return true');
13
+ return true;
14
+ }
15
+ catch {
16
+ return false;
17
+ }
17
18
  })();
18
- const compiledWriters = /* @__PURE__ */ new WeakMap();
19
+ const compiledWriters = new WeakMap();
20
+ let didWarnAboutEvalFallback = false;
19
21
  const typeToPrimitive = {
20
- u32: "u32",
21
- vec2u: "u32",
22
- vec3u: "u32",
23
- vec4u: "u32",
24
- u16: "u16",
25
- i32: "i32",
26
- vec2i: "i32",
27
- vec3i: "i32",
28
- vec4i: "i32",
29
- f32: "f32",
30
- vec2f: "f32",
31
- vec3f: "f32",
32
- vec4f: "f32",
33
- f16: "f16",
34
- vec2h: "f16",
35
- vec3h: "f16",
36
- vec4h: "f16",
37
- mat2x2f: "f32",
38
- mat3x3f: "f32",
39
- mat4x4f: "f32"
22
+ u32: 'u32',
23
+ vec2u: 'u32',
24
+ vec3u: 'u32',
25
+ vec4u: 'u32',
26
+ u16: 'u16',
27
+ i32: 'i32',
28
+ vec2i: 'i32',
29
+ vec3i: 'i32',
30
+ vec4i: 'i32',
31
+ f32: 'f32',
32
+ vec2f: 'f32',
33
+ vec3f: 'f32',
34
+ vec4f: 'f32',
35
+ f16: 'f16',
36
+ vec2h: 'f16',
37
+ vec3h: 'f16',
38
+ vec4h: 'f16',
39
+ mat2x2f: 'f32',
40
+ mat3x3f: 'f32',
41
+ mat4x4f: 'f32',
40
42
  };
41
43
  const vertexFormatToPrimitive = {
42
- uint8: "u8",
43
- uint8x2: "u8",
44
- uint8x4: "u8",
45
- sint8: "i8",
46
- sint8x2: "i8",
47
- sint8x4: "i8",
48
- unorm8: "u8",
49
- unorm8x2: "u8",
50
- unorm8x4: "u8",
51
- snorm8: "i8",
52
- snorm8x2: "i8",
53
- snorm8x4: "i8",
54
- uint16: "u16",
55
- uint16x2: "u16",
56
- uint16x4: "u16",
57
- sint16: "i16",
58
- sint16x2: "i16",
59
- sint16x4: "i16",
60
- unorm16: "u16",
61
- unorm16x2: "u16",
62
- unorm16x4: "u16",
63
- snorm16: "i16",
64
- snorm16x2: "i16",
65
- snorm16x4: "i16",
66
- float16: "f16",
67
- float16x2: "f16",
68
- float16x4: "f16",
69
- float32: "f32",
70
- float32x2: "f32",
71
- float32x3: "f32",
72
- float32x4: "f32",
73
- uint32: "u32",
74
- uint32x2: "u32",
75
- uint32x3: "u32",
76
- uint32x4: "u32",
77
- sint32: "i32",
78
- sint32x2: "i32",
79
- sint32x3: "i32",
80
- sint32x4: "i32"
44
+ uint8: 'u8',
45
+ uint8x2: 'u8',
46
+ uint8x4: 'u8',
47
+ sint8: 'i8',
48
+ sint8x2: 'i8',
49
+ sint8x4: 'i8',
50
+ unorm8: 'u8',
51
+ unorm8x2: 'u8',
52
+ unorm8x4: 'u8',
53
+ snorm8: 'i8',
54
+ snorm8x2: 'i8',
55
+ snorm8x4: 'i8',
56
+ uint16: 'u16',
57
+ uint16x2: 'u16',
58
+ uint16x4: 'u16',
59
+ sint16: 'i16',
60
+ sint16x2: 'i16',
61
+ sint16x4: 'i16',
62
+ unorm16: 'u16',
63
+ unorm16x2: 'u16',
64
+ unorm16x4: 'u16',
65
+ snorm16: 'i16',
66
+ snorm16x2: 'i16',
67
+ snorm16x4: 'i16',
68
+ float16: 'f16',
69
+ float16x2: 'f16',
70
+ float16x4: 'f16',
71
+ float32: 'f32',
72
+ float32x2: 'f32',
73
+ float32x3: 'f32',
74
+ float32x4: 'f32',
75
+ uint32: 'u32',
76
+ uint32x2: 'u32',
77
+ uint32x3: 'u32',
78
+ uint32x4: 'u32',
79
+ sint32: 'i32',
80
+ sint32x2: 'i32',
81
+ sint32x3: 'i32',
82
+ sint32x4: 'i32',
81
83
  };
82
84
  const primitiveToWriteFunction = {
83
- u32: "setUint32",
84
- i32: "setInt32",
85
- f32: "setFloat32",
86
- u16: "setUint16",
87
- i16: "setInt16",
88
- f16: "setFloat16",
89
- u8: "setUint8",
90
- i8: "setInt8"
85
+ u32: 'setUint32',
86
+ i32: 'setInt32',
87
+ f32: 'setFloat32',
88
+ u16: 'setUint16',
89
+ i16: 'setInt16',
90
+ f16: 'setFloat16',
91
+ u8: 'setUint8',
92
+ i8: 'setInt8',
91
93
  };
92
94
  /**
93
- * @privateRemarks
94
- * based on the `Channel Formats` table https://www.w3.org/TR/WGSL/#texel-formats
95
- */
95
+ * @privateRemarks
96
+ * based on the `Channel Formats` table https://www.w3.org/TR/WGSL/#texel-formats
97
+ */
96
98
  const vertexFormatValueTransform = {
97
- unorm8: (value) => `Math.round(${value} * 255)`,
98
- unorm8x2: (value) => `Math.round(${value} * 255)`,
99
- unorm8x4: (value) => `Math.round(${value} * 255)`,
100
- snorm8: (value) => `Math.round(${value} * 127)`,
101
- snorm8x2: (value) => `Math.round(${value} * 127)`,
102
- snorm8x4: (value) => `Math.round(${value} * 127)`,
103
- unorm16: (value) => `Math.round(${value} * 65535)`,
104
- unorm16x2: (value) => `Math.round(${value} * 65535)`,
105
- unorm16x4: (value) => `Math.round(${value} * 65535)`,
106
- snorm16: (value) => `Math.round(${value} * 32767)`,
107
- snorm16x2: (value) => `Math.round(${value} * 32767)`,
108
- snorm16x4: (value) => `Math.round(${value} * 32767)`
99
+ unorm8: (value) => `Math.round(${value} * 255)`,
100
+ unorm8x2: (value) => `Math.round(${value} * 255)`,
101
+ unorm8x4: (value) => `Math.round(${value} * 255)`,
102
+ snorm8: (value) => `Math.round(${value} * 127)`,
103
+ snorm8x2: (value) => `Math.round(${value} * 127)`,
104
+ snorm8x4: (value) => `Math.round(${value} * 127)`,
105
+ unorm16: (value) => `Math.round(${value} * 65535)`,
106
+ unorm16x2: (value) => `Math.round(${value} * 65535)`,
107
+ unorm16x4: (value) => `Math.round(${value} * 65535)`,
108
+ snorm16: (value) => `Math.round(${value} * 32767)`,
109
+ snorm16x2: (value) => `Math.round(${value} * 32767)`,
110
+ snorm16x4: (value) => `Math.round(${value} * 32767)`,
109
111
  };
110
112
  const specialPackedFormats = {
111
- "unorm10-10-10-2": {
112
- writeFunction: "setUint32",
113
- generator: (offsetExpr, valueExpr) => `output.setUint32(${offsetExpr}, ((${valueExpr}.x*1023&0x3FF)<<22)|((${valueExpr}.y*1023&0x3FF)<<12)|((${valueExpr}.z*1023&0x3FF)<<2)|(${valueExpr}.w*3&3), littleEndian);\n`
114
- },
115
- "unorm8x4-bgra": {
116
- writeFunction: "setUint8",
117
- generator: (offsetExpr, valueExpr) => {
118
- return [
119
- "z",
120
- "y",
121
- "x",
122
- "w"
123
- ].map((c, idx) => `output.setUint8((${offsetExpr} + ${idx}), Math.round(${valueExpr}.${c} * 255), littleEndian);\n`).join("");
124
- }
125
- }
113
+ 'unorm10-10-10-2': {
114
+ writeFunction: 'setUint32',
115
+ generator: (offsetExpr, valueExpr) => `output.setUint32(${offsetExpr}, ((${valueExpr}.x*1023&0x3FF)<<22)|((${valueExpr}.y*1023&0x3FF)<<12)|((${valueExpr}.z*1023&0x3FF)<<2)|(${valueExpr}.w*3&3), littleEndian);\n`,
116
+ },
117
+ 'unorm8x4-bgra': {
118
+ writeFunction: 'setUint8',
119
+ generator: (offsetExpr, valueExpr) => {
120
+ const bgraComponents = ['z', 'y', 'x', 'w'];
121
+ return bgraComponents
122
+ .map((c, idx) => `output.setUint8((${offsetExpr} + ${idx}), Math.round(${valueExpr}.${c} * 255), littleEndian);\n`)
123
+ .join('');
124
+ },
125
+ },
126
126
  };
127
- function buildWriter(node, offsetExpr, valueExpr, depth = 0, partial = false) {
128
- const emitWrite = (writeFunc, addr, value) => partial ? `if (${addr} < endOffset) { output.${writeFunc}(${addr}, ${value}, littleEndian); }\n` : `output.${writeFunc}(${addr}, ${value}, littleEndian);\n`;
129
- const emitBlock = (addr, block) => partial ? `if (${addr} < endOffset) {\n${block}}\n` : block;
130
- function go(node$1, offsetExpr$1, valueExpr$1, depth$1) {
131
- const loopVar = [
132
- "i",
133
- "j",
134
- "k"
135
- ][depth$1] || `i${depth$1}`;
136
- if (isAtomic(node$1) || isDecorated(node$1)) return go(node$1.inner, offsetExpr$1, valueExpr$1, depth$1);
137
- if (isWgslStruct(node$1) || isUnstruct(node$1)) return Object.entries(offsetsForProps(node$1)).map(([key, propOffset]) => {
138
- const subSchema = node$1.propTypes[key];
139
- return subSchema ? go(subSchema, `(${offsetExpr$1} + ${propOffset.offset})`, `${valueExpr$1}.${key}`, depth$1) : "";
140
- }).join("");
141
- if (isWgslArray(node$1) || isDisarray(node$1)) {
142
- const elementSize = roundUp(sizeOf(node$1.elementType), alignmentOf(node$1));
143
- const totalSize = node$1.elementCount * elementSize;
144
- const copyLen = partial ? `Math.min(${valueExpr$1}.byteLength, Math.max(0, endOffset - (${offsetExpr$1})))` : `Math.min(${valueExpr$1}.byteLength, ${totalSize})`;
145
- let code = `if (ArrayBuffer.isView(${valueExpr$1})) {\n`;
146
- code += ` new Uint8Array(output.buffer).set(new Uint8Array(${valueExpr$1}.buffer, ${valueExpr$1}.byteOffset, ${copyLen}), output.byteOffset + (${offsetExpr$1}));\n`;
147
- code += `} else {\n`;
148
- code += `for (let ${loopVar} = 0; ${loopVar} < ${node$1.elementCount}; ${loopVar}++) {\n`;
149
- if (partial) code += `if ((${offsetExpr$1} + ${loopVar} * ${elementSize}) >= endOffset) return;\n`;
150
- code += go(node$1.elementType, `(${offsetExpr$1} + ${loopVar} * ${elementSize})`, `${valueExpr$1}[${loopVar}]`, depth$1 + 1);
151
- code += "}\n";
152
- code += "}\n";
153
- return code;
154
- }
155
- if (isVec(node$1)) {
156
- if (isVecBool(node$1)) throw new Error("Compiled writers do not support boolean vectors");
157
- const primitive$1 = typeToPrimitive[node$1.type];
158
- const componentSize = sizeOf(node$1.primitive);
159
- const writeFunc = primitiveToWriteFunction[primitive$1];
160
- return Array.from({ length: node$1.componentCount }, (_, i) => emitWrite(writeFunc, `(${offsetExpr$1} + ${i * componentSize})`, `${valueExpr$1}[${i}]`)).join("");
161
- }
162
- if (isMat(node$1)) {
163
- const writeFunc = primitiveToWriteFunction[typeToPrimitive[node$1.type]];
164
- const matSize = isMat2x2f(node$1) ? 2 : isMat3x3f(node$1) ? 3 : 4;
165
- const rowStride = roundUp(matSize * 4, 8);
166
- const components = [
167
- "x",
168
- "y",
169
- "z",
170
- "w"
171
- ];
172
- const wgslElementStride = rowStride / 4;
173
- return Array.from({ length: matSize * matSize }, (_, idx) => {
174
- const col = Math.floor(idx / matSize);
175
- const row = idx % matSize;
176
- const packedIndex = col * matSize + row;
177
- const wgslIndex = col * wgslElementStride + row;
178
- return emitWrite(writeFunc, `(${offsetExpr$1} + ${col * rowStride + row * 4})`, `ArrayBuffer.isView(${valueExpr$1}) ? ${valueExpr$1}[${wgslIndex}] : Array.isArray(${valueExpr$1}) ? ${valueExpr$1}[${packedIndex}] : ${valueExpr$1}.columns[${col}].${components[row]}`);
179
- }).join("");
180
- }
181
- if (isPackedData(node$1)) {
182
- const formatName = node$1.type;
183
- if (formatName in specialPackedFormats) {
184
- const handler = specialPackedFormats[formatName];
185
- return emitBlock(`(${offsetExpr$1})`, handler.generator(offsetExpr$1, valueExpr$1));
186
- }
187
- const primitive$1 = vertexFormatToPrimitive[formatName];
188
- const writeFunc = primitiveToWriteFunction[primitive$1];
189
- const wgslType = formatToWGSLType[formatName];
190
- const componentCount = isVec(wgslType) ? wgslType.componentCount : 1;
191
- const componentSize = primitive$1 === "u8" || primitive$1 === "i8" ? 1 : primitive$1 === "u16" || primitive$1 === "i16" || primitive$1 === "f16" ? 2 : 4;
192
- const components = [
193
- "x",
194
- "y",
195
- "z",
196
- "w"
197
- ];
198
- const transform = vertexFormatValueTransform[formatName];
199
- return Array.from({ length: componentCount }, (_, idx) => {
200
- const accessor = componentCount === 1 ? valueExpr$1 : `${valueExpr$1}.${components[idx]}`;
201
- const value = transform ? transform(accessor) : accessor;
202
- return emitWrite(writeFunc, `(${offsetExpr$1} + ${idx * componentSize})`, value);
203
- }).join("");
204
- }
205
- if (!Object.hasOwn(typeToPrimitive, node$1.type)) throw new Error(`Primitive ${node$1.type} is unsupported by compiled writer`);
206
- const primitive = typeToPrimitive[node$1.type];
207
- return emitWrite(primitiveToWriteFunction[primitive], offsetExpr$1, valueExpr$1);
208
- }
209
- return go(node, offsetExpr, valueExpr, depth);
127
+ export function buildWriter(node, offsetExpr, valueExpr, depth = 0, partial = false) {
128
+ const emitWrite = (writeFunc, addr, value) => partial
129
+ ? `if (${addr} < endOffset) { output.${writeFunc}(${addr}, ${value}, littleEndian); }\n`
130
+ : `output.${writeFunc}(${addr}, ${value}, littleEndian);\n`;
131
+ const emitBlock = (addr, block) => partial ? `if (${addr} < endOffset) {\n${block}}\n` : block;
132
+ function go(node, offsetExpr, valueExpr, depth) {
133
+ const loopVar = ['i', 'j', 'k'][depth] || `i${depth}`;
134
+ if (wgsl.isAtomic(node) || wgsl.isDecorated(node)) {
135
+ return go(node.inner, offsetExpr, valueExpr, depth);
136
+ }
137
+ if (wgsl.isWgslStruct(node) || isUnstruct(node)) {
138
+ return Object.entries(offsetsForProps(node))
139
+ .map(([key, propOffset]) => {
140
+ const subSchema = node.propTypes[key];
141
+ return subSchema
142
+ ? go(subSchema, `(${offsetExpr} + ${propOffset.offset})`, `${valueExpr}.${key}`, depth)
143
+ : '';
144
+ })
145
+ .join('');
146
+ }
147
+ if (wgsl.isWgslArray(node) || isDisarray(node)) {
148
+ if (node.elementCount === 0) {
149
+ throw new Error('Cannot write using a runtime-sized schema.');
150
+ }
151
+ const elementSize = roundUp(sizeOf(node.elementType), alignmentOf(node));
152
+ const totalSize = node.elementCount * elementSize;
153
+ const copyLen = partial
154
+ ? `Math.min(${valueExpr}.byteLength, Math.max(0, endOffset - (${offsetExpr})))`
155
+ : `Math.min(${valueExpr}.byteLength, ${totalSize})`;
156
+ let code = `if (ArrayBuffer.isView(${valueExpr})) {\n`;
157
+ code += ` new Uint8Array(output.buffer).set(new Uint8Array(${valueExpr}.buffer, ${valueExpr}.byteOffset, ${copyLen}), output.byteOffset + (${offsetExpr}));\n`;
158
+ code += `} else {\n`;
159
+ code += `for (let ${loopVar} = 0; ${loopVar} < ${node.elementCount}; ${loopVar}++) {\n`;
160
+ if (partial) {
161
+ code += `if ((${offsetExpr} + ${loopVar} * ${elementSize}) >= endOffset) return;\n`;
162
+ }
163
+ code += go(node.elementType, `(${offsetExpr} + ${loopVar} * ${elementSize})`, `${valueExpr}[${loopVar}]`, depth + 1);
164
+ code += '}\n';
165
+ code += '}\n';
166
+ return code;
167
+ }
168
+ if (wgsl.isVec(node)) {
169
+ if (wgsl.isVecBool(node)) {
170
+ throw new Error('Compiled writers do not support boolean vectors');
171
+ }
172
+ const primitive = typeToPrimitive[node.type];
173
+ const componentSize = sizeOf(node.primitive);
174
+ const writeFunc = primitiveToWriteFunction[primitive];
175
+ return Array.from({ length: node.componentCount }, (_, i) => emitWrite(writeFunc, `(${offsetExpr} + ${i * componentSize})`, `${valueExpr}[${i}]`)).join('');
176
+ }
177
+ if (wgsl.isMat(node)) {
178
+ const primitive = typeToPrimitive[node.type];
179
+ const writeFunc = primitiveToWriteFunction[primitive];
180
+ const matSize = wgsl.isMat2x2f(node) ? 2 : wgsl.isMat3x3f(node) ? 3 : 4;
181
+ const rowStride = roundUp(matSize * 4, 8);
182
+ const components = ['x', 'y', 'z', 'w'];
183
+ const wgslElementStride = rowStride / 4;
184
+ return Array.from({ length: matSize * matSize }, (_, idx) => {
185
+ const col = Math.floor(idx / matSize);
186
+ const row = idx % matSize;
187
+ const packedIndex = col * matSize + row;
188
+ const wgslIndex = col * wgslElementStride + row;
189
+ return emitWrite(writeFunc, `(${offsetExpr} + ${col * rowStride + row * 4})`, `ArrayBuffer.isView(${valueExpr}) ? ${valueExpr}[${wgslIndex}] : Array.isArray(${valueExpr}) ? ${valueExpr}[${packedIndex}] : ${valueExpr}.columns[${col}].${components[row]}`);
190
+ }).join('');
191
+ }
192
+ if (isPackedData(node)) {
193
+ const formatName = node.type;
194
+ if (formatName in specialPackedFormats) {
195
+ const handler = specialPackedFormats[formatName];
196
+ return emitBlock(`(${offsetExpr})`, handler.generator(offsetExpr, valueExpr));
197
+ }
198
+ const primitive = vertexFormatToPrimitive[formatName];
199
+ const writeFunc = primitiveToWriteFunction[primitive];
200
+ const wgslType = formatToWGSLType[formatName];
201
+ const componentCount = wgsl.isVec(wgslType) ? wgslType.componentCount : 1;
202
+ const componentSize = primitive === 'u8' || primitive === 'i8'
203
+ ? 1
204
+ : primitive === 'u16' || primitive === 'i16' || primitive === 'f16'
205
+ ? 2
206
+ : 4;
207
+ const components = ['x', 'y', 'z', 'w'];
208
+ const transform = vertexFormatValueTransform[formatName];
209
+ return Array.from({ length: componentCount }, (_, idx) => {
210
+ const accessor = componentCount === 1 ? valueExpr : `${valueExpr}.${components[idx]}`;
211
+ const value = transform ? transform(accessor) : accessor;
212
+ return emitWrite(writeFunc, `(${offsetExpr} + ${idx * componentSize})`, value);
213
+ }).join('');
214
+ }
215
+ if (!Object.hasOwn(typeToPrimitive, node.type)) {
216
+ throw new Error(`Primitive ${node.type} is unsupported by compiled writer`);
217
+ }
218
+ const primitive = typeToPrimitive[node.type];
219
+ return emitWrite(primitiveToWriteFunction[primitive], offsetExpr, valueExpr);
220
+ }
221
+ return go(node, offsetExpr, valueExpr, depth);
210
222
  }
211
- function getCompiledWriter(schema) {
212
- if (!EVAL_ALLOWED_IN_ENV) {
213
- console.warn("This environment does not allow eval - using default writer as fallback");
214
- return;
215
- }
216
- const cached = compiledWriters.get(schema);
217
- if (cached) return cached;
218
- try {
219
- const fullBody = buildWriter(schema, "offset", "value", 0, false);
220
- const body = `if (offset > 0 || endOffset < output.byteLength) {\n${buildWriter(schema, "offset", "value", 0, true)}} else {\n${fullBody}}\n`;
221
- const fn = new Function("output", "offset", "value", "littleEndian=true", "endOffset=output.byteLength", body);
222
- compiledWriters.set(schema, fn);
223
- return fn;
224
- } catch (error) {
225
- console.warn(`Failed to compile writer for schema: ${schema}\nReason: ${error instanceof Error ? error.message : String(error)}\nFalling back to default writer`);
226
- }
223
+ export function getCompiledWriter(schema) {
224
+ if (!EVAL_ALLOWED_IN_ENV) {
225
+ if (!didWarnAboutEvalFallback) {
226
+ logger.warn('fallback', 'This environment does not allow eval - using default writer as fallback');
227
+ didWarnAboutEvalFallback = true;
228
+ }
229
+ return undefined;
230
+ }
231
+ const cached = compiledWriters.get(schema);
232
+ if (cached) {
233
+ return cached;
234
+ }
235
+ try {
236
+ const fullBody = buildWriter(schema, 'offset', 'value', 0, false);
237
+ const partialBody = buildWriter(schema, 'offset', 'value', 0, true);
238
+ const body = `if (offset > 0 || endOffset < output.byteLength) {\n${partialBody}} else {\n${fullBody}}\n`;
239
+ // oxlint-disable-next-line typescript-eslint/no-implied-eval
240
+ const fn = new Function('output', 'offset', 'value', 'littleEndian=true', 'endOffset=output.byteLength', body);
241
+ compiledWriters.set(schema, fn);
242
+ return fn;
243
+ }
244
+ catch (error) {
245
+ logger.warn('fallback', `Failed to compile writer for schema: ${schema}\nReason: ${error instanceof Error ? error.message : String(error)}\nFalling back to default writer`);
246
+ }
227
247
  }
228
-
229
- //#endregion
230
- export { getCompiledWriter };
package/data/dataIO.d.ts CHANGED
@@ -1,11 +1,13 @@
1
- import { BufferWriteOptions } from "../core/buffer/buffer.js";
2
- import { BaseData } from "./wgslTypes.js";
3
- import { Infer, InferInput } from "../shared/repr.js";
4
- import "typed-binary";
5
-
6
- //#region src/data/dataIO.d.ts
7
-
8
- declare function writeToArrayBuffer<T extends BaseData>(buffer: ArrayBuffer, schema: T, data: InferInput<T> | ArrayBuffer, options?: BufferWriteOptions): void;
9
- declare function readFromArrayBuffer<T extends BaseData>(buffer: ArrayBuffer, schema: T): Infer<T>;
10
- //#endregion
11
- export { readFromArrayBuffer, writeToArrayBuffer };
1
+ import { type ISerialInput, type ISerialOutput } from 'typed-binary';
2
+ import type { Infer, InferInput } from '../shared/repr.ts';
3
+ import type * as wgsl from './wgslTypes.ts';
4
+ import { type BaseData } from './wgslTypes.ts';
5
+ import type { BufferWriteOptions } from '../core/buffer/buffer.ts';
6
+ export declare function writeData<TData extends wgsl.BaseData>(output: ISerialOutput, schema: TData, value: Infer<TData>): void;
7
+ export declare function readData<TData extends wgsl.BaseData>(input: ISerialInput, schema: TData): Infer<TData>;
8
+ export declare function calculateOffsets<T extends BaseData>(options: BufferWriteOptions | undefined, schema: T, data: InferInput<T> | ArrayBuffer): {
9
+ startOffset: number;
10
+ endOffset: number;
11
+ };
12
+ export declare function writeToArrayBuffer<T extends BaseData>(buffer: ArrayBuffer, schema: T, data: InferInput<T> | ArrayBuffer, options?: BufferWriteOptions): void;
13
+ export declare function readFromArrayBuffer<T extends BaseData>(buffer: ArrayBuffer, schema: T): Infer<T>;