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,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 {};