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,97 +1,144 @@
1
- import { $getNameForward, $gpuValueOf, $internal, $ownSnippet, $resolve } from "../../shared/symbols.js";
2
- import { getName, hasTinyestMetadata, setName } from "../../shared/meta.js";
3
1
  import { isData } from "../../data/dataTypes.js";
4
- import { isSnippet, snip } from "../../data/snippet.js";
5
- import { NormalState, getOwnSnippet } from "../../types.js";
6
- import { getResolutionCtx, inCodegenMode } from "../../execMode.js";
7
2
  import { schemaCallWrapper } from "../../data/schemaCallWrapper.js";
8
- import { getGpuValueRecursively, valueProxyHandler } from "../valueProxyUtils.js";
3
+ import { isSnippet, snip } from "../../data/snippet.js";
4
+ import { getResolutionCtx } from "../../execMode.js";
5
+ import { makeDereferenceable } from "../../tgsl/makeDereferenceable.js";
6
+ import { makeResolvable } from "../../tgsl/makeResolvable.js";
7
+ import { getName, hasTinyestMetadata, setName } from "../../shared/meta.js";
8
+ import { $getNameForward, $gpuCallable, $gpuValueOf, $internal, $resolve, $soul, } from "../../shared/symbols.js";
9
+ import { getOwnSnippet, isGPUCallable, NormalState } from "../../types.js";
9
10
  import { isTgpuFn } from "../function/tgpuFn.js";
11
+ import { getGpuValueRecursively } from "../valueProxyUtils.js";
10
12
  import { slot } from "./slot.js";
