typegpu 0.11.9 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. package/builtin.d.ts +51 -53
  2. package/builtin.js +30 -34
  3. package/common/fullScreenTriangle.d.ts +2 -10
  4. package/common/fullScreenTriangle.js +20 -28
  5. package/common/index.d.ts +2 -9
  6. package/common/index.js +3 -12
  7. package/common/writeSoA.d.ts +11 -12
  8. package/common/writeSoA.js +88 -76
  9. package/core/buffer/buffer.d.ts +79 -62
  10. package/core/buffer/buffer.js +279 -205
  11. package/core/buffer/bufferBinding.d.ts +71 -0
  12. package/core/buffer/bufferBinding.js +154 -0
  13. package/core/buffer/bufferUsage.d.ts +14 -45
  14. package/core/buffer/bufferUsage.js +1 -171
  15. package/core/buffer/laidOutBuffer.d.ts +25 -0
  16. package/core/buffer/laidOutBuffer.js +55 -0
  17. package/core/commandEncoder/attachments.d.ts +125 -0
  18. package/core/commandEncoder/attachments.js +29 -0
  19. package/core/commandEncoder/commandEncoder.d.ts +53 -0
  20. package/core/commandEncoder/commandEncoder.js +56 -0
  21. package/core/commandEncoder/computePass.d.ts +58 -0
  22. package/core/commandEncoder/computePass.js +63 -0
  23. package/core/commandEncoder/renderPass.d.ts +121 -0
  24. package/core/commandEncoder/renderPass.js +196 -0
  25. package/core/constant/tgpuConstant.d.ts +26 -26
  26. package/core/constant/tgpuConstant.js +76 -65
  27. package/core/declare/tgpuDeclare.d.ts +3 -6
  28. package/core/declare/tgpuDeclare.js +36 -36
  29. package/core/function/autoIO.d.ts +61 -33
  30. package/core/function/autoIO.js +68 -73
  31. package/core/function/comptime.d.ts +11 -13
  32. package/core/function/comptime.js +60 -52
  33. package/core/function/createCallableSchema.d.ts +16 -0
  34. package/core/function/createCallableSchema.js +50 -40
  35. package/core/function/dualImpl.d.ts +44 -0
  36. package/core/function/dualImpl.js +71 -50
  37. package/core/function/entryInputRouter.d.ts +26 -0
  38. package/core/function/entryInputRouter.js +31 -33
  39. package/core/function/extractArgs.d.ts +38 -0
  40. package/core/function/extractArgs.js +202 -200
  41. package/core/function/fnCore.d.ts +44 -5
  42. package/core/function/fnCore.js +148 -93
  43. package/core/function/fnTypes.d.ts +31 -29
  44. package/core/function/fnTypes.js +1 -0
  45. package/core/function/ioSchema.d.ts +12 -10
  46. package/core/function/ioSchema.js +65 -47
  47. package/core/function/shelllessImpl.d.ts +9 -12
  48. package/core/function/shelllessImpl.js +17 -22
  49. package/core/function/templateUtils.d.ts +2 -0
  50. package/core/function/templateUtils.js +9 -8
  51. package/core/function/tgpuComputeFn.d.ts +26 -28
  52. package/core/function/tgpuComputeFn.js +47 -48
  53. package/core/function/tgpuFn.d.ts +34 -37
  54. package/core/function/tgpuFn.js +179 -153
  55. package/core/function/tgpuFragmentFn.d.ts +52 -53
  56. package/core/function/tgpuFragmentFn.js +63 -56
  57. package/core/function/tgpuVertexFn.d.ts +36 -39
  58. package/core/function/tgpuVertexFn.js +56 -53
  59. package/core/pipeline/computePipeline.d.ts +141 -53
  60. package/core/pipeline/computePipeline.js +291 -225
  61. package/core/pipeline/connectAttachmentToShader.d.ts +4 -0
  62. package/core/pipeline/connectAttachmentToShader.js +25 -22
  63. package/core/pipeline/connectTargetsToShader.d.ts +3 -0
  64. package/core/pipeline/connectTargetsToShader.js +29 -27
  65. package/core/pipeline/drawState.d.ts +52 -0
  66. package/core/pipeline/drawState.js +225 -0
  67. package/core/pipeline/limitsOverflow.d.ts +2 -0
  68. package/core/pipeline/limitsOverflow.js +13 -10
  69. package/core/pipeline/performanceTracker.d.ts +14 -0
  70. package/core/pipeline/performanceTracker.js +34 -0
  71. package/core/pipeline/pipelineUtils.d.ts +18 -0
  72. package/core/pipeline/pipelineUtils.js +54 -25
  73. package/core/pipeline/priors.d.ts +1 -0
  74. package/core/pipeline/priors.js +12 -0
  75. package/core/pipeline/renderPipeline.d.ts +246 -261
  76. package/core/pipeline/renderPipeline.js +487 -480
  77. package/core/pipeline/timeable.d.ts +28 -18
  78. package/core/pipeline/timeable.js +90 -52
  79. package/core/pipeline/typeGuards.d.ts +17 -0
  80. package/core/pipeline/typeGuards.js +52 -22
  81. package/core/querySet/querySet.d.ts +26 -21
  82. package/core/querySet/querySet.js +127 -103
  83. package/core/rawCodeSnippet/tgpuRawCodeSnippet.d.ts +13 -18
  84. package/core/rawCodeSnippet/tgpuRawCodeSnippet.js +89 -90
  85. package/core/resolve/externals.d.ts +25 -8
  86. package/core/resolve/externals.js +78 -54
  87. package/core/resolve/namespace.d.ts +22 -25
  88. package/core/resolve/namespace.js +16 -21
  89. package/core/resolve/resolvableString.d.ts +7 -0
  90. package/core/resolve/resolvableString.js +13 -0
  91. package/core/resolve/resolveData.d.ts +10 -0
  92. package/core/resolve/resolveData.js +162 -121
  93. package/core/resolve/stitch.d.ts +8 -0
  94. package/core/resolve/stitch.js +23 -21
  95. package/core/resolve/tgpuResolve.d.ts +55 -53
  96. package/core/resolve/tgpuResolve.js +106 -53
  97. package/core/root/configurableImpl.d.ts +10 -0
  98. package/core/root/configurableImpl.js +17 -19
  99. package/core/root/init.d.ts +76 -38
  100. package/core/root/init.js +346 -455
  101. package/core/root/rootTypes.d.ts +461 -636
  102. package/core/root/rootTypes.js +1 -0
  103. package/core/sampler/sampler.d.ts +50 -31
  104. package/core/sampler/sampler.js +120 -113
  105. package/core/simulate/tgpuSimulate.d.ts +9 -12
  106. package/core/simulate/tgpuSimulate.js +68 -71
  107. package/core/slot/accessor.d.ts +36 -13
  108. package/core/slot/accessor.js +138 -91
  109. package/core/slot/internalSlots.d.ts +2 -0
  110. package/core/slot/internalSlots.js +1 -6
  111. package/core/slot/lazy.d.ts +2 -6
  112. package/core/slot/lazy.js +71 -39
  113. package/core/slot/slot.d.ts +2 -6
  114. package/core/slot/slot.js +45 -38
  115. package/core/slot/slotTypes.d.ts +78 -80
  116. package/core/slot/slotTypes.js +11 -16
  117. package/core/texture/externalTexture.d.ts +20 -11
  118. package/core/texture/externalTexture.js +46 -46
  119. package/core/texture/texture.d.ts +152 -97
  120. package/core/texture/texture.js +407 -314
  121. package/core/texture/textureFormats.d.ts +42 -23
  122. package/core/texture/textureFormats.js +104 -75
  123. package/core/texture/textureProps.d.ts +7 -10
  124. package/core/texture/textureProps.js +1 -0
  125. package/core/texture/textureUtils.d.ts +8 -0
  126. package/core/texture/textureUtils.js +185 -179
  127. package/core/texture/usageExtension.d.ts +21 -18
  128. package/core/texture/usageExtension.js +13 -17
  129. package/core/unroll/tgpuUnroll.d.ts +20 -19
  130. package/core/unroll/tgpuUnroll.js +82 -91
  131. package/core/valueProxyUtils.d.ts +3 -0
  132. package/core/valueProxyUtils.js +52 -41
  133. package/core/variable/tgpuVariable.d.ts +26 -27
  134. package/core/variable/tgpuVariable.js +93 -96
  135. package/core/vertexLayout/connectAttributesToShader.d.ts +9 -0
  136. package/core/vertexLayout/connectAttributesToShader.js +61 -56
  137. package/core/vertexLayout/vertexAttribute.d.ts +21 -17
  138. package/core/vertexLayout/vertexAttribute.js +1 -0
  139. package/core/vertexLayout/vertexLayout.d.ts +24 -18
  140. package/core/vertexLayout/vertexLayout.js +130 -99
  141. package/core/whitespaces.d.ts +2 -0
  142. package/core/whitespaces.js +16 -0
  143. package/data/alignIO.d.ts +7 -0
  144. package/data/alignIO.js +13 -13
  145. package/data/alignmentOf.d.ts +5 -8
  146. package/data/alignmentOf.js +90 -75
  147. package/data/array.d.ts +6 -9
  148. package/data/array.js +48 -40
  149. package/data/atomic.d.ts +2 -7
  150. package/data/atomic.js +26 -23
  151. package/data/attributes.d.ts +19 -21
  152. package/data/attributes.js +192 -132
  153. package/data/autoStruct.d.ts +36 -3
  154. package/data/autoStruct.js +84 -81
  155. package/data/compiledIO.d.ts +5 -0
  156. package/data/compiledIO.js +231 -215
  157. package/data/dataIO.d.ts +13 -11
  158. package/data/dataIO.js +643 -589
  159. package/data/dataTypes.d.ts +83 -65
  160. package/data/dataTypes.js +66 -68
  161. package/data/deepEqual.d.ts +2 -7
  162. package/data/deepEqual.js +80 -55
  163. package/data/disarray.d.ts +6 -10
  164. package/data/disarray.js +52 -46
  165. package/data/float16Conversion.d.ts +4 -0
  166. package/data/float16Conversion.js +7 -0
  167. package/data/getLongestContiguousPrefix.d.ts +4 -8
  168. package/data/getLongestContiguousPrefix.js +6 -11
  169. package/data/index.d.ts +30 -31
  170. package/data/index.js +39 -172
  171. package/data/instanceToSchema.d.ts +24 -27
  172. package/data/instanceToSchema.js +1 -0
  173. package/data/isContiguous.d.ts +4 -8
  174. package/data/isContiguous.js +6 -11
  175. package/data/matrix.d.ts +21 -21
  176. package/data/matrix.js +513 -505
  177. package/data/numberOps.d.ts +6 -0
  178. package/data/numberOps.js +26 -20
  179. package/data/numeric.d.ts +21 -12
  180. package/data/numeric.js +287 -197
  181. package/data/offsetUtils.d.ts +9 -13
  182. package/data/offsetUtils.js +204 -144
  183. package/data/offsets.d.ts +8 -0
  184. package/data/offsets.js +33 -33
  185. package/data/partialIO.d.ts +13 -8
  186. package/data/partialIO.js +124 -113
  187. package/data/ptr.d.ts +12 -12
  188. package/data/ptr.js +42 -44
  189. package/data/ref.d.ts +40 -27
  190. package/data/ref.js +125 -95
  191. package/data/sampler.d.ts +99 -101
  192. package/data/sampler.js +17 -21
  193. package/data/schemaCallWrapper.d.ts +19 -0
  194. package/data/schemaCallWrapper.js +31 -26
  195. package/data/schemaMemoryLayout.d.ts +8 -0
  196. package/data/schemaMemoryLayout.js +213 -185
  197. package/data/sizeOf.d.ts +4 -8
  198. package/data/sizeOf.js +6 -11
  199. package/data/snippet.d.ts +96 -20
  200. package/data/snippet.js +75 -86
  201. package/data/struct.d.ts +4 -7
  202. package/data/struct.js +51 -39
  203. package/data/texture.d.ts +253 -250
  204. package/data/texture.js +238 -200
  205. package/data/unstruct.d.ts +2 -7
  206. package/data/unstruct.js +43 -37
  207. package/data/vector.d.ts +33 -21
  208. package/data/vector.js +234 -221
  209. package/data/vectorImpl.d.ts +231 -0
  210. package/data/vectorImpl.js +563 -515
  211. package/data/vectorOps.d.ts +63 -0
  212. package/data/vectorOps.js +642 -630
  213. package/data/vertexFormatData.d.ts +181 -184
  214. package/data/vertexFormatData.js +104 -106
  215. package/data/wgslTypes.d.ts +665 -600
  216. package/data/wgslTypes.js +220 -198
  217. package/errors.d.ts +50 -24
  218. package/errors.js +146 -126
  219. package/execMode.d.ts +16 -0
  220. package/execMode.js +47 -40
  221. package/extension.d.ts +13 -8
  222. package/extension.js +10 -16
  223. package/getGPUValue.d.ts +1 -0
  224. package/getGPUValue.js +2 -7
  225. package/index.d.ts +28 -68
  226. package/index.js +8 -28
  227. package/indexNamedExports.d.ts +69 -42
  228. package/indexNamedExports.js +25 -0
  229. package/internal.d.ts +16 -0
  230. package/internal.js +12 -0
  231. package/mathUtils.d.ts +5 -0
  232. package/mathUtils.js +7 -11
  233. package/memo.d.ts +11 -0
  234. package/memo.js +20 -22
  235. package/minify.d.ts +5 -0
  236. package/minify.js +93 -0
  237. package/nameUtils.d.ts +29 -0
  238. package/nameUtils.js +427 -394
  239. package/package.json +5 -1
  240. package/resolutionCtx.d.ts +162 -22
  241. package/resolutionCtx.js +911 -629
  242. package/serial/registry.d.ts +15 -0
  243. package/serial/registry.js +106 -0
  244. package/serial/restore.d.ts +49 -0
  245. package/serial/restore.js +68 -0
  246. package/serial/schema.d.ts +58 -0
  247. package/serial/schema.js +209 -0
  248. package/serial/types.d.ts +5 -0
  249. package/serial/types.js +1 -0
  250. package/shared/env.d.ts +9 -0
  251. package/shared/env.js +9 -12
  252. package/shared/generators.d.ts +4 -0
  253. package/shared/generators.js +10 -12
  254. package/shared/meta.d.ts +29 -14
  255. package/shared/meta.js +71 -55
  256. package/shared/normalizeMetadata.d.ts +32 -27
  257. package/shared/normalizeMetadata.js +23 -36
  258. package/shared/repr.d.ts +73 -55
  259. package/shared/repr.js +1 -0
  260. package/shared/soul.d.ts +17 -0
  261. package/shared/soul.js +1 -0
  262. package/shared/stringify.d.ts +2 -0
  263. package/shared/stringify.js +29 -20
  264. package/shared/symbols.d.ts +26 -20
  265. package/shared/symbols.js +79 -79
  266. package/shared/tseynit.d.ts +2 -0
  267. package/shared/tseynit.js +160 -75
  268. package/shared/utilityTypes.d.ts +30 -14
  269. package/shared/utilityTypes.js +2 -6
  270. package/shared/vertexFormat.d.ts +41 -43
  271. package/shared/vertexFormat.js +59 -62
  272. package/std/array.d.ts +2 -7
  273. package/std/array.js +18 -23
  274. package/std/atomic.d.ts +14 -18
  275. package/std/atomic.js +96 -95
  276. package/std/bitcast.d.ts +193 -10
  277. package/std/bitcast.js +309 -39
  278. package/std/boolean.d.ts +19 -33
  279. package/std/boolean.js +296 -288
  280. package/std/copy.d.ts +2 -7
  281. package/std/copy.js +27 -24
  282. package/std/derivative.d.ts +11 -15
  283. package/std/derivative.js +56 -79
  284. package/std/discard.d.ts +1 -6
  285. package/std/discard.js +7 -14
  286. package/std/environment.d.ts +19 -14
  287. package/std/environment.js +71 -51
  288. package/std/extensions.d.ts +2 -8
  289. package/std/extensions.js +10 -11
  290. package/std/index.d.ts +20 -24
  291. package/std/index.js +32 -187
  292. package/std/matrix.d.ts +6 -12
  293. package/std/matrix.js +60 -69
  294. package/std/numeric.d.ts +143 -146
  295. package/std/numeric.js +858 -749
  296. package/std/operators.d.ts +19 -27
  297. package/std/operators.js +227 -193
  298. package/std/packing.d.ts +5 -11
  299. package/std/packing.js +67 -75
  300. package/std/range.d.ts +6 -11
  301. package/std/range.js +48 -36
  302. package/std/subgroup.d.ts +33 -37
  303. package/std/subgroup.js +180 -217
  304. package/std/texture.d.ts +70 -38
  305. package/std/texture.js +176 -172
  306. package/taskQueue.d.ts +6 -0
  307. package/taskQueue.js +30 -0
  308. package/tgpu.d.ts +16 -0
  309. package/tgpu.js +17 -44
  310. package/tgpuBindGroupLayout.d.ts +132 -152
  311. package/tgpuBindGroupLayout.js +346 -268
  312. package/tgpuLogger.d.ts +34 -0
  313. package/tgpuLogger.js +63 -0
  314. package/tgpuUnstable.d.ts +16 -22
  315. package/tgpuUnstable.js +13 -35
  316. package/tgsl/accessIndex.d.ts +2 -0
  317. package/tgsl/accessIndex.js +76 -33
  318. package/tgsl/accessProp.d.ts +2 -0
  319. package/tgsl/accessProp.js +142 -101
  320. package/tgsl/accessStructProp.d.ts +5 -0
  321. package/tgsl/accessStructProp.js +13 -15
  322. package/tgsl/consoleLog/deserializers.d.ts +13 -0
  323. package/tgsl/consoleLog/deserializers.js +119 -103
  324. package/tgsl/consoleLog/logGenerator.d.ts +21 -0
  325. package/tgsl/consoleLog/logGenerator.js +85 -80
  326. package/tgsl/consoleLog/serializers.d.ts +21 -0
  327. package/tgsl/consoleLog/serializers.js +119 -100
  328. package/tgsl/consoleLog/types.d.ts +40 -39
  329. package/tgsl/consoleLog/types.js +1 -0
  330. package/tgsl/conversion.d.ts +33 -0
  331. package/tgsl/conversion.js +271 -216
  332. package/tgsl/forOfUtils.d.ts +15 -0
  333. package/tgsl/forOfUtils.js +85 -70
  334. package/tgsl/generationHelpers.d.ts +22 -39
  335. package/tgsl/generationHelpers.js +85 -58
  336. package/tgsl/infixDispatch.d.ts +70 -0
  337. package/tgsl/infixDispatch.js +48 -46
  338. package/tgsl/jsPolyfills.d.ts +16 -19
  339. package/tgsl/jsPolyfills.js +44 -42
  340. package/tgsl/makeDereferenceable.d.ts +48 -0
  341. package/tgsl/makeDereferenceable.js +86 -0
  342. package/tgsl/makeResolvable.d.ts +22 -0
  343. package/tgsl/makeResolvable.js +33 -0
  344. package/tgsl/shaderGenerator.d.ts +77 -17
  345. package/tgsl/shaderGenerator.js +1 -0
  346. package/tgsl/shellless.d.ts +6 -9
  347. package/tgsl/shellless.js +73 -43
  348. package/tgsl/wgslGenerator.d.ts +66 -59
  349. package/tgsl/wgslGenerator.js +1344 -760
  350. package/types.d.ts +287 -222
  351. package/types.js +61 -44
  352. package/unwrapper.d.ts +31 -26
  353. package/unwrapper.js +1 -0
  354. package/wgslExtensions.d.ts +3 -5
  355. package/wgslExtensions.js +12 -16
  356. package/_virtual/rolldown_runtime.js +0 -13
  357. package/core/buffer/bufferShorthand.d.ts +0 -50
  358. package/core/buffer/bufferShorthand.js +0 -55
  359. package/core/pipeline/applyPipelineState.js +0 -37
  360. package/package.js +0 -5
  361. package/tgsl/shaderGenerator_members.d.ts +0 -33
  362. package/tgsl/shaderGenerator_members.js +0 -12
