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,133 @@
1
- import { isWgslArray, isWgslData, isWgslStruct } from "../../data/wgslTypes.js";
2
- import { niceStringify } from "../../shared/stringify.js";
3
- import { vec2b, vec2f, vec2h, vec2i, vec2u, vec3b, vec3f, vec3h, vec3i, vec3u, vec4b, vec4f, vec4h, vec4i, vec4u } from "../../data/vector.js";
4
- import { sizeOf } from "../../data/sizeOf.js";
5
1
  import { mat2x2f, mat3x3f, mat4x4f } from "../../data/matrix.js";
6
- import { bitcastU32toF32, bitcastU32toI32 } from "../../std/bitcast.js";
2
+ import { f32, i32, u32 } from "../../data/numeric.js";
3
+ import { sizeOf } from "../../data/sizeOf.js";
4
+ import { vec2b, vec2f, vec2h, vec2i, vec2u, vec3b, vec3f, vec3h, vec3i, vec3u, vec4b, vec4f, vec4h, vec4i, vec4u, } from "../../data/vector.js";
5
+ import { isWgslArray, isWgslData, isWgslStruct, } from "../../data/wgslTypes.js";
6
+ import { niceStringify } from "../../shared/stringify.js";
7
+ import { bitcast } from "../../std/bitcast.js";
7
8
  import { unpack2x16float } from "../../std/packing.js";
8
-
9
- //#region src/tgsl/consoleLog/deserializers.ts
10
- const toF = (n) => bitcastU32toF32(n ?? 0);
11
- const toI = (n) => bitcastU32toI32(n ?? 0);
9
+ import { logger } from "../../tgpuLogger.js";
10
+ const toF = (n) => bitcast(u32, f32)(n ?? 0);
11
+ const toI = (n) => bitcast(u32, i32)(n ?? 0);
12
12
  const unpack = (n) => unpack2x16float(n ?? 0);
