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
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 {};