typegpu 0.11.9 → 0.12.0

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