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,66 +1,119 @@
1
- import { $internal, $resolve } from "../../shared/symbols.js";
2
- import { Void } from "../../data/wgslTypes.js";
3
1
  import { snip } from "../../data/snippet.js";
4
- import { replaceExternalsInWgsl } from "./externals.js";
2
+ import { Void } from "../../data/wgslTypes.js";
3
+ import { getName } from "../../internal.js";
4
+ import { resolve as resolveImpl } from "../../resolutionCtx.js";
5
+ import { $internal, $resolve, $soul } from "../../shared/symbols.js";
5
6
  import { isBindGroupLayout } from "../../tgpuBindGroupLayout.js";
6
- import { resolve } from "../../resolutionCtx.js";
7
+ import { logger } from "../../tgpuLogger.js";
8
+ import { isBuffer } from "../../types.js";
9
+ import { isBufferBinding } from "../buffer/bufferBinding.js";
7
10
  import { isPipeline } from "../pipeline/typeGuards.js";
11
+ import { isComparisonSampler, isSampler } from "../sampler/sampler.js";
12
+ import { isTexture, isTextureView } from "../texture/texture.js";
13
+ import { replaceExternalsInWgsl } from "./externals.js";
8
14
  import { namespace } from "./namespace.js";
9
-
10
- //#region src/core/resolve/tgpuResolve.ts
11
- function resolveWithContext(arg0, options) {
12
- if (Array.isArray(arg0)) return resolveFromArray(arg0, options);
13
- return resolveFromTemplate(arg0);
15
+ export function resolveWithContext(arg0, options) {
16
+ if (Array.isArray(arg0)) {
17
+ return resolveFromArray(arg0, options);
18
+ }
19
+ return resolveFromTemplate(arg0);
14
20
  }
15
- function resolve$1(arg, options) {
16
- if (Array.isArray(arg)) return resolveWithContext(arg, options).code;
17
- return resolveWithContext(arg).code;
21
+ export function resolve(arg, options) {
22
+ if (Array.isArray(arg)) {
23
+ return resolveWithContext(arg, options).code;
24
+ }
25
+ return resolveWithContext(arg).code;
18
26
  }
19
27
  function resolveFromTemplate(options) {
20
- const { template, externals, unstable_shaderGenerator: shaderGenerator, names = "strict", config, enableExtensions } = options;
21
- if (!template) console.warn("Calling resolve with an empty template is deprecated and will soon return an empty string. Consider using the 'tgpu.resolve(resolvableArray, options)' API instead.");
22
- return resolve({
23
- [$internal]: true,
24
- [$resolve](ctx) {
25
- return snip(replaceExternalsInWgsl(ctx, externals, template ?? ""), Void, "runtime");
26
- },
27
- toString: () => "<root>"
28
- }, {
29
- namespace: typeof names === "string" ? namespace({ names }) : names,
30
- enableExtensions,
31
- shaderGenerator,
32
- config,
33
- root: tryFindRoot(Object.values(externals))
34
- });
28
+ const { template, externals, unstable_shaderGenerator: shaderGenerator, names = 'strict', unstable_minify, config, enableExtensions, } = options;
29
+ if (!template) {
30
+ logger.warn('deprecated', "Calling resolve with an empty template is deprecated and will soon return an empty string. Consider using the 'tgpu.resolve(resolvableArray, options)' API instead.");
31
+ }
32
+ const resolutionObj = {
33
+ [$internal]: true,
34
+ [$resolve](ctx) {
35
+ return snip(replaceExternalsInWgsl(ctx, externals, template ?? ''), Void,
36
+ /* origin */ 'runtime');
37
+ },
38
+ toString: () => '<root>',
39
+ };
40
+ const maybeRoot = tryFindRoot(Object.values(externals));
41
+ return resolveImpl(resolutionObj, {
42
+ namespace: typeof names === 'string' ? namespace({ names }) : names,
43
+ minify: unstable_minify ?? maybeRoot?.minify ?? false,
44
+ enableExtensions,
45
+ shaderGenerator,
46
+ config,
47
+ root: maybeRoot,
48
+ });
35
49
  }
36
50
  function resolveFromArray(items, options) {
37
- const { unstable_shaderGenerator: shaderGenerator, names = "strict", config, enableExtensions } = options ?? {};
38
- return resolve({
39
- [$internal]: true,
40
- [$resolve](ctx) {
41
- for (const item of items) if (isBindGroupLayout(item)) for (const binding of Object.values(item[$internal].bound)) ctx.resolve(binding);
42
- else ctx.resolve(item);
43
- return snip("", Void, "runtime");
44
- },
45
- toString: () => "<root>"
46
- }, {
47
- namespace: typeof names === "string" ? namespace({ names }) : names,
48
- enableExtensions,
49
- shaderGenerator,
50
- config,
51
- root: tryFindRoot(items)
52
- });
51
+ const { unstable_shaderGenerator: shaderGenerator, names = 'strict', unstable_minify, config, enableExtensions, } = options ?? {};
52
+ const resolutionObj = {
53
+ [$internal]: true,
54
+ [$resolve](ctx) {
55
+ for (const item of items) {
56
+ // Support for: tgpu.resolve([layout])
57
+ if (isBindGroupLayout(item)) {
58
+ for (const binding of Object.values(item[$internal])) {
59
+ ctx.resolve(binding);
60
+ }
61
+ }
62
+ else {
63
+ ctx.resolve(item);
64
+ }
65
+ }
66
+ return snip('', Void, 'runtime');
67
+ },
68
+ toString: () => '<root>',
69
+ };
70
+ const maybeRoot = tryFindRoot(items);
71
+ return resolveImpl(resolutionObj, {
72
+ namespace: typeof names === 'string' ? namespace({ names }) : names,
73
+ minify: unstable_minify ?? maybeRoot?.minify ?? false,
74
+ enableExtensions,
75
+ shaderGenerator,
76
+ config,
77
+ root: maybeRoot,
78
+ });
53
79
  }
54
80
  /**
55
- * Attempts to locate a pipeline in a list of items and returns the root.
56
- * Does not check recursively.
57
- * Throws an error if multiple pipelines are found.
58
- */
81
+ * Attempts to locate a root in a list of items that may hold it.
82
+ * Does not check recursively.
83
+ * Throws an error if multiple roots are found.
84
+ */
59
85
  function tryFindRoot(items) {
60
- const pipelines = items.filter(isPipeline);
61
- if (pipelines.length > 1) throw new Error(`Found ${pipelines.length} pipelines but can only resolve one at a time.`);
62
- return pipelines[0]?.[$internal].root;
86
+ const buckets = new Map();
87
+ for (const item of items) {
88
+ const root = extractRoot(item);
89
+ if (root) {
90
+ const bucket = buckets.get(root) ?? new Set();
91
+ buckets.set(root, bucket);
92
+ bucket.add(item);
93
+ }
94
+ }
95
+ if (buckets.size > 1) {
96
+ const bucketsString = [...buckets.values()]
97
+ .map((bucket, i) => `root ${i + 1}: ${[...bucket].map((item) => getName(item) ?? '<unnamed>').join(', ')}`)
98
+ .join('; ');
99
+ throw new Error(`Found resources originating from different roots in a single resolve (${bucketsString}).`);
100
+ }
101
+ return [...buckets.keys()][0];
102
+ }
103
+ function extractRoot(item) {
104
+ if (isPipeline(item) ||
105
+ isBuffer(item) ||
106
+ isTexture(item) ||
107
+ isSampler(item) ||
108
+ isComparisonSampler(item)) {
109
+ return item[$internal].root;
110
+ }
111
+ if (isBufferBinding(item)) {
112
+ return extractRoot(item.buffer);
113
+ }
114
+ if (isTextureView(item)) {
115
+ // laid out texture view should never appear here, but still passes this type guard
116
+ return extractRoot(item?.[$soul]?.texture);
117
+ }
118
+ return undefined;
63
119
  }
64
-
65
- //#endregion
66
- export { resolve$1 as resolve, resolveWithContext };
@@ -0,0 +1,10 @@
1
+ import type { BaseData } from '../../data/wgslTypes.ts';
2
+ import type { Infer } from '../../shared/repr.ts';
3
+ import { type TgpuAccessor, type TgpuMutableAccessor, type TgpuSlot } from '../slot/slotTypes.ts';
4
+ import type { Configurable } from './rootTypes.ts';
5
+ export declare class ConfigurableImpl implements Configurable {
6
+ readonly bindings: [TgpuSlot<unknown>, unknown][];
7
+ constructor(bindings: [TgpuSlot<unknown>, unknown][]);
8
+ with<T extends BaseData>(slot: TgpuSlot<T> | TgpuAccessor<T> | TgpuMutableAccessor<T>, value: TgpuAccessor.In<T> | TgpuMutableAccessor.In<T> | Infer<T>): Configurable;
9
+ pipe(transform: (cfg: Configurable) => Configurable): Configurable;
10
+ }
@@ -1,19 +1,17 @@
1
- import { isAccessor, isMutableAccessor } from "../slot/slotTypes.js";
2
-
3
- //#region src/core/root/configurableImpl.ts
4
- var ConfigurableImpl = class ConfigurableImpl {
5
- bindings;
6
- constructor(bindings) {
7
- this.bindings = bindings;
8
- }
9
- with(slot, value) {
10
- return new ConfigurableImpl([...this.bindings, [isAccessor(slot) || isMutableAccessor(slot) ? slot.slot : slot, value]]);
11
- }
12
- pipe(transform) {
13
- const newCfg = transform(this);
14
- return new ConfigurableImpl([...this.bindings, ...newCfg.bindings]);
15
- }
16
- };
17
-
18
- //#endregion
19
- export { ConfigurableImpl };
1
+ import { isAccessor, isMutableAccessor, } from "../slot/slotTypes.js";
2
+ export class ConfigurableImpl {
3
+ bindings;
4
+ constructor(bindings) {
5
+ this.bindings = bindings;
6
+ }
7
+ with(slot, value) {
8
+ return new ConfigurableImpl([
9
+ ...this.bindings,
10
+ [isAccessor(slot) || isMutableAccessor(slot) ? slot.slot : slot, value],
11
+ ]);
12
+ }
13
+ pipe(transform) {
14
+ const newCfg = transform(this);
15
+ return new ConfigurableImpl([...this.bindings, ...newCfg.bindings]);
16
+ }
17
+ }
@@ -1,44 +1,84 @@
1
- import "../querySet/querySet.js";
2
- import "../buffer/bufferShorthand.js";
3
- import { LogGeneratorOptions } from "../../tgsl/consoleLog/types.js";
4
- import "../pipeline/computePipeline.js";
5
- import "../../tgpuBindGroupLayout.js";
6
- import { ShaderGenerator } from "../../tgsl/shaderGenerator.js";
7
- import { TgpuRoot } from "./rootTypes.js";
8
- import "../../data/wgslTypes.js";
9
-
10
- //#region src/core/root/init.d.ts
11
-
1
+ import { type TgpuQuerySet } from '../querySet/querySet.ts';
2
+ import type { v3u, Vec3u } from '../../data/wgslTypes.ts';
3
+ import { $getNameForward, $internal, $soul } from '../../shared/symbols.ts';
4
+ import type { TgpuBindGroup } from '../../tgpuBindGroupLayout.ts';
5
+ import type { LogGeneratorOptions } from '../../tgsl/consoleLog/types.ts';
6
+ import type { WgslGeneratorClass } from '../../tgsl/shaderGenerator.ts';
7
+ import { type TgpuUniform } from '../buffer/bufferBinding.ts';
8
+ import { type TgpuComputePipeline } from '../pipeline/computePipeline.ts';
9
+ import type { ExperimentalTgpuRoot, TgpuGuardedComputePipeline, TgpuGuardedComputePipelineSoul, TgpuRootSoul, TgpuRoot } from './rootTypes.ts';
10
+ import type { RestoreContext } from '../../serial/types.ts';
11
+ export declare class TgpuGuardedComputePipelineImpl<TArgs extends number[]> implements TgpuGuardedComputePipeline<TArgs> {
12
+ #private;
13
+ readonly resourceType = "guarded-compute-pipeline";
14
+ readonly [$soul]: TgpuGuardedComputePipelineSoul;
15
+ constructor(root: ExperimentalTgpuRoot, pipeline: TgpuComputePipeline, sizeUniform: TgpuUniform<Vec3u>, workgroupSize: v3u);
16
+ with(bindGroup: TgpuBindGroup): TgpuGuardedComputePipeline<TArgs>;
17
+ withPerformanceCallback(callback: (start: bigint, end: bigint) => void | Promise<void>): TgpuGuardedComputePipeline<TArgs>;
18
+ withTimestampWrites(options: {
19
+ querySet: TgpuQuerySet<'timestamp'> | GPUQuerySet;
20
+ beginningOfPassWriteIndex?: number;
21
+ endOfPassWriteIndex?: number;
22
+ }): TgpuGuardedComputePipeline<TArgs>;
23
+ dispatchThreads(...threads: TArgs): void;
24
+ initAsync(): Promise<void>;
25
+ initSync(): void;
26
+ get pipeline(): TgpuComputePipeline;
27
+ get sizeUniform(): TgpuUniform<Vec3u>;
28
+ [$internal]: boolean;
29
+ get [$getNameForward](): TgpuComputePipeline;
30
+ $name(label: string): this;
31
+ }
32
+ export declare function INTERNAL_restoreRoot(soul: TgpuRootSoul, ctx: RestoreContext): TgpuRoot;
33
+ export declare function INTERNAL_restoreGuardedComputePipeline(soul: TgpuGuardedComputePipelineSoul, ctx: RestoreContext): TgpuGuardedComputePipeline;
12
34
  /**
13
35
  * Options passed into {@link init}.
14
36
  */
15
- type InitOptions = {
16
- adapter?: GPURequestAdapterOptions | undefined;
17
- device?: (GPUDeviceDescriptor & {
18
- optionalFeatures?: Iterable<GPUFeatureName>;
19
- }) | undefined;
20
- /** @default 'random' */
21
- unstable_names?: 'random' | 'strict' | undefined;
22
- /**
23
- * A custom shader code generator, used when resolving TypeGPU functions.
24
- * If not provided, the default WGSL generator will be used.
25
- */
26
- shaderGenerator?: ShaderGenerator | undefined;
27
- unstable_logOptions?: LogGeneratorOptions;
37
+ export type InitOptions = {
38
+ adapter?: GPURequestAdapterOptions | undefined;
39
+ device?: (GPUDeviceDescriptor & {
40
+ optionalFeatures?: Iterable<GPUFeatureName>;
41
+ }) | undefined;
42
+ /** @default 'strict' */
43
+ unstable_names?: 'random' | 'strict' | undefined;
44
+ /**
45
+ * If set to true, rooted resolves will be stripped of all excessive spaces.
46
+ * Rooted resolves include pipelines and all their transitive dependencies,
47
+ * but not, for example, `tgpu.resolve([MyStruct])`,
48
+ * as there may be multiple roots with different settings in one program.
49
+ *
50
+ * @default false
51
+ */
52
+ unstable_minify?: boolean;
53
+ /**
54
+ * A custom shader code generator, used when resolving TypeGPU functions.
55
+ * If not provided, the default WGSL generator will be used.
56
+ */
57
+ unstable_shaderGeneratorClass?: WgslGeneratorClass | undefined;
58
+ unstable_logOptions?: LogGeneratorOptions;
28
59
  };
29
60
  /**
30
61
  * Options passed into {@link initFromDevice}.
31
62
  */
32
- type InitFromDeviceOptions = {
33
- device: GPUDevice;
34
- /** @default 'random' */
35
- unstable_names?: 'random' | 'strict' | undefined;
36
- /**
37
- * A custom shader code generator, used when resolving TypeGPU functions.
38
- * If not provided, the default WGSL generator will be used.
39
- */
40
- shaderGenerator?: ShaderGenerator | undefined;
41
- unstable_logOptions?: LogGeneratorOptions;
63
+ export type InitFromDeviceOptions = {
64
+ device: GPUDevice;
65
+ /** @default 'strict' */
66
+ unstable_names?: 'random' | 'strict' | undefined;
67
+ /**
68
+ * If set to true, rooted resolves will be stripped of all excessive spaces.
69
+ * Rooted resolves include pipelines and all their transitive dependencies,
70
+ * but not, for example, `tgpu.resolve([MyStruct])`,
71
+ * as there may be multiple roots with different settings in one program.
72
+ *
73
+ * @default false
74
+ */
75
+ unstable_minify?: boolean;
76
+ /**
77
+ * A custom shader code generator, used when resolving TypeGPU functions.
78
+ * If not provided, the default WGSL generator will be used.
79
+ */
80
+ unstable_shaderGeneratorClass?: WgslGeneratorClass | undefined;
81
+ unstable_logOptions?: LogGeneratorOptions;
42
82
  };
43
83
  /**
44
84
  * Requests a new GPU device and creates a root around it.
@@ -58,7 +98,7 @@ type InitFromDeviceOptions = {
58
98
  * const root = await tgpu.init({ adapter: adapterOptions, device: deviceDescriptor });
59
99
  * ```
60
100
  */
61
- declare function init(options?: InitOptions): Promise<TgpuRoot>;
101
+ export declare function init(options?: InitOptions): Promise<TgpuRoot>;
62
102
  /**
63
103
  * Creates a root from the given device, instead of requesting it like @see init.
64
104
  *
@@ -68,6 +108,4 @@ declare function init(options?: InitOptions): Promise<TgpuRoot>;
68
108
  * const root = tgpu.initFromDevice({ device });
69
109
  * ```
70
110
  */
71
- declare function initFromDevice(options: InitFromDeviceOptions): TgpuRoot;
72
- //#endregion
73
- export { InitFromDeviceOptions, InitOptions, init, initFromDevice };
111
+ export declare function initFromDevice(options: InitFromDeviceOptions): TgpuRoot;