13
13
  const deserializerMap = {
14
- f32: (d) => toF(d[0]),
15
- f16: (d) => unpack(d[0]).x,
16
- i32: (d) => toI(d[0]),
17
- u32: (d) => d[0] ?? 0,
18
- bool: (d) => !!d[0],
19
- vec2f: (d) => vec2f(toF(d[0]), toF(d[1])),
20
- vec3f: (d) => vec3f(toF(d[0]), toF(d[1]), toF(d[2])),
21
- vec4f: (d) => vec4f(toF(d[0]), toF(d[1]), toF(d[2]), toF(d[3])),
22
- vec2h(d) {
23
- const xyVec = unpack(d[0]);
24
- return vec2h(xyVec.x, xyVec.y);
25
- },
26
- vec3h(d) {
27
- const xyVec = unpack(d[0]);
28
- const zVec = unpack(d[1]);
29
- return vec3h(xyVec.x, xyVec.y, zVec.x);
30
- },
31
- vec4h(d) {
32
- const xyVec = unpack(d[0]);
33
- const zwVec = unpack(d[1]);
34
- return vec4h(xyVec.x, xyVec.y, zwVec.x, zwVec.y);
35
- },
36
- vec2i: (d) => vec2i(toI(d[0]), toI(d[1])),
37
- vec3i: (d) => vec3i(toI(d[0]), toI(d[1]), toI(d[2])),
38
- vec4i: (d) => vec4i(toI(d[0]), toI(d[1]), toI(d[2]), toI(d[3])),
39
- vec2u: (d) => vec2u(d[0] ?? 0, d[1] ?? 0),
40
- vec3u: (d) => vec3u(d[0] ?? 0, d[1] ?? 0, d[2] ?? 0),
41
- vec4u: (d) => vec4u(d[0] ?? 0, d[1] ?? 0, d[2] ?? 0, d[3] ?? 0),
42
- "vec2<bool>": (d) => vec2b(!!d[0], !!d[1]),
43
- "vec3<bool>": (d) => vec3b(!!d[0], !!d[1], !!d[2]),
44
- "vec4<bool>": (d) => vec4b(!!d[0], !!d[1], !!d[2], !!d[3]),
45
- mat2x2f: (d) => mat2x2f(toF(d[0]), toF(d[1]), toF(d[2]), toF(d[3])),
46
- mat3x3f: (d) => mat3x3f(toF(d[0]), toF(d[1]), toF(d[2]), toF(d[4]), toF(d[5]), toF(d[6]), toF(d[8]), toF(d[9]), toF(d[10])),
47
- mat4x4f: (d) => mat4x4f(toF(d[0]), toF(d[1]), toF(d[2]), toF(d[3]), toF(d[4]), toF(d[5]), toF(d[6]), toF(d[7]), toF(d[8]), toF(d[9]), toF(d[10]), toF(d[11]), toF(d[12]), toF(d[13]), toF(d[14]), toF(d[15]))
14
+ f32: (d) => toF(d[0]),
15
+ f16: (d) => unpack(d[0]).x,
16
+ i32: (d) => toI(d[0]),
17
+ u32: (d) => d[0] ?? 0,
18
+ bool: (d) => !!d[0],
19
+ vec2f: (d) => vec2f(toF(d[0]), toF(d[1])),
20
+ vec3f: (d) => vec3f(toF(d[0]), toF(d[1]), toF(d[2])),
21
+ vec4f: (d) => vec4f(toF(d[0]), toF(d[1]), toF(d[2]), toF(d[3])),
22
+ vec2h(d) {
23
+ const xyVec = unpack(d[0]);
24
+ return vec2h(xyVec.x, xyVec.y);
25
+ },
26
+ vec3h(d) {
27
+ const xyVec = unpack(d[0]);
28
+ const zVec = unpack(d[1]);
29
+ return vec3h(xyVec.x, xyVec.y, zVec.x);
30
+ },
31
+ vec4h(d) {
32
+ const xyVec = unpack(d[0]);
33
+ const zwVec = unpack(d[1]);
34
+ return vec4h(xyVec.x, xyVec.y, zwVec.x, zwVec.y);
35
+ },
36
+ vec2i: (d) => vec2i(toI(d[0]), toI(d[1])),
37
+ vec3i: (d) => vec3i(toI(d[0]), toI(d[1]), toI(d[2])),
38
+ vec4i: (d) => vec4i(toI(d[0]), toI(d[1]), toI(d[2]), toI(d[3])),
39
+ vec2u: (d) => vec2u(d[0] ?? 0, d[1] ?? 0),
40
+ vec3u: (d) => vec3u(d[0] ?? 0, d[1] ?? 0, d[2] ?? 0),
41
+ vec4u: (d) => vec4u(d[0] ?? 0, d[1] ?? 0, d[2] ?? 0, d[3] ?? 0),
42
+ 'vec2<bool>': (d) => vec2b(!!d[0], !!d[1]),
43
+ 'vec3<bool>': (d) => vec3b(!!d[0], !!d[1], !!d[2]),
44
+ 'vec4<bool>': (d) => vec4b(!!d[0], !!d[1], !!d[2], !!d[3]),
45
+ mat2x2f: (d) => mat2x2f(toF(d[0]), toF(d[1]), toF(d[2]), toF(d[3])),
46
+ mat3x3f: (d) =>
47
+ // oxfmt-ignore
48
+ mat3x3f(toF(d[0]), toF(d[1]), toF(d[2]), toF(d[4]), toF(d[5]), toF(d[6]), toF(d[8]), toF(d[9]), toF(d[10])),
49
+ mat4x4f: (d) =>
50
+ // oxfmt-ignore
51
+ mat4x4f(toF(d[0]), toF(d[1]), toF(d[2]), toF(d[3]), toF(d[4]), toF(d[5]), toF(d[6]), toF(d[7]), toF(d[8]), toF(d[9]), toF(d[10]), toF(d[11]), toF(d[12]), toF(d[13]), toF(d[14]), toF(d[15])),
48
52
  };