11
-
12
- //#region src/core/slot/accessor.ts
13
- function accessor(schemaOrConstructor, defaultValue) {
14
- return new TgpuAccessorImpl(schemaOrConstructor, defaultValue);
13
+ export function accessor(schemaOrConstructor, defaultValue) {
14
+ return new TgpuAccessorImpl(schemaOrConstructor, defaultValue);
15
+ }
16
+ export function mutableAccessor(schemaOrConstructor, defaultValue) {
17
+ return new TgpuMutableAccessorImpl(schemaOrConstructor, defaultValue);
18
+ }
19
+ // --------------
20
+ // Implementation
21
+ // --------------
22
+ /**
23
+ * @returns A snippet representing the accessor.
24
+ */
25
+ function createAccessorSnippet(accessor) {
26
+ // oxlint-disable-next-line typescript/no-non-null-assertion -- it's there
27
+ const ctx = getResolutionCtx();
28
+ let value = getGpuValueRecursively(ctx.unwrap(accessor.slot));
29
+ while (typeof value === 'function' &&
30
+ !isTgpuFn(value) &&
31
+ !isGPUCallable(value) &&
32
+ !hasTinyestMetadata(value)) {
33
+ // Not a GPU function, so has to be a resource accessor (ran in codegen mode) or comptime
34
+ value = value();
35
+ if (isSnippet(value)) {
36
+ value = value.value;
37
+ }
38
+ }
39
+ const ownSnippet = getOwnSnippet(value);
40
+ if (ownSnippet) {
41
+ return ownSnippet;
42
+ }
43
+ if (isGPUCallable(value)) {
44
+ return value[$gpuCallable].call(ctx, []);
45
+ }
46
+ if (isTgpuFn(value) || hasTinyestMetadata(value)) {
47
+ const fn = ctx.resolve(value);
48
+ return ctx.withResetIndentLevel(() => snip(`${fn.value}()`, accessor.schema, /* origin */ 'runtime', fn.possibleSideEffects));
49
+ }
50
+ ctx.pushMode(new NormalState());
51
+ try {
52
+ // Doing a deep copy each time so that we don't have to deal with refs
53
+ const cloned = schemaCallWrapper(accessor.schema, value);
54
+ return snip(cloned, accessor.schema, 'constant', /* possibleSideEffects */ false);
55
+ }
56
+ finally {
57
+ ctx.popMode('normal');
58
+ }
59
+ }
60
+ class AccessorBase {
61
+ [$getNameForward];
62
+ [$soul];
63
+ slot;
64
+ static {
65
+ AccessorBase.prototype[$internal] = true;
66
+ makeResolvable(AccessorBase.prototype, {
67
+ asString() {
68
+ return `${this.resourceType}:${getName(this) ?? '<unnamed>'}`;
69
+ },
70
+ resolve(ctx) {
71
+ return ctx.resolveSnippet(createAccessorSnippet(this));
72
+ },
73
+ });
74
+ }
75
+ constructor(type, schemaOrConstructor, defaultValue = undefined) {
76
+ this[$soul] = {
77
+ type,
78
+ schema: isData(schemaOrConstructor)
79
+ ? schemaOrConstructor
80
+ : schemaOrConstructor(0),
81
+ defaultValue,
82
+ label: undefined,
83
+ };
84
+ // NOTE: in certain setups, unplugin can run on package typegpu, so we have to avoid auto-naming triggering here
85
+ this.slot = (() => slot(defaultValue))();
86
+ this[$getNameForward] = this.slot;
87
+ }
88
+ get schema() {
89
+ return this[$soul].schema;
90
+ }
91
+ get defaultValue() {
92
+ return this[$soul].defaultValue;
93
+ }
94
+ $name(label) {
95
+ setName(this, label);
96
+ // Passing the name down to the default callback, if it has no name yet
97
+ if (this.defaultValue &&
98
+ typeof this.defaultValue === 'function' &&
99
+ !getName(this.defaultValue)) {
100
+ setName(this.defaultValue, label);
101
+ }
102
+ return this;
103
+ }
104
+ }
105
+ export class TgpuAccessorImpl extends AccessorBase {
106
+ static {
107
+ TgpuAccessorImpl.prototype.resourceType = 'accessor';
108
+ makeDereferenceable(TgpuAccessorImpl.prototype, {
109
+ codegenMode: {
110
+ get() {
111
+ return createAccessorSnippet(this);
112
+ },
113
+ },
114
+ normalMode: {
115
+ get() {
116
+ throw new Error('`tgpu.accessor` relies on GPU resources and cannot be accessed outside of a compute dispatch or draw call. Use `tgpu.slot` for non-WGSL values instead.');
117
+ },
118
+ },
119
+ });
120
+ }
121
+ constructor(schemaOrConstructor, defaultValue = undefined) {
122
+ super('accessor', schemaOrConstructor, defaultValue);
123
+ }
15
124
  }
16
- function mutableAccessor(schemaOrConstructor, defaultValue) {
17
- return new TgpuMutableAccessorImpl(schemaOrConstructor, defaultValue);
125
+ export class TgpuMutableAccessorImpl extends AccessorBase {
126
+ static {
127
+ TgpuMutableAccessorImpl.prototype.resourceType = 'mutable-accessor';
128
+ makeDereferenceable(TgpuMutableAccessorImpl.prototype, {
129
+ codegenMode: {
130
+ get() {
131
+ return createAccessorSnippet(this);
132
+ },
133
+ },
134
+ normalMode: {
135
+ get() {
136
+ throw new Error('`tgpu.mutableAccessor` relies on GPU resources and cannot be accessed outside of a compute dispatch or draw call. Use `tgpu.slot` for non-WGSL values instead.');
137
+ },
138
+ },
139
+ });
140
+ }
141
+ constructor(schemaOrConstructor, defaultValue = undefined) {
142
+ super('mutable-accessor', schemaOrConstructor, defaultValue);
143
+ }
18
144
  }
19
- var AccessorBase = class {
20
- [$internal] = true;
21
- [$getNameForward];
22
- slot;
23
- schema;
24
- defaultValue;
25
- constructor(schemaOrConstructor, defaultValue = void 0) {
26
- this.schema = isData(schemaOrConstructor) ? schemaOrConstructor : schemaOrConstructor(0);
27
- this.defaultValue = defaultValue;
28
- this.slot = (() => slot(defaultValue))();
29
- this[$getNameForward] = this.slot;
30
- }
31
- get [$gpuValueOf]() {
32
- return new Proxy({
33
- [$internal]: true,
34
- [$ownSnippet]: this.#createSnippet(),
35
- [$resolve]: (ctx) => ctx.resolve(this),
36
- toString: () => `${this.resourceType}:${getName(this) ?? "<unnamed>"}.$`
37
- }, valueProxyHandler);
38
- }
39
- /**
40
- * @returns A snippet representing the accessor.
41
- */
42
- #createSnippet() {
43
- const ctx = getResolutionCtx();
44
- let value = getGpuValueRecursively(ctx.unwrap(this.slot));
45
- while (typeof value === "function" && !isTgpuFn(value) && !hasTinyestMetadata(value)) {
46
- value = value();
47
- if (isSnippet(value)) value = value.value;
48
- }
49
- const ownSnippet = getOwnSnippet(value);
50
- if (ownSnippet) return ownSnippet;
51
- if (isTgpuFn(value) || hasTinyestMetadata(value)) return ctx.withResetIndentLevel(() => snip(`${ctx.resolve(value).value}()`, this.schema, "runtime"));
52
- ctx.pushMode(new NormalState());
53
- try {
54
- return snip(schemaCallWrapper(this.schema, value), this.schema, "constant", false);
55
- } finally {
56
- ctx.popMode("normal");
57
- }
58
- }
59
- $name(label) {
60
- setName(this, label);
61
- if (this.defaultValue && typeof this.defaultValue === "function" && !getName(this.defaultValue)) setName(this.defaultValue, label);
62
- return this;
63
- }
64
- toString() {
65
- return `${this.resourceType}:${getName(this) ?? "<unnamed>"}`;
66
- }
67
- get value() {
68
- return this.$;
69
- }
70
- [$resolve](ctx) {
71
- const snippet = this.#createSnippet();
72
- return snip(ctx.resolve(snippet.value, snippet.dataType).value, snippet.dataType, snippet.origin);
73
- }
74
- };
75
- var TgpuAccessorImpl = class extends AccessorBase {
76
- resourceType = "accessor";
77
- constructor(schemaOrConstructor, defaultValue = void 0) {
78
- super(schemaOrConstructor, defaultValue);
79
- }
80
- get $() {
81
- if (inCodegenMode()) return this[$gpuValueOf];
82
- throw new Error("`tgpu.accessor` relies on GPU resources and cannot be accessed outside of a compute dispatch or draw call");
83
- }
84
- };
85
- var TgpuMutableAccessorImpl = class extends AccessorBase {
86
- resourceType = "mutable-accessor";
87
- constructor(schemaOrConstructor, defaultValue = void 0) {
88
- super(schemaOrConstructor, defaultValue);
89
- }
90
- get $() {
91
- if (inCodegenMode()) return this[$gpuValueOf];
92
- throw new Error("`tgpu.mutableAccessor` relies on GPU resources and cannot be accessed outside of a compute dispatch or draw call");
93
- }
94
- };
95
-
96
- //#endregion
97
- export { accessor, mutableAccessor };
@@ -0,0 +1,2 @@
1
+ import type { ShaderStage } from '../../types.ts';
2
+ export declare const shaderStageSlot: import("./slotTypes.ts").TgpuSlot<ShaderStage | null>;
@@ -1,7 +1,2 @@
1
1
  import { slot } from "./slot.js";
2
-
3
- //#region src/core/slot/internalSlots.ts
4
- const shaderStageSlot = slot(void 0);
5
-
6
- //#endregion
7
- export { shaderStageSlot };
2
+ export const shaderStageSlot = slot(null);
@@ -1,6 +1,2 @@
1
- import { TgpuLazy } from "./slotTypes.js";
2
-
3
- //#region src/core/slot/lazy.d.ts
4
- declare function lazy<T>(compute: () => T): TgpuLazy<T>;
5
- //#endregion
6
- export { lazy };
1
+ import { type TgpuLazy } from './slotTypes.ts';
2
+ export declare function lazy<T>(compute: () => T): TgpuLazy<T>;
package/core/slot/lazy.js CHANGED
@@ -1,42 +1,74 @@
1
- import { $gpuValueOf, $internal, $providing } from "../../shared/symbols.js";
2
- import { isAccessor, isMutableAccessor } from "./slotTypes.js";
3
1
  import { getResolutionCtx } from "../../execMode.js";
2
+ import { makeDereferenceable } from "../../tgsl/makeDereferenceable.js";
3
+ import { makeResolvable } from "../../tgsl/makeResolvable.js";
4
+ import { $gpuValueOf, $internal, $providing } from "../../shared/symbols.js";
4
5
  import { getGpuValueRecursively } from "../valueProxyUtils.js";
5
-
6
- //#region src/core/slot/lazy.ts
7
- function lazy(compute) {
8
- if (getResolutionCtx()) throw new Error("Cannot create tgpu.lazy objects during shader resolution.");
9
- return new TgpuLazyImpl(compute, void 0);
6
+ import { isAccessor, isMutableAccessor, } from "./slotTypes.js";
7
+ // ----------
8
+ // Public API
9
+ // ----------
10
+ export function lazy(compute) {
11
+ if (getResolutionCtx()) {
12
+ throw new Error('Cannot create tgpu.lazy objects during shader resolution.');
13
+ }
14
+ return new TgpuLazyImpl(compute, undefined);
15
+ }
16
+ // --------------
17
+ // Implementation
18
+ // --------------
19
+ class TgpuLazyImpl {
20
+ [$internal];
21
+ [$providing];
22
+ static {
23
+ TgpuLazyImpl.prototype.resourceType = 'lazy';
24
+ makeDereferenceable(makeResolvable(TgpuLazyImpl.prototype, {
25
+ asString: () => 'lazy',
26
+ resolve(_ctx) {
27
+ throw new Error(`Unreachable, is never resolved directly`);
28
+ },
29
+ }), {
30
+ codegenMode: {
31
+ get() {
32
+ return this.#getValue();
33
+ },
34
+ },
35
+ normalMode: {
36
+ get() {
37
+ return this.#getValue();
38
+ },
39
+ },
40
+ });
41
+ }
42
+ constructor(compute, providing) {
43
+ this[$internal] = {
44
+ compute,
45
+ };
46
+ this[$providing] = providing;
47
+ }
48
+ get [$gpuValueOf]() {
49
+ const ctx = getResolutionCtx();
50
+ if (!ctx) {
51
+ throw new Error(`Cannot access tgpu.lazy's value outside of resolution.`);
52
+ }
53
+ return getGpuValueRecursively(ctx.unwrap(this));
54
+ }
55
+ get $() {
56
+ return this[$gpuValueOf];
57
+ }
58
+ #getValue() {
59
+ const ctx = getResolutionCtx();
60
+ if (!ctx) {
61
+ throw new Error(`Cannot access tgpu.lazy's value outside of resolution.`);
62
+ }
63
+ return getGpuValueRecursively(ctx.unwrap(this));
64
+ }
65
+ with(slot, value) {
66
+ return new TgpuLazyImpl(this[$internal].compute.bind(this), {
67
+ inner: this[$providing]?.inner ?? this,
68
+ pairs: [
69
+ ...(this[$providing]?.pairs ?? []),
70
+ [isAccessor(slot) || isMutableAccessor(slot) ? slot.slot : slot, value],
71
+ ],
72
+ });
73
+ }
10
74
  }
11
- var TgpuLazyImpl = class TgpuLazyImpl {
12
- [$internal];
13
- [$providing];
14
- constructor(compute, providing) {
15
- this[$internal] = { compute };
16
- this[$providing] = providing;
17
- }
18
- get [$gpuValueOf]() {
19
- const ctx = getResolutionCtx();
20
- if (!ctx) throw new Error(`Cannot access tgpu.lazy's value outside of resolution.`);
21
- return getGpuValueRecursively(ctx.unwrap(this));
22
- }
23
- get value() {
24
- return this[$gpuValueOf];
25
- }
26
- get $() {
27
- return this[$gpuValueOf];
28
- }
29
- toString() {
30
- return "lazy";
31
- }
32
- with(slot, value) {
33
- return new TgpuLazyImpl(this[$internal].compute.bind(this), {
34
- inner: this[$providing]?.inner ?? this,
35
- pairs: [...this[$providing]?.pairs ?? [], [isAccessor(slot) || isMutableAccessor(slot) ? slot.slot : slot, value]]
36
- });
37
- }
38
- };
39
- TgpuLazyImpl.prototype.resourceType = "lazy";
40
-
41
- //#endregion
42
- export { lazy };
@@ -1,6 +1,2 @@
1
- import { TgpuSlot } from "./slotTypes.js";
2
-
3
- //#region src/core/slot/slot.d.ts
4
- declare function slot<T>(defaultValue?: T): TgpuSlot<T>;
5
- //#endregion
6
- export { slot };
1
+ import type { TgpuSlot } from './slotTypes.ts';
2
+ export declare function slot<T>(defaultValue?: T): TgpuSlot<T>;
package/core/slot/slot.js CHANGED
@@ -1,41 +1,48 @@
1
- import { $gpuValueOf, $internal } from "../../shared/symbols.js";
2
- import { getName, setName } from "../../shared/meta.js";
3
1
  import { getResolutionCtx } from "../../execMode.js";
2
+ import { getName, setName } from "../../shared/meta.js";
3
+ import { $gpuValueOf, $internal, $soul } from "../../shared/symbols.js";
4
4
  import { getGpuValueRecursively } from "../valueProxyUtils.js";
5
-
6
- //#region src/core/slot/slot.ts
7
- function slot(defaultValue) {
8
- return new TgpuSlotImpl(defaultValue);
5
+ // ----------
6
+ // Public API
7
+ // ----------
8
+ export function slot(defaultValue) {
9
+ return new TgpuSlotImpl(defaultValue);
10
+ }
11
+ // --------------
12
+ // Implementation
13
+ // --------------
14
+ class TgpuSlotImpl {
15
+ [$internal] = true;
16
+ [$soul];
17
+ resourceType = 'slot';
18
+ constructor(defaultValue = undefined) {
19
+ this[$soul] = {
20
+ type: 'slot',
21
+ defaultValue,
22
+ label: undefined,
23
+ };
24
+ }
25
+ get defaultValue() {
26
+ return this[$soul].defaultValue;
27
+ }
28
+ $name(label) {
29
+ setName(this, label);
30
+ return this;
31
+ }
32
+ areEqual(a, b) {
33
+ return Object.is(a, b);
34
+ }
35
+ toString() {
36
+ return `slot:${getName(this) ?? '<unnamed>'}`;
37
+ }
38
+ get [$gpuValueOf]() {
39
+ const ctx = getResolutionCtx();
40
+ if (!ctx) {
41
+ throw new Error(`Cannot access tgpu.slot's value outside of resolution.`);
42
+ }
43
+ return getGpuValueRecursively(ctx.unwrap(this));
44
+ }
45
+ get $() {
46
+ return this[$gpuValueOf];
47
+ }
9
48
  }
10
- var TgpuSlotImpl = class {
11
- [$internal] = true;
12
- resourceType = "slot";
13
- defaultValue;
14
- constructor(defaultValue = void 0) {
15
- this.defaultValue = defaultValue;
16
- }
17
- $name(label) {
18
- setName(this, label);
19
- return this;
20
- }
21
- areEqual(a, b) {
22
- return Object.is(a, b);
23
- }
24
- toString() {
25
- return `slot:${getName(this) ?? "<unnamed>"}`;
26
- }
27
- get [$gpuValueOf]() {
28
- const ctx = getResolutionCtx();
29
- if (!ctx) throw new Error(`Cannot access tgpu.slot's value outside of resolution.`);
30
- return getGpuValueRecursively(ctx.unwrap(this));
31
- }
32
- get value() {
33
- return this[$gpuValueOf];
34
- }
35
- get $() {
36
- return this.value;
37
- }
38
- };
39
-
40
- //#endregion
41
- export { slot };
@@ -1,92 +1,90 @@
1
- import { TgpuNamable } from "../../shared/meta.js";
2
- import { $gpuValueOf, $internal, $providing } from "../../shared/symbols.js";
3
- import { TgpuBufferUsage } from "../buffer/bufferUsage.js";
4
- import { TgpuBufferShorthand } from "../buffer/bufferShorthand.js";
5
- import { TgpuVar, VariableScope } from "../variable/tgpuVariable.js";
6
- import { UnwrapRuntimeConstructor } from "../../tgpuBindGroupLayout.js";
7
- import { Withable } from "../root/rootTypes.js";
8
- import { BaseData } from "../../data/wgslTypes.js";
9
- import { WgslStorageTexture, WgslTexture } from "../../data/texture.js";
10
- import { TgpuTextureView } from "../texture/texture.js";
11
- import { GPUValueOf, Infer, InferGPU } from "../../shared/repr.js";
12
- import { TgpuConst } from "../constant/tgpuConstant.js";
13
-
14
- //#region src/core/slot/slotTypes.d.ts
15
- interface TgpuSlot<T> extends TgpuNamable {
16
- readonly [$internal]: true;
17
- readonly resourceType: 'slot';
18
- readonly defaultValue: T | undefined;
19
- /**
20
- * Used to determine if code generated using either value `a` or `b` in place
21
- * of the slot will be equivalent. Defaults to `Object.is`.
22
- */
23
- areEqual(a: T, b: T): boolean;
24
- readonly [$gpuValueOf]: GPUValueOf<T>;
25
- /**
26
- * @deprecated Use `.$` instead, works the same way.
27
- */
28
- readonly value: GPUValueOf<T>;
29
- readonly $: GPUValueOf<T>;
30
- toString(): string;
1
+ import type { WgslStorageTexture, WgslTexture } from '../../data/texture.ts';
2
+ import type { BaseData } from '../../data/wgslTypes.ts';
3
+ import type { TgpuNamable } from '../../shared/meta.ts';
4
+ import type { GPUValueOf, Infer, InferGPU } from '../../shared/repr.ts';
5
+ import type { TgpuSoul } from '../../shared/soul.ts';
6
+ import { $gpuValueOf, $internal, $providing, $soul } from '../../shared/symbols.ts';
7
+ import type { UnwrapRuntimeConstructor } from '../../tgpuBindGroupLayout.ts';
8
+ import type { TgpuBufferBinding } from '../buffer/bufferBinding.ts';
9
+ import type { TgpuConst } from '../constant/tgpuConstant.ts';
10
+ import type { Withable } from '../root/rootTypes.ts';
11
+ import type { TgpuTextureView } from '../texture/texture.ts';
12
+ import type { TgpuVar, VariableScope } from '../variable/tgpuVariable.ts';
13
+ export interface TgpuSlotSoul<T = unknown> extends TgpuSoul<'slot'> {
14
+ readonly defaultValue: T | undefined;
31
15
  }
32
- interface TgpuLazy<out T> extends Withable<TgpuLazy<T>> {
33
- readonly [$internal]: {
34
- compute(): T;
35
- };
36
- readonly resourceType: 'lazy';
37
- readonly [$gpuValueOf]: GPUValueOf<T>;
38
- /**
39
- * @deprecated Use `.$` instead, works the same way.
40
- */
41
- readonly value: GPUValueOf<T>;
42
- readonly $: GPUValueOf<T>;
43
- readonly [$providing]?: Providing | undefined;
16
+ export interface TgpuAccessorSoul<T extends BaseData = BaseData, TValue = unknown> extends TgpuSoul<'accessor' | 'mutable-accessor'> {
17
+ readonly schema: T;
18
+ readonly defaultValue: TValue | undefined;
44
19
  }
45
- interface TgpuAccessor<T extends BaseData = BaseData> extends TgpuNamable {
46
- readonly [$internal]: true;
47
- readonly resourceType: 'accessor';
48
- readonly schema: T;
49
- readonly defaultValue: TgpuAccessor.In<T> | undefined;
50
- readonly slot: TgpuSlot<TgpuAccessor.In<T>>;
51
- readonly [$gpuValueOf]: InferGPU<T>;
52
- /**
53
- * @deprecated Use `.$` instead, works the same way.
54
- */
55
- readonly value: InferGPU<T>;
56
- readonly $: InferGPU<T>;
20
+ export interface TgpuSlot<T> extends TgpuNamable {
21
+ readonly [$internal]: true;
22
+ readonly [$soul]: TgpuSlotSoul<T>;
23
+ readonly resourceType: 'slot';
24
+ readonly defaultValue: T | undefined;
25
+ /**
26
+ * Used to determine if code generated using either value `a` or `b` in place
27
+ * of the slot will be equivalent. Defaults to `Object.is`.
28
+ */
29
+ areEqual(a: T, b: T): boolean;
30
+ readonly [$gpuValueOf]: GPUValueOf<T>;
31
+ readonly $: GPUValueOf<T>;
32
+ toString(): string;
57
33
  }
58
- type DataAccessorIn<T extends BaseData> = (() => DataAccessorIn<T>) | TgpuBufferUsage<T> | TgpuBufferShorthand<T> | TgpuVar<VariableScope, T> | TgpuConst<T> | Infer<T>;
34
+ export interface TgpuLazy<out T> extends Withable<TgpuLazy<T>> {
35
+ readonly [$internal]: {
36
+ compute(): T;
37
+ };
38
+ readonly resourceType: 'lazy';
39
+ readonly [$gpuValueOf]: GPUValueOf<T>;
40
+ readonly $: GPUValueOf<T>;
41
+ readonly [$providing]?: Providing | undefined;
42
+ }
43
+ export interface TgpuAccessor<T extends BaseData = BaseData> extends TgpuNamable {
44
+ readonly [$internal]: true;
45
+ readonly [$soul]: TgpuAccessorSoul<T, TgpuAccessor.In<T>>;
46
+ readonly resourceType: 'accessor';
47
+ readonly schema: T;
48
+ readonly defaultValue: TgpuAccessor.In<T> | undefined;
49
+ readonly slot: TgpuSlot<TgpuAccessor.In<T>>;
50
+ readonly [$gpuValueOf]: InferGPU<T>;
51
+ readonly $: InferGPU<T>;
52
+ toString(): string;
53
+ }
54
+ type DataAccessorIn<T extends BaseData> = (() => DataAccessorIn<T>) | TgpuBufferBinding<T> | TgpuVar<VariableScope, T> | TgpuConst<T> | Infer<T>;
59
55
  type TextureAccessorIn<T extends WgslTexture | WgslStorageTexture> = (() => TextureAccessorIn<T>) | Infer<T> | TgpuTextureView<T>;
60
- declare namespace TgpuAccessor {
61
- type In<T extends BaseData | ((count: number) => BaseData)> = UnwrapRuntimeConstructor<T> extends WgslTexture | WgslStorageTexture ? TextureAccessorIn<UnwrapRuntimeConstructor<T>> : DataAccessorIn<UnwrapRuntimeConstructor<T>>;
56
+ export declare namespace TgpuAccessor {
57
+ type In<T extends BaseData | ((count: number) => BaseData)> = UnwrapRuntimeConstructor<T> extends WgslTexture | WgslStorageTexture ? TextureAccessorIn<UnwrapRuntimeConstructor<T>> : DataAccessorIn<UnwrapRuntimeConstructor<T>>;
62
58
  }
63
- interface TgpuMutableAccessor<T extends BaseData = BaseData> extends TgpuNamable {
64
- readonly [$internal]: true;
65
- readonly resourceType: 'mutable-accessor';
66
- readonly schema: T;
67
- readonly defaultValue: TgpuMutableAccessor.In<T> | undefined;
68
- readonly slot: TgpuSlot<TgpuMutableAccessor.In<T>>;
69
- readonly [$gpuValueOf]: InferGPU<T>;
70
- value: InferGPU<T>;
71
- $: InferGPU<T>;
59
+ export interface TgpuMutableAccessor<T extends BaseData = BaseData> extends TgpuNamable {
60
+ readonly [$internal]: true;
61
+ readonly [$soul]: TgpuAccessorSoul<T, TgpuMutableAccessor.In<T>>;
62
+ readonly resourceType: 'mutable-accessor';
63
+ readonly schema: T;
64
+ readonly defaultValue: TgpuMutableAccessor.In<T> | undefined;
65
+ readonly slot: TgpuSlot<TgpuMutableAccessor.In<T>>;
66
+ readonly [$gpuValueOf]: InferGPU<T>;
67
+ $: InferGPU<T>;
72
68
  }
73
- type MutableDataAccessorIn<T extends BaseData> = (() => Infer<T> | MutableDataAccessorIn<T>) | TgpuBufferUsage<T> | TgpuBufferShorthand<T> | TgpuVar<VariableScope, T>;
69
+ type MutableDataAccessorIn<T extends BaseData> = (() => Infer<T> | MutableDataAccessorIn<T>) | TgpuBufferBinding<T> | TgpuVar<VariableScope, T>;
74
70
  type MutableTextureAccessorIn<T extends WgslTexture | WgslStorageTexture> = (() => Infer<T> | TgpuTextureView<T> | MutableTextureAccessorIn<T>) | TgpuTextureView<T>;
75
- declare namespace TgpuMutableAccessor {
76
- type In<T extends BaseData | ((count: number) => BaseData)> = UnwrapRuntimeConstructor<T> extends WgslTexture | WgslStorageTexture ? MutableTextureAccessorIn<UnwrapRuntimeConstructor<T>> : MutableDataAccessorIn<UnwrapRuntimeConstructor<T>>;
71
+ export declare namespace TgpuMutableAccessor {
72
+ type In<T extends BaseData | ((count: number) => BaseData)> = UnwrapRuntimeConstructor<T> extends WgslTexture | WgslStorageTexture ? MutableTextureAccessorIn<UnwrapRuntimeConstructor<T>> : MutableDataAccessorIn<UnwrapRuntimeConstructor<T>>;
77
73
  }
78
74
  /**
79
75
  * Represents a value that is available at resolution time.
80
76
  */
81
- type Eventual<T> = T | TgpuSlot<T> | TgpuLazy<T>;
82
- type SlotValuePair<T = unknown> = [TgpuSlot<T>, T];
83
- type Providing = {
84
- inner: object;
85
- pairs: SlotValuePair[];
77
+ export type Eventual<T> = T | TgpuSlot<T> | TgpuLazy<T>;
78
+ export type SlotValuePair<T = unknown> = [TgpuSlot<T>, T];
79
+ export type Providing = {
80
+ inner: object;
81
+ pairs: SlotValuePair[];
82
+ };
83
+ export declare function isSlot<T>(value: unknown): value is TgpuSlot<T>;
84
+ export declare function isLazy<T>(value: unknown): value is TgpuLazy<T>;
85
+ export declare function isProviding(value: unknown): value is {
86
+ [$providing]: Providing;
86
87
  };
87
- declare function isSlot<T>(value: unknown): value is TgpuSlot<T>;
88
- declare function isLazy<T>(value: unknown): value is TgpuLazy<T>;
89
- declare function isAccessor<T extends BaseData>(value: unknown): value is TgpuAccessor<T>;
90
- declare function isMutableAccessor<T extends BaseData>(value: unknown): value is TgpuMutableAccessor<T>;
91
- //#endregion
92
- export { Eventual, Providing, SlotValuePair, TgpuAccessor, TgpuLazy, TgpuMutableAccessor, TgpuSlot, isAccessor, isLazy, isMutableAccessor, isSlot };
88
+ export declare function isAccessor<T extends BaseData>(value: unknown): value is TgpuAccessor<T>;
89
+ export declare function isMutableAccessor<T extends BaseData>(value: unknown): value is TgpuMutableAccessor<T>;
90
+ export {};