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,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. Use `tgpu.slot` for non-WGSL values instead.");
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. Use `tgpu.slot` for non-WGSL values instead.");
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 {};