package/types.d.ts CHANGED
@@ -1,120 +1,121 @@
1
- import { $cast, $gpuCallable, $internal } from "./shared/symbols.js";
2
- import { MapValueToSnippet, ResolvedSnippet, Snippet } from "./data/snippet.js";
3
- import { TgpuBufferUsage } from "./core/buffer/bufferUsage.js";
4
- import { SeparatedEntryArgs } from "./core/function/fnTypes.js";
5
- import { TgpuComputeFn } from "./core/function/tgpuComputeFn.js";
6
- import { TgpuVar } from "./core/variable/tgpuVariable.js";
7
- import { Eventual, SlotValuePair, TgpuAccessor, TgpuSlot } from "./core/slot/slotTypes.js";
8
- import { TgpuComputePipeline } from "./core/pipeline/computePipeline.js";
9
- import { TgpuFragmentFn } from "./core/function/tgpuFragmentFn.js";
10
- import { TgpuVertexFn } from "./core/function/tgpuVertexFn.js";
11
- import { TgpuRenderPipeline } from "./core/pipeline/renderPipeline.js";
12
- import { TgpuSampler } from "./core/sampler/sampler.js";
13
- import { TgpuExternalTexture } from "./core/texture/externalTexture.js";
14
- import { TgpuBindGroupLayout, TgpuLayoutEntry } from "./tgpuBindGroupLayout.js";
15
- import { ShaderGenerator } from "./tgsl/shaderGenerator.js";
16
- import { TgpuBuffer } from "./core/buffer/buffer.js";
17
- import { TgpuDeclare } from "./core/declare/tgpuDeclare.js";
18
- import { TgpuFn } from "./core/function/tgpuFn.js";
19
- import { WgslEnableExtension } from "./wgslExtensions.js";
20
- import { AnyMatInstance, AnyVecInstance, BaseData } from "./data/wgslTypes.js";
21
- import { TgpuTexture, TgpuTextureView } from "./core/texture/texture.js";
22
- import { Infer } from "./shared/repr.js";
23
- import { AnyData, UnknownData } from "./data/dataTypes.js";
24
- import { TgpuConst } from "./core/constant/tgpuConstant.js";
25
- import { Block, FuncParameter } from "tinyest";
26
-
27
- //#region src/types.d.ts
28
- type ResolvableObject = SelfResolvable | TgpuBufferUsage | TgpuConst | TgpuDeclare | TgpuBindGroupLayout | TgpuFn | TgpuComputeFn | TgpuFragmentFn | TgpuComputePipeline | TgpuRenderPipeline | TgpuVertexFn | TgpuSampler | TgpuAccessor | TgpuExternalTexture | TgpuTexture | TgpuTextureView | TgpuVar | AnyVecInstance | AnyMatInstance | AnyData | ((...args: never[]) => unknown);
29
- type Wgsl = Eventual<string | number | boolean | ResolvableObject>;
30
- type TgpuShaderStage = 'compute' | 'vertex' | 'fragment';
31
- interface ResolveFunctionOptions {
32
- functionType: 'normal' | TgpuShaderStage;
33
- workgroupSize?: readonly number[] | undefined;
34
- name: string;
35
- argTypes: BaseData[];
36
- /**
37
- * The return type of the function. If undefined, the type should be inferred
38
- * from the implementation (relevant for shellless functions).
39
- */
40
- returnType: BaseData | undefined;
41
- body: Block;
42
- params: FuncParameter[];
43
- externalMap: Record<string, unknown>;
44
- /**
45
- * For entry functions: positional args and optional data struct.
46
- * When provided, takes precedence over `argTypes` for WGSL header generation.
47
- */
48
- entryInput?: SeparatedEntryArgs | undefined;
1
+ import type { Block, FuncParameter } from 'tinyest';
2
+ import type { IndexFlag, TgpuBuffer, UniformFlag, VertexFlag } from './core/buffer/buffer.ts';
3
+ import type { TgpuConst } from './core/constant/tgpuConstant.ts';
4
+ import type { TgpuDeclare } from './core/declare/tgpuDeclare.ts';
5
+ import type { TgpuComputeFn } from './core/function/tgpuComputeFn.ts';
6
+ import type { TgpuFn } from './core/function/tgpuFn.ts';
7
+ import type { TgpuFragmentFn } from './core/function/tgpuFragmentFn.ts';
8
+ import type { SeparatedEntryArgs } from './core/function/fnTypes.ts';
9
+ import type { TgpuVertexFn } from './core/function/tgpuVertexFn.ts';
10
+ import type { TgpuComputePipeline } from './core/pipeline/computePipeline.ts';
11
+ import type { TgpuRenderPipeline } from './core/pipeline/renderPipeline.ts';
12
+ import type { TgpuSampler } from './core/sampler/sampler.ts';
13
+ import { type Eventual, type SlotValuePair, type TgpuAccessor, type TgpuLazy, type TgpuSlot } from './core/slot/slotTypes.ts';
14
+ import type { TgpuExternalTexture } from './core/texture/externalTexture.ts';
15
+ import type { TgpuTexture, TgpuTextureView } from './core/texture/texture.ts';
16
+ import type { TgpuVar } from './core/variable/tgpuVariable.ts';
17
+ import { type AnyData, UnknownData } from './data/dataTypes.ts';
18
+ import type { MapValueToSnippet, ResolvedSnippet, Snippet } from './data/snippet.ts';
19
+ import { type AnyMatInstance, type AnyVecInstance, type BaseData } from './data/wgslTypes.ts';
20
+ import { $cast, $gpuCallable, $gpuValueOf, $internal, $ownSnippet, $resolve } from './shared/symbols.ts';
21
+ import type { TgpuBindGroupLayout, TgpuLayoutEntry } from './tgpuBindGroupLayout.ts';
22
+ import type { WgslEnableExtension } from './wgslExtensions.ts';
23
+ import type { Infer } from './shared/repr.ts';
24
+ import type { ShaderGenerator } from './tgsl/shaderGenerator.ts';
25
+ import type { StorageFlag } from './extension.ts';
26
+ import type { TgpuBufferBinding } from './core/buffer/bufferBinding.ts';
27
+ import type { ShelllessRepository } from './tgsl/shellless.ts';
28
+ import type { SupportedLogOp } from './tgsl/consoleLog/types.ts';
29
+ export type ResolvableObject = SelfResolvable | TgpuLazy<unknown> | TgpuConst | TgpuDeclare | TgpuBindGroupLayout | TgpuFn | TgpuComputeFn | TgpuFragmentFn | TgpuComputePipeline | TgpuRenderPipeline | TgpuVertexFn | TgpuSampler | TgpuAccessor | TgpuExternalTexture | TgpuTexture | TgpuTextureView | TgpuBufferBinding<BaseData> | TgpuVar | AnyVecInstance | AnyMatInstance | AnyData | ((...args: never[]) => unknown);
30
+ export type Wgsl = Eventual<number | boolean | ResolvableObject>;
31
+ export type ShaderStage = 'compute' | 'vertex' | 'fragment';
32
+ export interface ResolveFunctionOptions {
33
+ functionType: 'normal' | ShaderStage;
34
+ workgroupSize?: readonly number[] | undefined;
35
+ name: string;
36
+ argTypes: BaseData[];
37
+ /**
38
+ * The return type of the function. If undefined, the type should be inferred
39
+ * from the implementation (relevant for shellless functions).
40
+ */
41
+ returnType: BaseData | undefined;
42
+ body: Block;
43
+ params: FuncParameter[];
44
+ externalMap: Record<string, unknown>;
45
+ /**
46
+ * For entry functions: positional args and optional data struct.
47
+ * When provided, takes precedence over `argTypes` for WGSL header generation.
48
+ */
49
+ entryInput?: SeparatedEntryArgs | undefined;
49
50
  }
50
- type ItemLayer = {
51
- type: 'item';
52
- usedSlots: Set<TgpuSlot<unknown>>;
51
+ export type ItemLayer = {
52
+ type: 'item';
53
+ usedSlots: Set<TgpuSlot<unknown>>;
53
54
  };
54
- type FunctionArgumentAccess = () => Snippet | undefined;
55
- interface FunctionArgument {
56
- name: string;
57
- access: FunctionArgumentAccess;
58
- decoratedType: BaseData;
59
- used: boolean;
55
+ export type FunctionArgumentAccess = () => Snippet | undefined;
56
+ export interface FunctionArgument {
57
+ name: string;
58
+ access: FunctionArgumentAccess;
59
+ decoratedType: BaseData;
60
+ used: boolean;
60
61
  }
61
- type FunctionScopeLayer = {
62
- type: 'functionScope';
63
- functionType: 'normal' | 'compute' | 'vertex' | 'fragment';
64
- argAccess: Record<string, FunctionArgumentAccess>;
65
- externalMap: Record<string, unknown>;
66
- /**
67
- * The return type of the function. If undefined, the type should be inferred
68
- * from the implementation (relevant for shellless functions).
69
- */
70
- returnType: BaseData | undefined;
71
- /**
72
- * All types used in `return` statements.
73
- */
74
- reportedReturnTypes: Set<BaseData>;
75
- /**
76
- * Maps variables to their modifier placeholders
77
- */
78
- placeholderForVariable: Map<Snippet, string>;
79
- /**
80
- * Local variables that need `var` modifier.
81
- */
82
- modifiedVariables: Set<Snippet>;
62
+ export type FunctionScopeLayer = {
63
+ type: 'functionScope';
64
+ functionType: 'normal' | 'compute' | 'vertex' | 'fragment';
65
+ argAccess: Record<string, FunctionArgumentAccess>;
66
+ externalMap: Record<string, unknown>;
67
+ /**
68
+ * The return type of the function. If undefined, the type should be inferred
69
+ * from the implementation (relevant for shellless functions).
70
+ */
71
+ returnType: BaseData | undefined;
72
+ /**
73
+ * All types used in `return` statements.
74
+ */
75
+ reportedReturnTypes: Set<BaseData>;
76
+ /**
77
+ * Maps variables to their modifier placeholders
78
+ */
79
+ placeholderForVariable: Map<Snippet, string>;
80
+ /**
81
+ * Local variables that need `var` modifier.
82
+ */
83
+ modifiedVariables: Set<Snippet>;
83
84
  };
84
- type SlotBindingLayer = {
85
- type: 'slotBinding';
86
- bindingMap: WeakMap<TgpuSlot<unknown>, unknown>;
85
+ export type SlotBindingLayer = {
86
+ type: 'slotBinding';
87
+ bindingMap: WeakMap<TgpuSlot<unknown>, unknown>;
87
88
  };
88
- type BlockScopeLayer = {
89
- type: 'blockScope';
90
- takenLocalIdentifiers: Set<string>;
91
- declarations: Map<string, Snippet>;
92
- externals: Map<string, Snippet>;
89
+ export type BlockScopeLayer = {
90
+ type: 'blockScope';
91
+ takenLocalIdentifiers: Set<string>;
92
+ declarations: Map<string, Snippet>;
93
+ externals: Map<string, Snippet>;
93
94
  };
94
- type StackLayer = ItemLayer | SlotBindingLayer | FunctionScopeLayer | BlockScopeLayer;
95
- interface ItemStateStack {
96
- readonly itemDepth: number;
97
- readonly topItem: ItemLayer;
98
- readonly topBlockScope: BlockScopeLayer | undefined;
99
- readonly topFunctionScope: FunctionScopeLayer | undefined;
100
- pushItem(): void;
101
- pushSlotBindings(pairs: SlotValuePair[]): void;
102
- pushFunctionScope(functionType: 'normal' | TgpuShaderStage, argAccess: Record<string, FunctionArgumentAccess>,
103
- /**
104
- * The return type of the function. If undefined, the type should be inferred
105
- * from the implementation (relevant for shellless functions).
106
- */
107
- returnType: BaseData | undefined, externalMap: Record<string, unknown>): FunctionScopeLayer;
108
- pushBlockScope(): void;
109
- setBlockExternals(externals: Record<string, Snippet>): void;
110
- clearBlockExternals(): void;
111
- pop<T extends StackLayer['type']>(type: T): Extract<StackLayer, {
112
- type: T;
113
- }>;
114
- pop(): StackLayer | undefined;
115
- readSlot<T>(slot: TgpuSlot<T>): T | undefined;
116
- getSnippetById(id: string): Snippet | undefined;
117
- defineBlockVariable(id: string, snippet: Snippet): void;
95
+ export type StackLayer = ItemLayer | SlotBindingLayer | FunctionScopeLayer | BlockScopeLayer;
96
+ export interface ItemStateStack {
97
+ readonly itemDepth: number;
98
+ readonly topItem: ItemLayer;
99
+ readonly topBlockScope: BlockScopeLayer | undefined;
100
+ readonly topFunctionScope: FunctionScopeLayer | undefined;
101
+ pushItem(): void;
102
+ pushSlotBindings(pairs: SlotValuePair[]): void;
103
+ pushFunctionScope(functionType: 'normal' | ShaderStage, argAccess: Record<string, FunctionArgumentAccess>,
104
+ /**
105
+ * The return type of the function. If undefined, the type should be inferred
106
+ * from the implementation (relevant for shellless functions).
107
+ */
108
+ returnType: BaseData | undefined, externalMap: Record<string, unknown>): FunctionScopeLayer;
109
+ pushBlockScope(): void;
110
+ setBlockExternals(externals: Record<string, Snippet>): void;
111
+ clearBlockExternals(): void;
112
+ pop<T extends StackLayer['type']>(type: T): Extract<StackLayer, {
113
+ type: T;
114
+ }>;
115
+ pop(): StackLayer | undefined;
116
+ readSlot<T>(slot: TgpuSlot<T>): T | undefined;
117
+ getSnippetById(id: string): Snippet | undefined;
118
+ defineBlockVariable(id: string, snippet: Snippet): void;
118
119
  }
119
120
  /**
120
121
  * # What are execution modes/states? 🤷
@@ -168,132 +169,196 @@ interface ItemStateStack {
168
169
  * console.log(result.value); // Prints 1
169
170
  * ```
170
171
  */
171
- type ExecMode = 'normal' | 'codegen' | 'simulate';
172
- declare class NormalState {
173
- readonly type: "normal";
172
+ export type ExecMode = 'normal' | 'codegen' | 'simulate';
173
+ export declare class NormalState {
174
+ readonly type: "normal";
174
175
  }
175
- declare class CodegenState {
176
- readonly type: "codegen";
176
+ export declare class CodegenState {
177
+ readonly type: "codegen";
177
178
  }
178
- declare class SimulationState {
179
- readonly type: "simulate";
180
- readonly buffers: Map<TgpuBuffer<BaseData>, unknown>;
181
- readonly vars: {
182
- private: Map<TgpuVar, unknown>;
183
- workgroup: Map<TgpuVar, unknown>;
184
- };
185
- constructor(buffers: Map<TgpuBuffer<BaseData>, unknown>, vars: {
186
- private: Map<TgpuVar, unknown>;
187
- workgroup: Map<TgpuVar, unknown>;
188
- });
179
+ export declare class SimulationState {
180
+ readonly type: "simulate";
181
+ readonly buffers: Map<TgpuBuffer<BaseData>, unknown>;
182
+ readonly vars: {
183
+ private: Map<TgpuVar, unknown>;
184
+ workgroup: Map<TgpuVar, unknown>;
185
+ };
186
+ constructor(buffers: Map<TgpuBuffer<BaseData>, unknown>, vars: {
187
+ private: Map<TgpuVar, unknown>;
188
+ workgroup: Map<TgpuVar, unknown>;
189
+ });
189
190
  }
190
- type ExecState = NormalState | CodegenState | SimulationState;
191
+ export type ExecState = NormalState | CodegenState | SimulationState;
191
192
  /**
192
193
  * Passed into each resolvable item. All items in a tree share a resolution ctx,
193
194
  * but there can be layers added and removed from the item stack when going down
194
195
  * and up the tree.
195
196
  */
196
- interface ResolutionCtx {
197
- [$internal]: {
198
- itemStateStack: ItemStateStack;
199
- };
200
- readonly mode: ExecState;
201
- readonly enableExtensions: WgslEnableExtension[] | undefined;
202
- readonly gen: ShaderGenerator;
203
- addDeclaration(declaration: string): void;
204
- withResetIndentLevel<T>(callback: () => T): T;
205
- /**
206
- * Reserves a bind group number, and returns a placeholder that will be replaced
207
- * with a concrete number at the end of the resolution process.
208
- */
209
- allocateLayoutEntry(layout: TgpuBindGroupLayout): string;
210
- /**
211
- * Reserves a spot in the catch-all bind group, without the indirection of a bind-group.
212
- * This means the resource is 'fixed', and cannot be swapped between code execution.
213
- */
214
- allocateFixedEntry(layoutEntry: TgpuLayoutEntry, resource: object): {
215
- group: string;
216
- binding: number;
217
- };
218
- withSlots<T>(pairs: SlotValuePair[], callback: () => T): T;
219
- pushMode(state: ExecState): void;
220
- popMode(expected?: ExecMode): void;
221
- /**
222
- * Unwraps all layers of slot/lazy indirection and returns the concrete value if available.
223
- * @throws {MissingSlotValueError}
224
- */
225
- unwrap<T>(eventual: Eventual<T>): T;
226
- /**
227
- * Returns the snippet representing `item`.
228
- *
229
- * @param item The value to resolve
230
- * @param schema Additional information about the item's data type
231
- */
232
- resolve(item: unknown, schema?: BaseData | UnknownData): ResolvedSnippet;
233
- /**
234
- * Equivalent to `snip(ctx.resolve(snippet.value, snippet.dataType).value, snippet.dataType, snippet.origin)`.
235
- */
236
- resolveSnippet(snippet: Snippet): ResolvedSnippet;
237
- resolveFunction(options: ResolveFunctionOptions): {
238
- code: string;
239
- returnType: BaseData;
240
- };
241
- withVaryingLocations<T>(locations: Record<string, number>, callback: () => T): T;
242
- get varyingLocations(): Record<string, number> | undefined;
243
- /**
244
- * Temporarily renames the item.
245
- * Useful for resolutions with slots,
246
- * since functions with different slots should have different names,
247
- * and all hold the same inner function that is being resolved multiple times.
248
- * @param item the item to rename
249
- * @param name the temporary name to assign to the item (if missing, just returns `callback()`)
250
- */
251
- withRenamed<T>(item: object, name: string | undefined, callback: () => T): T;
252
- /**
253
- * @param primer The basis for the unique identifier. Depending on the strategy, or
254
- * the names already taken, this may be modified to ensure uniqueness.
255
- * @param scope The scope in which to generate the identifier. 'global' means
256
- * the identifier is meant to be unique across the entire program, while
257
- * 'block' means it cannot shadow any existing identifiers visible from
258
- * within the current block. After the block is popped, any identifiers
259
- * defined within it are no longer visible.
260
- * @returns an identifier that is unique within the given scope
261
- */
262
- makeUniqueIdentifier(primer: string | undefined, scope: 'global' | 'block'): string;
263
- isIdentifierBanned(name: string): boolean;
264
- isIdentifierTaken(name: string): boolean;
265
- /**
266
- * Makes sure the given identifier cannot be generated by {@link makeUniqueIdentifier}
267
- * within the given scope.
268
- * @param name The name to reserve
269
- * @param scope See {@link makeUniqueIdentifier} for a description of the scope parameter.
270
- */
271
- reserveIdentifier(name: string, scope: 'global' | 'block'): void;
197
+ export interface ResolutionCtx {
198
+ [$internal]: {
199
+ itemStateStack: ItemStateStack;
200
+ };
201
+ readonly pre: string;
202
+ readonly mode: ExecState;
203
+ readonly enableExtensions: WgslEnableExtension[] | undefined;
204
+ readonly gen: ShaderGenerator;
205
+ /**
206
+ * Used by `typedExpression` to signal downstream
207
+ * expression resolution what type is expected of them.
208
+ *
209
+ * It is used exclusively for inferring the types of structs and arrays.
210
+ * It is modified exclusively by `typedExpression` function.
211
+ */
212
+ expectedType: (BaseData | BaseData[]) | undefined;
213
+ readonly topFunctionScope: FunctionScopeLayer | undefined;
214
+ readonly topFunctionReturnType: BaseData | undefined;
215
+ readonly blockDepth: number;
216
+ readonly shelllessRepo: ShelllessRepository;
217
+ /**
218
+ * Adds a module-scope declaration to the resolution output.
219
+ * @param declaration - The WGSL code of the declaration.
220
+ * @param name - The identifier the declaration declares (a fn, struct, var,
221
+ * const or alias name), if it declares one. Reported back to the caller
222
+ * through `ResolutionResult.declarations`.
223
+ */
224
+ addDeclaration(declaration: string, name?: string): void;
225
+ withResetIndentLevel<T>(callback: () => T): T;
226
+ /**
227
+ * Reserves a bind group number, and returns a placeholder that will be replaced
228
+ * with a concrete number at the end of the resolution process.
229
+ */
230
+ allocateLayoutEntry(layout: TgpuBindGroupLayout): string;
231
+ /**
232
+ * Reserves a spot in the catch-all bind group, without the indirection of a bind-group.
233
+ * This means the resource is 'fixed', and cannot be swapped between code execution.
234
+ */
235
+ allocateFixedEntry(layoutEntry: TgpuLayoutEntry, resource: object): {
236
+ group: string;
237
+ binding: number;
238
+ };
239
+ withSlots<T>(pairs: SlotValuePair[], callback: () => T): T;
240
+ pushMode(state: ExecState): void;
241
+ popMode(expected?: ExecMode): void;
242
+ /**
243
+ * Unwraps all layers of slot/lazy indirection and returns the concrete value if available.
244
+ * @throws {MissingSlotValueError}
245
+ */
246
+ unwrap<T>(eventual: Eventual<T>): T;
247
+ /**
248
+ * Returns the snippet representing `item`.
249
+ *
250
+ * @param item The value to resolve
251
+ * @param schema Additional information about the item's data type
252
+ */
253
+ resolve(item: unknown, schema?: BaseData | UnknownData): ResolvedSnippet;
254
+ /**
255
+ * Equivalent to `snip(ctx.resolve(snippet.value, snippet.dataType).value, snippet.dataType, snippet.origin, snippet.possibleSideEffects)`.
256
+ */
257
+ resolveSnippet(snippet: Snippet): ResolvedSnippet;
258
+ resolveFunction(options: ResolveFunctionOptions): {
259
+ code: string;
260
+ returnType: BaseData;
261
+ };
262
+ withVaryingLocations<T>(locations: Record<string, number>, callback: () => T): T;
263
+ get varyingLocations(): Record<string, number> | undefined;
264
+ /**
265
+ * Temporarily renames the item.
266
+ * Useful for resolutions with slots,
267
+ * since functions with different slots should have different names,
268
+ * and all hold the same inner function that is being resolved multiple times.
269
+ * @param item the item to rename
270
+ * @param name the temporary name to assign to the item (if missing, just returns `callback()`)
271
+ */
272
+ withRenamed<T>(item: object, name: string | undefined, callback: () => T): T;
273
+ /**
274
+ * @param primer The basis for the unique identifier. Depending on the strategy, or
275
+ * the names already taken, this may be modified to ensure uniqueness.
276
+ * @param scope The scope in which to generate the identifier. 'global' means
277
+ * the identifier is meant to be unique across the entire program, while
278
+ * 'block' means it cannot shadow any existing identifiers visible from
279
+ * within the current block. After the block is popped, any identifiers
280
+ * defined within it are no longer visible.
281
+ * @returns an identifier that is unique within the given scope
282
+ */
283
+ makeUniqueIdentifier(primer: string | undefined, scope: 'global' | 'block'): string;
284
+ isIdentifierBanned(name: string): boolean;
285
+ /**
286
+ * @param name The name to check.
287
+ * @param scope The scope in which we want to place the identifier.
288
+ */
289
+ isIdentifierTaken(name: string, scope: 'global' | 'block'): boolean;
290
+ /**
291
+ * Makes sure the given identifier cannot be generated by {@link makeUniqueIdentifier}
292
+ * within the given scope.
293
+ * @param name The name to reserve
294
+ * @param scope See {@link makeUniqueIdentifier} for a description of the scope parameter.
295
+ */
296
+ reserveIdentifier(name: string, scope: 'global' | 'block'): void;
297
+ indent(): string;
298
+ dedent(): string;
299
+ /**
300
+ * Returns a version of `code` with one level of indentation less.
301
+ *
302
+ * @note If a line has no indentation, it will be kept as is, which
303
+ * can cause some lines to dedent and some to be left as they are.
304
+ */
305
+ getDedented(code: string): string;
306
+ pushBlockScope(): void;
307
+ popBlockScope(): void;
308
+ generateLog(op: SupportedLogOp, args: Snippet[]): Snippet;
309
+ getById(id: string): Snippet | null;
310
+ defineVariable(id: string, snippet: Snippet): void;
311
+ setBlockExternals(externals: Record<string, Snippet>): void;
312
+ clearBlockExternals(): void;
313
+ /**
314
+ * Types that are used in `return` statements are
315
+ * reported using this function, and used to infer
316
+ * the return type of the owning function.
317
+ */
318
+ reportReturnType(dataType: BaseData): void;
272
319
  }
273
320
  /**
274
321
  * Houses a method on the symbol '$resolve` that returns a
275
322
  * code string representing it, as opposed to offloading the
276
323
  * resolution to another mechanism.
277
324
  */
278
- interface SelfResolvable {
279
- [$internal]: unknown;
280
- [$resolve](ctx: ResolutionCtx): ResolvedSnippet;
281
- toString(): string;
325
+ export interface SelfResolvable {
326
+ [$internal]: unknown;
327
+ [$resolve](ctx: ResolutionCtx): ResolvedSnippet;
328
+ toString(): string;
282
329
  }
283
- interface GPUCallable<TArgs extends unknown[] = unknown[]> {
284
- [$gpuCallable]: {
285
- strictSignature?: {
286
- argTypes: (BaseData | BaseData[])[];
287
- returnType: BaseData;
288
- } | undefined;
289
- call(ctx: ResolutionCtx, args: MapValueToSnippet<TArgs>): Snippet;
290
- };
330
+ export declare function isSelfResolvable(value: unknown): value is SelfResolvable;
331
+ export interface WithGPUValue<T> {
332
+ readonly [$gpuValueOf]: T;
291
333
  }
292
- type WithCast<T = BaseData> = GPUCallable<[v?: Infer<T>]> & {
293
- readonly [$cast]: (v?: Infer<T>) => Infer<T>;
334
+ export interface WithOwnSnippet {
335
+ readonly [$ownSnippet]: Snippet;
336
+ }
337
+ export declare function getOwnSnippet(value: unknown): Snippet | undefined;
338
+ export interface GPUCallable<TArgs extends unknown[] = unknown[]> {
339
+ [$gpuCallable]: {
340
+ strictSignature?: {
341
+ argTypes: (BaseData | BaseData[])[];
342
+ returnType: BaseData;
343
+ } | undefined;
344
+ call(ctx: ResolutionCtx, args: MapValueToSnippet<TArgs>): Snippet;
345
+ };
346
+ }
347
+ export declare function isGPUCallable(value: unknown): value is GPUCallable;
348
+ export type WithCast<T = BaseData> = GPUCallable<[v?: Infer<T>]> & {
349
+ readonly [$cast]: (v?: Infer<T>) => Infer<T>;
294
350
  };
351
+ export declare function hasCast(value: unknown): value is WithCast;
295
352
  type AnyFn = (...args: never[]) => unknown;
296
- type DualFn<T extends AnyFn> = T & GPUCallable<Parameters<T>>;
297
- type BindableBufferUsage = 'uniform' | 'readonly' | 'mutable';
298
- //#endregion
299
- export { BindableBufferUsage, DualFn, FunctionArgument, FunctionScopeLayer, GPUCallable, ResolutionCtx, ResolvableObject, SelfResolvable, TgpuShaderStage, Wgsl, WithCast };
353
+ export type DualFn<T extends AnyFn> = T & GPUCallable<Parameters<T>>;
354
+ export declare function isKnownAtComptime(snippet: Snippet): boolean;
355
+ export declare function isWgsl(value: unknown): value is Wgsl;
356
+ export type BindableBufferUsage = 'uniform' | 'readonly' | 'mutable';
357
+ export type BufferUsage = 'uniform' | 'readonly' | 'mutable' | 'vertex';
358
+ export declare function isGPUBuffer(value: unknown): value is GPUBuffer;
359
+ export declare function isBuffer(value: unknown): value is TgpuBuffer<BaseData>;
360
+ export declare function isUsableAsVertex<T extends TgpuBuffer<BaseData>>(buffer: T): buffer is T & VertexFlag;
361
+ export declare function isUsableAsIndex<T extends TgpuBuffer<BaseData>>(buffer: T): buffer is T & IndexFlag;
362
+ export declare function isUsableAsUniform<T extends TgpuBuffer<BaseData>>(buffer: T): buffer is T & UniformFlag;
363
+ export declare function isUsableAsStorage<T>(value: T): value is T & StorageFlag;
364
+ export {};