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
@@ -1,117 +1,117 @@
1
- import { isWgslArray, isWgslStruct } from "../../data/wgslTypes.js";
2
- import { getName } from "../../shared/meta.js";
3
- import { bool, f16, f32, i32, u32 } from "../../data/numeric.js";
4
- import { vec2b, vec2f, vec2h, vec2i, vec2u, vec3b, vec3f, vec3h, vec3i, vec3u, vec4b, vec4f, vec4h, vec4i, vec4u } from "../../data/vector.js";
5
- import { sizeOf } from "../../data/sizeOf.js";
6
- import { mat2x2f, mat3x3f, mat4x4f } from "../../data/matrix.js";
7
1
  import { fn } from "../../core/function/tgpuFn.js";
8
2
  import { slot } from "../../core/slot/slot.js";
9
3
  import { privateVar } from "../../core/variable/tgpuVariable.js";
10
-
11
- //#region src/tgsl/consoleLog/serializers.ts
12
- const dataBlockIndex = privateVar(u32, 0).$name("dataBlockIndex");
13
- const dataByteIndex = privateVar(u32, 0).$name("dataByteIndex");
14
- const dataBufferSlot = slot().$name("dataBuffer");
15
- const nextByteIndex = fn([], u32)`() {
4
+ import { mat2x2f, mat3x3f, mat4x4f } from "../../data/matrix.js";
5
+ import { bool, f16, f32, i32, u32 } from "../../data/numeric.js";
6
+ import { sizeOf } from "../../data/sizeOf.js";
7
+ import { vec2b, vec2f, vec2h, vec2i, vec2u, vec3b, vec3f, vec3h, vec3i, vec3u, vec4b, vec4f, vec4h, vec4i, vec4u, } from "../../data/vector.js";
8
+ import { isWgslArray, isWgslStruct, } from "../../data/wgslTypes.js";
9
+ import { getName } from "../../shared/meta.js";
10
+ const dataBlockIndex = privateVar(u32, 0).$name('dataBlockIndex');
11
+ const dataByteIndex = privateVar(u32, 0).$name('dataByteIndex');
12
+ const dataBufferSlot = slot().$name('dataBuffer');
13
+ const nextByteIndex = fn([], u32) `() {
16
14
  let i = dataByteIndex;
17
15
  dataByteIndex = dataByteIndex + 1u;
18
16
  return i;
19
- }`.$uses({ dataByteIndex }).$name("nextByteIndex");
20
- const nextU32 = "dataBuffer[dataBlockIndex].serializedData[nextByteIndex()]";
21
- const serializerMap = {
22
- f32: fn([f32])`(n) {
17
+ }`
18
+ .$uses({ dataByteIndex })
19
+ .$name('nextByteIndex');
20
+ const nextU32 = 'dataBuffer[dataBlockIndex].serializedData[nextByteIndex()]';
21
+ export const serializerMap = {
22
+ f32: fn([f32]) `(n) {
23
23
  ${nextU32} = bitcast<u32>(n);
24
24
  }`,
25
- f16: fn([f16])`(n) {
25
+ f16: fn([f16]) `(n) {
26
26
  ${nextU32} = pack2x16float(vec2f(f32(n), 0.0));
27
27
  }`,
28
- i32: fn([i32])`(n) {
28
+ i32: fn([i32]) `(n) {
29
29
  ${nextU32} = bitcast<u32>(n);
30
30
  }`,
31
- u32: fn([u32])`(n) {
31
+ u32: fn([u32]) `(n) {
32
32
  ${nextU32} = n;
33
33
  }`,
34
- bool: fn([bool])`(b) {
34
+ bool: fn([bool]) `(b) {
35
35
  ${nextU32} = u32(b);
36
36
  }`,
37
- vec2f: fn([vec2f])`(v) {
37
+ vec2f: fn([vec2f]) `(v) {
38
38
  ${nextU32} = bitcast<u32>(v.x);
39
39
  ${nextU32} = bitcast<u32>(v.y);
40
40
  }`,
41
- vec3f: fn([vec3f])`(v) {
41
+ vec3f: fn([vec3f]) `(v) {
42
42
  ${nextU32} = bitcast<u32>(v.x);
43
43
  ${nextU32} = bitcast<u32>(v.y);
44
44
  ${nextU32} = bitcast<u32>(v.z);
45
45
  }`,
46
- vec4f: fn([vec4f])`(v) {
46
+ vec4f: fn([vec4f]) `(v) {
47
47
  ${nextU32} = bitcast<u32>(v.x);
48
48
  ${nextU32} = bitcast<u32>(v.y);
49
49
  ${nextU32} = bitcast<u32>(v.z);
50
50
  ${nextU32} = bitcast<u32>(v.w);
51
51
  }`,
52
- vec2h: fn([vec2h])`(v) {
52
+ vec2h: fn([vec2h]) `(v) {
53
53
  ${nextU32} = pack2x16float(vec2f(f32(v.x), f32(v.y)));
54
54
  }`,
55
- vec3h: fn([vec3h])`(v) {
55
+ vec3h: fn([vec3h]) `(v) {
56
56
  ${nextU32} = pack2x16float(vec2f(f32(v.x), f32(v.y)));
57
57
  ${nextU32} = pack2x16float(vec2f(f32(v.z), 0.0));
58
58
  }`,
59
- vec4h: fn([vec4h])`(v) {
59
+ vec4h: fn([vec4h]) `(v) {
60
60
  ${nextU32} = pack2x16float(vec2f(f32(v.x), f32(v.y)));
61
61
  ${nextU32} = pack2x16float(vec2f(f32(v.z), f32(v.w)));
62
62
  }`,
63
- vec2i: fn([vec2i])`(v) {
63
+ vec2i: fn([vec2i]) `(v) {
64
64
  ${nextU32} = bitcast<u32>(v.x);
65
65
  ${nextU32} = bitcast<u32>(v.y);
66
66
  }`,
67
- vec3i: fn([vec3i])`(v) {
67
+ vec3i: fn([vec3i]) `(v) {
68
68
  ${nextU32} = bitcast<u32>(v.x);
69
69
  ${nextU32} = bitcast<u32>(v.y);
70
70
  ${nextU32} = bitcast<u32>(v.z);
71
71
  }`,
72
- vec4i: fn([vec4i])`(v) {
72
+ vec4i: fn([vec4i]) `(v) {
73
73
  ${nextU32} = bitcast<u32>(v.x);
74
74
  ${nextU32} = bitcast<u32>(v.y);
75
75
  ${nextU32} = bitcast<u32>(v.z);
76
76
  ${nextU32} = bitcast<u32>(v.w);
77
77
  }`,
78
- vec2u: fn([vec2u])`(v) {
78
+ vec2u: fn([vec2u]) `(v) {
79
79
  ${nextU32} = v.x;
80
80
  ${nextU32} = v.y;
81
81
  }`,
82
- vec3u: fn([vec3u])`(v) {
82
+ vec3u: fn([vec3u]) `(v) {
83
83
  ${nextU32} = v.x;
84
84
  ${nextU32} = v.y;
85
85
  ${nextU32} = v.z;
86
86
  }`,
87
- vec4u: fn([vec4u])`(v) {
87
+ vec4u: fn([vec4u]) `(v) {
88
88
  ${nextU32} = v.x;
89
89
  ${nextU32} = v.y;
90
90
  ${nextU32} = v.z;
91
91
  ${nextU32} = v.w;
92
92
  }`,
93
- "vec2<bool>": fn([vec2b])`(v) {
93
+ 'vec2<bool>': fn([vec2b]) `(v) {
94
94
  ${nextU32} = u32(v.x);
95
95
  ${nextU32} = u32(v.y);
96
96
  }`,
97
- "vec3<bool>": fn([vec3b])`(v) {
97
+ 'vec3<bool>': fn([vec3b]) `(v) {
98
98
  ${nextU32} = u32(v.x);
99
99
  ${nextU32} = u32(v.y);
100
100
  ${nextU32} = u32(v.z);
101
101
  }`,
102
- "vec4<bool>": fn([vec4b])`(v) {
102
+ 'vec4<bool>': fn([vec4b]) `(v) {
103
103
  ${nextU32} = u32(v.x);
104
104
  ${nextU32} = u32(v.y);
105
105
  ${nextU32} = u32(v.z);
106
106
  ${nextU32} = u32(v.w);
107
107
  }`,
108
- mat2x2f: fn([mat2x2f])`(m) {
108
+ mat2x2f: fn([mat2x2f]) `(m) {
109
109
  ${nextU32} = bitcast<u32>(m[0][0]);
110
110
  ${nextU32} = bitcast<u32>(m[0][1]);
111
111
  ${nextU32} = bitcast<u32>(m[1][0]);
112
112
  ${nextU32} = bitcast<u32>(m[1][1]);
113
113
  }`,
114
- mat3x3f: fn([mat3x3f])`(m) {
114
+ mat3x3f: fn([mat3x3f]) `(m) {
115
115
  ${nextU32} = bitcast<u32>(m[0][0]);
116
116
  ${nextU32} = bitcast<u32>(m[0][1]);
117
117
  ${nextU32} = bitcast<u32>(m[0][2]);
@@ -125,7 +125,7 @@ const serializerMap = {
125
125
  ${nextU32} = bitcast<u32>(m[2][2]);
126
126
  ${nextU32} = 0u;
127
127
  }`,
128
- mat4x4f: fn([mat4x4f])`(m) {
128
+ mat4x4f: fn([mat4x4f]) `(m) {
129
129
  ${nextU32} = bitcast<u32>(m[0][0]);
130
130
  ${nextU32} = bitcast<u32>(m[0][1]);
131
131
  ${nextU32} = bitcast<u32>(m[0][2]);
@@ -142,68 +142,88 @@ const serializerMap = {
142
142
  ${nextU32} = bitcast<u32>(m[3][1]);
143
143
  ${nextU32} = bitcast<u32>(m[3][2]);
144
144
  ${nextU32} = bitcast<u32>(m[3][3]);
145
- }`
145
+ }`,
146
146
  };
147
- for (const [name, serializer] of Object.entries(serializerMap)) serializer.$name(`serialize${name[0].toLocaleUpperCase()}${name.slice(1)}`).$uses({
148
- dataBlockIndex,
149
- nextByteIndex,
150
- dataBuffer: dataBufferSlot
151
- });
147
+ // rename the functions and add externals
148
+ for (const [name, serializer] of Object.entries(serializerMap)) {
149
+ serializer
150
+ .$name(`serialize${name[0].toLocaleUpperCase()}${name.slice(1)}`)
151
+ .$uses({ dataBlockIndex, nextByteIndex, dataBuffer: dataBufferSlot });
152
+ }
153
+ // -------
154
+ // Helpers
155
+ // -------
152
156
  function generateHeader(argTypes) {
153
- return `(${argTypes.map((_, i) => `_arg_${i}`).join(", ")})`;
157
+ return `(${argTypes.map((_, i) => `_arg_${i}`).join(', ')})`;
154
158
  }
155
159
  /**
156
- * Returns a serializer TGPU function for a given WGSL data type.
157
- * If the data type is a base type, one of the preexisting functions (with the `dataBufferSlot` filled) is returned.
158
- * Otherwise, a new function is generated.
159
- *
160
- * @param dataType - The WGSL data type descriptor to return a serializer for
161
- * @param dataBuffer - A buffer to store serialized log call data (a necessary external for the returned function)
162
- */
160
+ * Returns a serializer TGPU function for a given WGSL data type.
161
+ * If the data type is a base type, one of the preexisting functions (with the `dataBufferSlot` filled) is returned.
162
+ * Otherwise, a new function is generated.
163
+ *
164
+ * @param dataType - The WGSL data type descriptor to return a serializer for
165
+ * @param dataBuffer - A buffer to store serialized log call data (a necessary external for the returned function)
166
+ */
163
167
  function getSerializer(dataType, dataBuffer) {
164
- const maybeSerializer = serializerMap[dataType.type];
165
- if (maybeSerializer) return maybeSerializer.with(dataBufferSlot, dataBuffer);
166
- if (isWgslStruct(dataType)) {
167
- const props = Object.keys(dataType.propTypes);
168
- const propsSerializer = createCompoundSerializer(Object.values(dataType.propTypes), dataBuffer);
169
- return fn([dataType])`(arg) {\n propsSerializer(${props.map((prop) => `arg.${prop}`).join(", ")});\n}`.$uses({ propsSerializer }).$name(`${getName(dataType) ?? "struct"}Serializer`);
170
- }
171
- if (isWgslArray(dataType)) {
172
- const elementType = dataType.elementType;
173
- const length = dataType.elementCount;
174
- const elementSerializer = getSerializer(elementType, dataBuffer);
175
- return fn([dataType])`(arg) {\n${Array.from({ length }, (_, i) => ` elementSerializer(arg[${i}]);`).join("\n")}\n}`.$uses({ elementSerializer }).$name("arraySerializer");
176
- }
177
- throw new Error(`Cannot serialize data of type ${dataType.type}`);
168
+ const maybeSerializer = serializerMap[dataType.type];
169
+ if (maybeSerializer) {
170
+ return maybeSerializer.with(dataBufferSlot, dataBuffer);
171
+ }
172
+ if (isWgslStruct(dataType)) {
173
+ const props = Object.keys(dataType.propTypes);
174
+ const propTypes = Object.values(dataType.propTypes);
175
+ const propsSerializer = createCompoundSerializer(propTypes, dataBuffer);
176
+ return fn([dataType]) `(arg) {\n propsSerializer(${props
177
+ .map((prop) => `arg.${prop}`)
178
+ .join(', ')});\n}`
179
+ .$uses({ propsSerializer })
180
+ .$name(`${getName(dataType) ?? 'struct'}Serializer`);
181
+ }
182
+ if (isWgslArray(dataType)) {
183
+ const elementType = dataType.elementType;
184
+ const length = dataType.elementCount;
185
+ const elementSerializer = getSerializer(elementType, dataBuffer);
186
+ return fn([dataType]) `(arg) {\n${Array.from({ length }, (_, i) => ` elementSerializer(arg[${i}]);`).join('\n')}\n}`
187
+ .$uses({ elementSerializer })
188
+ .$name('arraySerializer');
189
+ }
190
+ throw new Error(`Cannot serialize data of type ${dataType.type}`);
178
191
  }
179
192
  /**
180
- * Creates a compound serializer TGPU function that serializes multiple arguments of different types to the data buffer.
181
- *
182
- * @param dataTypes - Array of WGSL data types that define the types of arguments to be serialized
183
- * @param dataBuffer - A buffer to store serialized log call data (a necessary external for the returned function)
184
- */
193
+ * Creates a compound serializer TGPU function that serializes multiple arguments of different types to the data buffer.
194
+ *
195
+ * @param dataTypes - Array of WGSL data types that define the types of arguments to be serialized
196
+ * @param dataBuffer - A buffer to store serialized log call data (a necessary external for the returned function)
197
+ */
185
198
  function createCompoundSerializer(dataTypes, dataBuffer) {
186
- const usedSerializers = {};
187
- return fn(dataTypes)`${generateHeader(dataTypes)} {\n${dataTypes.map((arg, i) => {
188
- usedSerializers[`serializer${i}`] = getSerializer(arg, dataBuffer);
189
- return ` serializer${i}(_arg_${i});`;
190
- }).join("\n")}\n}`.$uses(usedSerializers).$name("compoundSerializer");
199
+ const usedSerializers = {};
200
+ const shell = fn(dataTypes);
201
+ const header = generateHeader(dataTypes);
202
+ const body = dataTypes
203
+ .map((arg, i) => {
204
+ usedSerializers[`serializer${i}`] = getSerializer(arg, dataBuffer);
205
+ return ` serializer${i}(_arg_${i});`;
206
+ })
207
+ .join('\n');
208
+ return shell `${header} {\n${body}\n}`.$uses(usedSerializers).$name('compoundSerializer');
191
209
  }
192
210
  /**
193
- * Creates a TGPU function that serializes data to the log buffer.
194
- *
195
- * @param id - Identifier for this logging function instance
196
- * @param dataTypes - Array of WGSL data types that will be logged by this function
197
- * @param dataBuffer - Mutable buffer array to store serialized log call data
198
- * @param indexBuffer - Atomic counter buffer to track the next available log data slot
199
- * @param logOptions - Configuration options
200
- */
201
- function createLoggingFunction(id, dataTypes, dataBuffer, indexBuffer, logOptions) {
202
- const serializedSize = dataTypes.map(sizeOf).reduce((a, b) => a + b, 0);
203
- if (serializedSize > logOptions.logSizeLimit) throw new Error(`Logged data needs to fit in ${logOptions.logSizeLimit} bytes (one of the logs requires ${serializedSize} bytes). Consider increasing the limit by passing appropriate options to tgpu.init().`);
204
- const compoundSerializer = createCompoundSerializer(dataTypes, dataBuffer).$name(`log${id}serializer`);
205
- const header = generateHeader(dataTypes);
206
- return fn(dataTypes)`${header} {
211
+ * Creates a TGPU function that serializes data to the log buffer.
212
+ *
213
+ * @param id - Identifier for this logging function instance
214
+ * @param dataTypes - Array of WGSL data types that will be logged by this function
215
+ * @param dataBuffer - Mutable buffer array to store serialized log call data
216
+ * @param indexBuffer - Atomic counter buffer to track the next available log data slot
217
+ * @param logOptions - Configuration options
218
+ */
219
+ export function createLoggingFunction(id, dataTypes, dataBuffer, indexBuffer, logOptions) {
220
+ const serializedSize = dataTypes.map(sizeOf).reduce((a, b) => a + b, 0);
221
+ if (serializedSize > logOptions.logSizeLimit) {
222
+ throw new Error(`Logged data needs to fit in ${logOptions.logSizeLimit} bytes (one of the logs requires ${serializedSize} bytes). Consider increasing the limit by passing appropriate options to tgpu.init().`);
223
+ }
224
+ const compoundSerializer = createCompoundSerializer(dataTypes, dataBuffer).$name(`log${id}serializer`);
225
+ const header = generateHeader(dataTypes);
226
+ return fn(dataTypes) `${header} {
207
227
  dataBlockIndex = atomicAdd(&indexBuffer, 1);
208
228
  if (dataBlockIndex >= ${logOptions.logCountLimit}) {
209
229
  return;
@@ -212,14 +232,13 @@ function createLoggingFunction(id, dataTypes, dataBuffer, indexBuffer, logOption
212
232
  dataByteIndex = 0;
213
233
 
214
234
  compoundSerializer${header};
215
- }`.$uses({
216
- indexBuffer,
217
- dataBuffer,
218
- dataBlockIndex,
219
- dataByteIndex,
220
- compoundSerializer
221
- }).$name(`log${id}`);
235
+ }`
236
+ .$uses({
237
+ indexBuffer,
238
+ dataBuffer,
239
+ dataBlockIndex,
240
+ dataByteIndex,
241
+ compoundSerializer,
242
+ })
243
+ .$name(`log${id}`);
222
244
  }
223
-
224
- //#endregion
225
- export { createLoggingFunction };
@@ -1,40 +1,39 @@
1
- import "../../data/snippet.js";
2
- import { TgpuMutable } from "../../core/buffer/bufferShorthand.js";
3
- import "../generationHelpers.js";
4
- import { supportedLogOps } from "../jsPolyfills.js";
5
- import { AnyWgslData, Atomic, U32, WgslArray, WgslStruct } from "../../data/wgslTypes.js";
6
-
7
- //#region src/tgsl/consoleLog/types.d.ts
8
- type SupportedLogOp = ReturnType<typeof supportedLogOps>[number];
1
+ import type { TgpuMutable } from '../../core/buffer/bufferBinding.ts';
2
+ import type { Snippet } from '../../data/snippet.ts';
3
+ import type { AnyWgslData, Atomic, U32, WgslArray, WgslStruct } from '../../data/wgslTypes.ts';
4
+ import type { ResolutionCtx } from '../../types.ts';
5
+ import type { supportedLogOps } from '../jsPolyfills.ts';
6
+ export type SupportedLogOp = ReturnType<typeof supportedLogOps>[number];
9
7
  /**
10
8
  * Options for configuring GPU log generation.
11
9
  */
12
- interface LogGeneratorOptions {
13
- /**
14
- * The maximum number of logs that appear during a single draw/dispatch call.
15
- * If this number is exceeded, a warning containing the total number of calls is logged and further logs are dropped.
16
- * @default 64
17
- */
18
- logCountLimit?: number;
19
- /**
20
- * The total number of bytes reserved for each log call.
21
- * If this number is exceeded, an exception is thrown during resolution.
22
- * @default 252
23
- */
24
- logSizeLimit?: number;
25
- /**
26
- * The prefix attached to each log call.
27
- * @default ' GPU '
28
- */
29
- messagePrefix?: string;
10
+ export interface LogGeneratorOptions {
11
+ /**
12
+ * The maximum number of logs that appear during a single draw/dispatch call.
13
+ * If this number is exceeded, a warning containing the total number of calls is logged and further logs are dropped.
14
+ * Draws and dispatches recorded into a shared command encoder count against a single limit for the whole submission.
15
+ * @default 64
16
+ */
17
+ logCountLimit?: number;
18
+ /**
19
+ * The total number of bytes reserved for each log call.
20
+ * If this number is exceeded, an exception is thrown during resolution.
21
+ * @default 252
22
+ */
23
+ logSizeLimit?: number;
24
+ /**
25
+ * The prefix attached to each log call.
26
+ * @default ' GPU '
27
+ */
28
+ messagePrefix?: string;
30
29
  }
31
- type SerializedLogCallData = WgslStruct<{
32
- id: U32;
33
- serializedData: WgslArray<U32>;
30
+ export type SerializedLogCallData = WgslStruct<{
31
+ id: U32;
32
+ serializedData: WgslArray<U32>;
34
33
  }>;
35
- interface LogMeta {
36
- op: SupportedLogOp;
37
- argTypes: (string | AnyWgslData)[];
34
+ export interface LogMeta {
35
+ op: SupportedLogOp;
36
+ argTypes: (string | AnyWgslData)[];
38
37
  }
39
38
  /**
40
39
  * The resources required for logging via console.log within TypeGPU functions.
@@ -44,11 +43,13 @@ interface LogMeta {
44
43
  * @property options - The configuration options for the LogGenerator.
45
44
  * @property logIdToMeta - A mapping from log identifiers to an object containing the corresponding log op and argument types.
46
45
  */
47
- interface LogResources {
48
- indexBuffer: TgpuMutable<Atomic<U32>>;
49
- dataBuffer: TgpuMutable<WgslArray<SerializedLogCallData>>;
50
- options: Required<LogGeneratorOptions>;
51
- logIdToMeta: Map<number, LogMeta>;
46
+ export interface LogResources {
47
+ indexBuffer: TgpuMutable<Atomic<U32>>;
48
+ dataBuffer: TgpuMutable<WgslArray<SerializedLogCallData>>;
49
+ options: Required<LogGeneratorOptions>;
50
+ logIdToMeta: Map<number, LogMeta>;
51
+ }
52
+ export interface LogGenerator {
53
+ generateLog(ctx: ResolutionCtx, op: SupportedLogOp, args: Snippet[]): Snippet;
54
+ get logResources(): LogResources | undefined;
52
55
  }
53
- //#endregion
54
- export { LogGeneratorOptions, LogResources, SupportedLogOp };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,33 @@
1
+ import { UnknownData } from '../data/dataTypes.ts';
2
+ import { type Snippet } from '../data/snippet.ts';
3
+ import { type BaseData, type F16, type F32, type I32, type U32, type WgslStruct } from '../data/wgslTypes.ts';
4
+ import type { ResolutionCtx } from '../types.ts';
5
+ type ConversionAction = 'ref' | 'deref' | 'cast' | 'none';
6
+ export type ConversionResultAction = {
7
+ sourceIndex: number;
8
+ action: ConversionAction;
9
+ targetType?: U32 | F32 | I32 | F16;
10
+ };
11
+ export type ConversionResult = {
12
+ targetType: BaseData;
13
+ actions: ConversionResultAction[];
14
+ hasImplicitConversions?: boolean;
15
+ };
16
+ export declare function getBestConversion(types: BaseData[], targetTypes?: BaseData[]): ConversionResult | undefined;
17
+ /**
18
+ * Unifies input types to a common type.
19
+ */
20
+ export declare function unify<T extends (BaseData | UnknownData)[] | []>(inTypes: T, restrictTo?: BaseData[]): {
21
+ [K in keyof T]: BaseData;
22
+ } | undefined;
23
+ /**
24
+ * Unifies input types to a common type.
25
+ * Unlike `unify`, it does not allow implicit conversions.
26
+ */
27
+ export declare function unifyStrict<T extends (BaseData | UnknownData)[] | []>(inTypes: T, restrictTo?: BaseData[]): {
28
+ [K in keyof T]: BaseData;
29
+ } | undefined;
30
+ export declare function convertToCommonType<T extends Snippet[]>(ctx: ResolutionCtx, values: T, restrictTo?: BaseData[], verbose?: boolean): T | undefined;
31
+ export declare function tryConvertSnippet(ctx: ResolutionCtx, snippet: Snippet, targetDataTypes: BaseData | BaseData[], verbose?: boolean): Snippet;
32
+ export declare function convertStructValues(ctx: ResolutionCtx, structType: WgslStruct, values: Record<string, Snippet>): Snippet[];
33
+ export {};