53
+ // -------
54
+ // Helpers
55
+ // -------
49
56
  /**
50
- * Deserializes binary data from a Uint32Array into a JavaScript value based on the provided WGSL data type.
51
- *
52
- * @param data - The binary data as a Uint32Array to be deserialized
53
- * @param dataType - The WGSL data type specification that determines how to interpret the binary data
54
- */
57
+ * Deserializes binary data from a Uint32Array into a JavaScript value based on the provided WGSL data type.
58
+ *
59
+ * @param data - The binary data as a Uint32Array to be deserialized
60
+ * @param dataType - The WGSL data type specification that determines how to interpret the binary data
61
+ */
55
62
  function deserialize(data, dataType) {
56
- const maybeDeserializer = deserializerMap[dataType.type];
57
- if (maybeDeserializer) return maybeDeserializer(data);
58
- if (isWgslStruct(dataType)) {
59
- const props = Object.keys(dataType.propTypes);
60
- const decodedProps = deserializeCompound(data, Object.values(dataType.propTypes));
61
- return Object.fromEntries(props.map((key, index) => [key, decodedProps[index]]));
62
- }
63
- if (isWgslArray(dataType)) {
64
- const elementType = dataType.elementType;
65
- const length = dataType.elementCount;
66
- return deserializeCompound(data, Array.from({ length }, () => elementType));
67
- }
68
- throw new Error(`Cannot deserialize data of type ${dataType.type}`);
63
+ const maybeDeserializer = deserializerMap[dataType.type];
64
+ if (maybeDeserializer) {
65
+ return maybeDeserializer(data);
66
+ }
67
+ if (isWgslStruct(dataType)) {
68
+ const props = Object.keys(dataType.propTypes);
69
+ const propTypes = Object.values(dataType.propTypes);
70
+ const decodedProps = deserializeCompound(data, propTypes);
71
+ return Object.fromEntries(props.map((key, index) => [key, decodedProps[index]]));
72
+ }
73
+ if (isWgslArray(dataType)) {
74
+ const elementType = dataType.elementType;
75
+ const length = dataType.elementCount;
76
+ const result = deserializeCompound(data, Array.from({ length }, () => elementType));
77
+ return result;
78
+ }
79
+ throw new Error(`Cannot deserialize data of type ${dataType.type}`);
69
80
  }
70
81
  /**
71
- * Deserializes a list of elements from a Uint32Array buffer using provided type information.
72
- * If there is a string value among the type information, it is returned as is.
73
- *
74
- * @param data - The Uint32Array buffer containing the serialized data
75
- * @param dataTypes - The WGSL data type specification that determines how to interpret the binary data, or string literals
76
- */
82
+ * Deserializes a list of elements from a Uint32Array buffer using provided type information.
83
+ * If there is a string value among the type information, it is returned as is.
84
+ *
85
+ * @param data - The Uint32Array buffer containing the serialized data
86
+ * @param dataTypes - The WGSL data type specification that determines how to interpret the binary data, or string literals
87
+ */
77
88
  function deserializeCompound(data, dataTypes) {
78
- let index = 0;
79
- return dataTypes.map((info) => {
80
- if (!isWgslData(info)) return info;
81
- const size = Math.ceil(sizeOf(info) / 4);
82
- const value = deserialize(data.subarray(index, index + size), info);
83
- index += size;
84
- return value;
85
- });
89
+ let index = 0;
90
+ return dataTypes.map((info) => {
91
+ if (!isWgslData(info)) {
92
+ return info;
93
+ }
94
+ const size = Math.ceil(sizeOf(info) / 4);
95
+ const value = deserialize(data.subarray(index, index + size), info);
96
+ index += size;
97
+ return value;
98
+ });
86
99
  }
