typegpu 0.11.8 → 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 +37 -38
  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 -0
  42. package/core/function/fnCore.js +148 -92
  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 +18 -20
  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 +90 -93
  85. package/core/resolve/externals.d.ts +25 -7
  86. package/core/resolve/externals.js +79 -62
  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 -55
  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 -454
  101. package/core/root/rootTypes.d.ts +461 -627
  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 -214
  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 -192
  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 -120
  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 +428 -398
  239. package/package.json +9 -3
  240. package/resolutionCtx.d.ts +162 -22
  241. package/resolutionCtx.js +911 -624
  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 -100
  320. package/tgsl/accessStructProp.d.ts +5 -0
  321. package/tgsl/accessStructProp.js +18 -0
  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 +272 -193
  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 -747
  350. package/types.d.ts +287 -221
  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,68 +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 { mergeExternals, 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
- const dependencies = {};
23
- mergeExternals(dependencies, externals ?? {});
24
- return resolve({
25
- [$internal]: true,
26
- [$resolve](ctx) {
27
- return snip(replaceExternalsInWgsl(ctx, dependencies, template ?? ""), Void, "runtime");
28
- },
29
- toString: () => "<root>"
30
- }, {
31
- namespace: typeof names === "string" ? namespace({ names }) : names,
32
- enableExtensions,
33
- shaderGenerator,
34
- config,
35
- root: tryFindRoot(Object.values(externals))
36
- });
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
+ });
37
49
  }
38
50
  function resolveFromArray(items, options) {
39
- const { unstable_shaderGenerator: shaderGenerator, names = "strict", config, enableExtensions } = options ?? {};
40
- return resolve({
41
- [$internal]: true,
42
- [$resolve](ctx) {
43
- for (const item of items) if (isBindGroupLayout(item)) for (const binding of Object.values(item[$internal].bound)) ctx.resolve(binding);
44
- else ctx.resolve(item);
45
- return snip("", Void, "runtime");
46
- },
47
- toString: () => "<root>"
48
- }, {
49
- namespace: typeof names === "string" ? namespace({ names }) : names,
50
- enableExtensions,
51
- shaderGenerator,
52
- config,
53
- root: tryFindRoot(items)
54
- });
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
+ });
55
79
  }
56
80
  /**
57
- * Attempts to locate a pipeline in a list of items and returns the root.
58
- * Does not check recursively.
59
- * Throws an error if multiple pipelines are found.
60
- */
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
+ */
61
85
  function tryFindRoot(items) {
62
- const pipelines = items.filter(isPipeline);
63
- if (pipelines.length > 1) throw new Error(`Found ${pipelines.length} pipelines but can only resolve one at a time.`);
64
- 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;
65
119
  }
66
-
67
- //#endregion
68
- 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;