87
- function deserializeAndStringify(serializedData, argTypes) {
88
- return deserializeCompound(serializedData, argTypes).map(niceStringify);
100
+ export function deserializeAndStringify(serializedData, argTypes) {
101
+ return deserializeCompound(serializedData, argTypes).map(niceStringify);
89
102
  }
90
103
  /**
91
- * Reads and deserializes log data from GPU buffers, logging results to the console.
92
- *
93
- * @remarks
94
- * - Log entries with IDs equal to 0 are filtered out.
95
- * - Console messages are prepended with options.messagePrefix styled with purple background and white text.
96
- * - A warning is displayed if the log count exceeds the limit passed in options.
97
- * - After processing, the index buffer and the data buffer are cleared.
98
- */
99
- function logDataFromGPU(resources) {
100
- const { indexBuffer, dataBuffer, logIdToMeta, options } = resources;
101
- dataBuffer.read().then((data) => {
102
- data.filter((e) => e.id).forEach(({ id, serializedData }) => {
103
- const { argTypes, op } = logIdToMeta.get(id);
104
- const results = deserializeAndStringify(new Uint32Array(serializedData), argTypes);
105
- if (results.length === 0) results.push("");
106
- op.bind(console)(`%c${options.messagePrefix}%c ${results[0]}`, "background: #936ff5; color: white;", "color: inherit; background: none", ...results.slice(1));
107
- });
108
- });
109
- indexBuffer.read().then((totalCalls) => {
110
- if (totalCalls > options.logCountLimit) console.warn(`Log count limit per dispatch (${options.logCountLimit}) exceeded by ${totalCalls - options.logCountLimit} calls. Consider increasing the limit by passing appropriate options to tgpu.init().`);
111
- });
112
- dataBuffer.buffer.clear();
113
- indexBuffer.buffer.clear();
104
+ * Reads and deserializes log data from GPU buffers, logging results to the console.
105
+ *
106
+ * @remarks
107
+ * - Log entries with IDs equal to 0 are filtered out.
108
+ * - Console messages are prepended with options.messagePrefix styled with purple background and white text.
109
+ * - A warning is displayed if the log count exceeds the limit passed in options.
110
+ * - After processing, the index buffer and the data buffer are cleared.
111
+ */
112
+ export function logDataFromGPU(resources) {
113
+ const { indexBuffer, dataBuffer, logIdToMeta, options } = resources;
114
+ void dataBuffer.read().then((data) => {
115
+ data
116
+ .filter((e) => e.id)
117
+ .forEach(({ id, serializedData }) => {
118
+ const { argTypes, op } = logIdToMeta.get(id);
119
+ const results = deserializeAndStringify(new Uint32Array(serializedData), argTypes);
120
+ if (results.length === 0) {
121
+ results.push('');
122
+ }
123
+ op.bind(console)(`%c${options.messagePrefix}%c ${results[0]}`, 'background: #936ff5; color: white;', 'color: inherit; background: none', ...results.slice(1));
124
+ });
125
+ });
126
+ void indexBuffer.read().then((totalCalls) => {
127
+ if (totalCalls > options.logCountLimit) {
128
+ logger.warn('log-limit-exceeded', `Log count limit per dispatch (${options.logCountLimit}) exceeded by ${totalCalls - options.logCountLimit} calls. Consider increasing the limit by passing appropriate options to tgpu.init().`);
129
+ }
130
+ });
131
+ dataBuffer.buffer.clear();
132
+ indexBuffer.buffer.clear();
114
133
  }
115
-
116
- //#endregion
117
- export { logDataFromGPU };
@@ -0,0 +1,21 @@
1
+ import type { TgpuRoot } from '../../core/root/rootTypes.ts';
2
+ import { type Snippet } from '../../data/snippet.ts';
3
+ import type { ResolutionCtx } from '../../internal.ts';
4
+ import { type LogGenerator, type LogResources, type SupportedLogOp } from './types.ts';
5
+ export declare class LogGeneratorNullImpl implements LogGenerator {
6
+ get logResources(): undefined;
7
+ generateLog(): Snippet;
8
+ }
9
+ export declare class LogGeneratorImpl implements LogGenerator {
10
+ #private;
11
+ constructor(root: TgpuRoot);
12
+ /**
13
+ * Generates all necessary resources for serializing arguments for logging purposes.
14
+ *
15
+ * @param ctx Resolution context.
16
+ * @param args Argument snippets. Snippets of UnknownType will be treated as string literals.
17
+ * @returns A snippet containing the call to the logging function.
18
+ */
19
+ generateLog(ctx: ResolutionCtx, op: SupportedLogOp, args: Snippet[]): Snippet;
20
+ get logResources(): LogResources | undefined;
21
+ }
@@ -1,88 +1,93 @@
1
- import { $internal } from "../../shared/symbols.js";
2
- import { Void } from "../../data/wgslTypes.js";
1
+ import { stitch } from "../../core/resolve/stitch.js";
2
+ import { shaderStageSlot } from "../../core/slot/internalSlots.js";
3
+ import { arrayOf } from "../../data/array.js";
4
+ import { atomic } from "../../data/atomic.js";
3
5
  import { UnknownData, unptr } from "../../data/dataTypes.js";
6
+ import { u32 } from "../../data/numeric.js";
4
7
  import { snip } from "../../data/snippet.js";
8
+ import { struct } from "../../data/struct.js";
9
+ import { Void, } from "../../data/wgslTypes.js";
5
10
  import { invariant } from "../../errors.js";
6
- import { stitch } from "../../core/resolve/stitch.js";
11
+ import { $internal } from "../../shared/symbols.js";
12
+ import { logger } from "../../tgpuLogger.js";
7
13
  import { convertToCommonType } from "../conversion.js";
8
- import { u32 } from "../../data/numeric.js";
9
14
  import { concretizeSnippet } from "../generationHelpers.js";
10
- import { struct } from "../../data/struct.js";
11
- import { shaderStageSlot } from "../../core/slot/internalSlots.js";
12
- import { arrayOf } from "../../data/array.js";
13
- import { atomic } from "../../data/atomic.js";
14
15
  import { createLoggingFunction } from "./serializers.js";
15
-
16
- //#region src/tgsl/consoleLog/logGenerator.ts
16
+ import {} from "./types.js";
17
17
  const defaultOptions = {
18
- logCountLimit: 64,
19
- logSizeLimit: 252,
20
- messagePrefix: " GPU "
21
- };
22
- const fallbackSnippet = snip("/* console.log() */", Void, "runtime");
23
- var LogGeneratorNullImpl = class {
24
- get logResources() {}
25
- generateLog() {
26
- console.warn("'console.log' is only supported when resolving pipelines.");
27
- return fallbackSnippet;
28
- }
29
- };
30
- var LogGeneratorImpl = class {
31
- #options;
32
- #logIdToMeta;
33
- #firstUnusedId = 1;
34
- #indexBuffer;
35
- #dataBuffer;
36
- constructor(root) {
37
- this.#options = {
38
- ...defaultOptions,
39
- ...root[$internal].logOptions
40
- };
41
- this.#logIdToMeta = /* @__PURE__ */ new Map();
42
- const SerializedLogData = struct({
43
- id: u32,
44
- serializedData: arrayOf(u32, Math.ceil(this.#options.logSizeLimit / 4))
45
- }).$name("SerializedLogData");
46
- this.#dataBuffer = root.createMutable(arrayOf(SerializedLogData, this.#options.logCountLimit)).$name("dataBuffer");
47
- this.#indexBuffer = root.createMutable(atomic(u32)).$name("indexBuffer");
48
- }
49
- /**
50
- * Generates all necessary resources for serializing arguments for logging purposes.
51
- *
52
- * @param ctx Resolution context.
53
- * @param args Argument snippets. Snippets of UnknownType will be treated as string literals.
54
- * @returns A snippet containing the call to the logging function.
55
- */
56
- generateLog(ctx, op, args) {
57
- if (shaderStageSlot.$ === "vertex") {
58
- console.warn(`'console' operations are not supported in vertex shaders.`);
59
- return fallbackSnippet;
60
- }
61
- const id = this.#firstUnusedId++;
62
- const concreteArgsWithStrings = args.map((arg) => {
63
- if (arg.dataType === UnknownData) return arg;
64
- const converted = convertToCommonType(ctx, [arg], [unptr(arg.dataType)])?.[0];
65
- invariant(converted, `Internal error. Expected type ${arg.dataType} to be convertible to ${unptr(arg.dataType)}`);
66
- return converted;
67
- }).map(concretizeSnippet);
68
- const concreteArgs = concreteArgsWithStrings.filter((arg) => arg.dataType !== UnknownData);
69
- const logFn = createLoggingFunction(id, concreteArgs.map((e) => e.dataType), this.#dataBuffer, this.#indexBuffer, this.#options);
70
- const functionSnippet = snip(stitch`${ctx.resolve(logFn).value}(${concreteArgs})`, Void, "runtime");
71
- this.#logIdToMeta.set(id, {
72
- op,
73
- argTypes: concreteArgsWithStrings.map((e) => e?.dataType === UnknownData ? e?.value : e?.dataType)
74
- });
75
- return functionSnippet;
76
- }
77
- get logResources() {
78
- return this.#firstUnusedId === 1 ? void 0 : {
79
- dataBuffer: this.#dataBuffer,
80
- indexBuffer: this.#indexBuffer,
81
- options: this.#options,
82
- logIdToMeta: this.#logIdToMeta
83
- };
84
- }
18
+ logCountLimit: 64,
19
+ logSizeLimit: 252,
20
+ messagePrefix: ' GPU ',
85
21
  };
86
-
87
- //#endregion
88
- export { LogGeneratorImpl, LogGeneratorNullImpl };
22
+ const fallbackSnippet = snip('/* console.log() */', Void, /* origin */ 'runtime');
23
+ export class LogGeneratorNullImpl {
24
+ get logResources() {
25
+ return undefined;
26
+ }
27
+ generateLog() {
28
+ logger.warn('fallback', "'console.log' is only supported when resolving pipelines.");
29
+ return fallbackSnippet;
30
+ }
31
+ }
32
+ export class LogGeneratorImpl {
33
+ #options;
34
+ #logIdToMeta;
35
+ #firstUnusedId = 1;
36
+ #indexBuffer;
37
+ #dataBuffer;
38
+ constructor(root) {
39
+ this.#options = { ...defaultOptions, ...root[$internal].logOptions };
40
+ this.#logIdToMeta = new Map();
41
+ const SerializedLogData = struct({
42
+ id: u32,
43
+ serializedData: arrayOf(u32, Math.ceil(this.#options.logSizeLimit / 4)),
44
+ }).$name('SerializedLogData');
45
+ this.#dataBuffer = root
46
+ .createMutable(arrayOf(SerializedLogData, this.#options.logCountLimit))
47
+ .$name('dataBuffer');
48
+ this.#indexBuffer = root.createMutable(atomic(u32)).$name('indexBuffer');
49
+ }
50
+ /**
51
+ * Generates all necessary resources for serializing arguments for logging purposes.
52
+ *
53
+ * @param ctx Resolution context.
54
+ * @param args Argument snippets. Snippets of UnknownType will be treated as string literals.
55
+ * @returns A snippet containing the call to the logging function.
56
+ */
57
+ generateLog(ctx, op, args) {
58
+ if (shaderStageSlot.$ === 'vertex') {
59
+ logger.warn('suspicious', `'console' operations are not supported in vertex shaders.`);
60
+ return fallbackSnippet;
61
+ }
62
+ const id = this.#firstUnusedId++;
63
+ const concreteArgsWithStrings = args
64
+ .map((arg) => {
65
+ if (arg.dataType === UnknownData) {
66
+ return arg;
67
+ }
68
+ const converted = convertToCommonType(ctx, [arg], [unptr(arg.dataType)])?.[0];
69
+ invariant(converted, `Internal error. Expected type ${arg.dataType} to be convertible to ${unptr(arg.dataType)}`);
70
+ return converted;
71
+ })
72
+ .map(concretizeSnippet);
73
+ const concreteArgs = concreteArgsWithStrings.filter((arg) => arg.dataType !== UnknownData);
74
+ const logFn = createLoggingFunction(id, concreteArgs.map((e) => e.dataType), this.#dataBuffer, this.#indexBuffer, this.#options);
75
+ const functionSnippet = snip(stitch `${ctx.resolve(logFn).value}(${concreteArgs})`, Void,
76
+ /* origin */ 'runtime');
77
+ this.#logIdToMeta.set(id, {
78
+ op,
79
+ argTypes: concreteArgsWithStrings.map((e) => e?.dataType === UnknownData ? e?.value : e?.dataType),
80
+ });
81
+ return functionSnippet;
82
+ }
83
+ get logResources() {
84
+ return this.#firstUnusedId === 1
85
+ ? undefined
86
+ : {
87
+ dataBuffer: this.#dataBuffer,
88
+ indexBuffer: this.#indexBuffer,
89
+ options: this.#options,
90
+ logIdToMeta: this.#logIdToMeta,
91
+ };
92
+ }
93
+ }
@@ -0,0 +1,21 @@
1
+ import type { TgpuMutable } from '../../core/buffer/bufferBinding.ts';
2
+ import { type TgpuFn } from '../../core/function/tgpuFn.ts';
3
+ import { type AnyWgslData, type Atomic, type U32, type Void, type WgslArray } from '../../data/wgslTypes.ts';
4
+ import type { LogGeneratorOptions, SerializedLogCallData } from './types.ts';
5
+ type SerializerMap = {
6
+ [K in AnyWgslData['type']]?: TgpuFn<(args_0: Extract<AnyWgslData, {
7
+ type: K;
8
+ }>) => Void>;
9
+ };
10
+ export declare const serializerMap: SerializerMap;
11
+ /**
12
+ * Creates a TGPU function that serializes data to the log buffer.
13
+ *
14
+ * @param id - Identifier for this logging function instance
15
+ * @param dataTypes - Array of WGSL data types that will be logged by this function
16
+ * @param dataBuffer - Mutable buffer array to store serialized log call data
17
+ * @param indexBuffer - Atomic counter buffer to track the next available log data slot
18
+ * @param logOptions - Configuration options
19
+ */
20
+ export declare function createLoggingFunction(id: number, dataTypes: AnyWgslData[], dataBuffer: TgpuMutable<WgslArray<SerializedLogCallData>>, indexBuffer: TgpuMutable<Atomic<U32>>, logOptions: Required<LogGeneratorOptions>): TgpuFn;
21
+ export {};