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,29 +1,26 @@
1
- import { $internal } from "../../shared/symbols.js";
2
- import { ResolvedSnippet } from "../../data/snippet.js";
3
- import { ShelllessRepository } from "../../tgsl/shellless.js";
4
- import { TgpuLazy, TgpuSlot } from "../slot/slotTypes.js";
5
-
6
- //#region src/core/resolve/namespace.d.ts
1
+ import type { ResolvedSnippet } from '../../data/snippet.ts';
2
+ import { $internal } from '../../shared/symbols.ts';
3
+ import { ShelllessRepository } from '../../tgsl/shellless.ts';
4
+ import type { TgpuLazy, TgpuSlot } from '../slot/slotTypes.ts';
7
5
  type SlotToValueMap = Map<TgpuSlot<unknown>, unknown>;
8
- interface NamespaceInternal {
9
- readonly takenGlobalIdentifiers: Set<string>;
10
- readonly shelllessRepo: ShelllessRepository;
11
- readonly strategy: 'random' | 'strict';
12
- memoizedResolves: WeakMap<object, {
13
- slotToValueMap: SlotToValueMap;
14
- result: ResolvedSnippet;
15
- }[]>;
16
- memoizedLazy: WeakMap<TgpuLazy<unknown>, {
17
- slotToValueMap: SlotToValueMap;
18
- result: unknown;
19
- }[]>;
6
+ export interface NamespaceInternal {
7
+ readonly takenGlobalIdentifiers: Set<string>;
8
+ readonly shelllessRepo: ShelllessRepository;
9
+ readonly strategy: 'random' | 'strict';
10
+ memoizedResolves: WeakMap<object, {
11
+ slotToValueMap: SlotToValueMap;
12
+ result: ResolvedSnippet;
13
+ }[]>;
14
+ memoizedLazy: WeakMap<TgpuLazy<unknown>, {
15
+ slotToValueMap: SlotToValueMap;
16
+ result: unknown;
17
+ }[]>;
20
18
  }
21
- interface Namespace {
22
- readonly [$internal]: NamespaceInternal;
19
+ export interface Namespace {
20
+ readonly [$internal]: NamespaceInternal;
23
21
  }
24
- interface NamespaceOptions {
25
- names?: 'random' | 'strict' | undefined;
22
+ export interface NamespaceOptions {
23
+ names?: 'random' | 'strict' | undefined;
26
24
  }
27
- declare function namespace(options?: NamespaceOptions): Namespace;
28
- //#endregion
29
- export { Namespace, namespace };
25
+ export declare function namespace(options?: NamespaceOptions): Namespace;
26
+ export {};
@@ -1,24 +1,19 @@
1
- import { $internal } from "../../shared/symbols.js";
2
1
  import { bannedTokens, builtins } from "../../nameUtils.js";
2
+ import { $internal } from "../../shared/symbols.js";
3
3
  import { ShelllessRepository } from "../../tgsl/shellless.js";
4
-
5
- //#region src/core/resolve/namespace.ts
6
- var NamespaceImpl = class {
7
- [$internal];
8
- constructor(strategy) {
9
- this[$internal] = {
10
- strategy,
11
- takenGlobalIdentifiers: new Set([...bannedTokens, ...builtins]),
12
- shelllessRepo: new ShelllessRepository(),
13
- memoizedResolves: /* @__PURE__ */ new WeakMap(),
14
- memoizedLazy: /* @__PURE__ */ new WeakMap()
15
- };
16
- }
17
- };
18
- function namespace(options) {
19
- const { names = "strict" } = options ?? {};
20
- return new NamespaceImpl(names);
4
+ class NamespaceImpl {
5
+ [$internal];
6
+ constructor(strategy) {
7
+ this[$internal] = {
8
+ strategy,
9
+ takenGlobalIdentifiers: new Set([...bannedTokens, ...builtins]),
10
+ shelllessRepo: new ShelllessRepository(),
11
+ memoizedResolves: new WeakMap(),
12
+ memoizedLazy: new WeakMap(),
13
+ };
14
+ }
15
+ }
16
+ export function namespace(options) {
17
+ const { names = 'strict' } = options ?? {};
18
+ return new NamespaceImpl(names);
21
19
  }
22
-
23
- //#endregion
24
- export { namespace };
@@ -0,0 +1,7 @@
1
+ import { $internal, $resolve } from '../../shared/symbols.ts';
2
+ export declare class ResolvableString {
3
+ #private;
4
+ [$internal]: boolean;
5
+ constructor(value: string);
6
+ [$resolve](): import("../../internal.ts").Snippet;
7
+ }
@@ -0,0 +1,13 @@
1
+ import { UnknownData } from "../../data/dataTypes.js";
2
+ import { snip } from "../../data/snippet.js";
3
+ import { $internal, $resolve } from "../../shared/symbols.js";
4
+ export class ResolvableString {
5
+ [$internal] = true;
6
+ #value;
7
+ constructor(value) {
8
+ this.#value = value;
9
+ }
10
+ [$resolve]() {
11
+ return snip(this.#value, UnknownData, 'runtime', true);
12
+ }
13
+ }
@@ -0,0 +1,10 @@
1
+ import { type AnyData } from '../../data/dataTypes.ts';
2
+ import type { ResolutionCtx } from '../../types.ts';
3
+ /**
4
+ * Resolves a WGSL data-type schema to a string.
5
+ * @param ctx - The resolution context.
6
+ * @param data - The data-type to resolve.
7
+ *
8
+ * @returns The resolved data-type string.
9
+ */
10
+ export declare function resolveData(ctx: ResolutionCtx, data: AnyData): string;
@@ -1,147 +1,188 @@
1
- import { $internal } from "../../shared/symbols.js";
2
- import { getName } from "../../shared/meta.js";
3
- import { isLooseData } from "../../data/dataTypes.js";
4
- import { assertExhaustive } from "../../shared/utilityTypes.js";
5
- import { formatToWGSLType } from "../../data/vertexFormatData.js";
6
1
  import { getAttributesString } from "../../data/attributes.js";
2
+ import { isLooseData } from "../../data/dataTypes.js";
7
3
  import { isWgslComparisonSampler, isWgslSampler } from "../../data/sampler.js";
8
- import { accessModeMap, isWgslStorageTexture, isWgslTexture } from "../../data/texture.js";
4
+ import { accessModeMap, isWgslStorageTexture, isWgslTexture, } from "../../data/texture.js";
5
+ import { formatToWGSLType } from "../../data/vertexFormatData.js";
6
+ import { getName } from "../../shared/meta.js";
7
+ import { $internal } from "../../shared/symbols.js";
8
+ import { assertExhaustive } from "../../shared/utilityTypes.js";
9
9
  import { isAttribute } from "../vertexLayout/connectAttributesToShader.js";
10
-
11
- //#region src/core/resolve/resolveData.ts
12
10
  /**
13
- * Schemas for which their `type` property directly
14
- * translates to the resulting WGSL code.
15
- */
11
+ * Schemas for which their `type` property directly
12
+ * translates to the resulting WGSL code.
13
+ */
16
14
  const identityTypes = [
17
- "bool",
18
- "f32",
19
- "f16",
20
- "i32",
21
- "u32",
22
- "vec2f",
23
- "vec3f",
24
- "vec4f",
25
- "vec2h",
26
- "vec3h",
27
- "vec4h",
28
- "vec2i",
29
- "vec3i",
30
- "vec4i",
31
- "vec2u",
32
- "vec3u",
33
- "vec4u",
34
- "vec2<bool>",
35
- "vec3<bool>",
36
- "vec4<bool>",
37
- "mat2x2f",
38
- "mat3x3f",
39
- "mat4x4f",
40
- "texture_external"
15
+ 'bool',
16
+ 'f32',
17
+ 'f16',
18
+ 'i32',
19
+ 'u32',
20
+ 'vec2f',
21
+ 'vec3f',
22
+ 'vec4f',
23
+ 'vec2h',
24
+ 'vec3h',
25
+ 'vec4h',
26
+ 'vec2i',
27
+ 'vec3i',
28
+ 'vec4i',
29
+ 'vec2u',
30
+ 'vec3u',
31
+ 'vec4u',
32
+ 'vec2<bool>',
33
+ 'vec3<bool>',
34
+ 'vec4<bool>',
35
+ 'mat2x2f',
36
+ 'mat3x3f',
37
+ 'mat4x4f',
38
+ 'texture_external',
41
39
  ];
42
40
  function isIdentityType(data) {
43
- return identityTypes.includes(data.type);
41
+ return identityTypes.includes(data.type);
44
42
  }
45
43
  /**
46
- * Resolves a single property of a struct.
47
- * @param ctx - The resolution context.
48
- * @param key - The key of the property.
49
- * @param property - The property itself.
50
- *
51
- * @returns The resolved property string.
52
- */
44
+ * Resolves a single property of a struct.
45
+ * @param ctx - The resolution context.
46
+ * @param key - The key of the property.
47
+ * @param property - The property itself.
48
+ *
49
+ * @returns The resolved property string.
50
+ */
53
51
  function resolveStructProperty(ctx, [key, property]) {
54
- return ` ${getAttributesString(property)}${key}: ${ctx.resolve(property).value},\n`;
52
+ return ` ${getAttributesString(property)}${key}: ${ctx.resolve(property).value},\n`;
55
53
  }
56
54
  /**
57
- * Resolves a struct and adds its declaration to the resolution context.
58
- * @param ctx - The resolution context.
59
- * @param struct - The struct to resolve.
60
- *
61
- * @returns The resolved struct name.
62
- */
55
+ * Resolves a struct and adds its declaration to the resolution context.
56
+ * @param ctx - The resolution context.
57
+ * @param struct - The struct to resolve.
58
+ *
59
+ * @returns The resolved struct name.
60
+ */
63
61
  function resolveStruct(ctx, struct) {
64
- if (struct[$internal].isAbstruct) throw new Error("Cannot resolve abstract struct types to WGSL.");
65
- const id = ctx.makeUniqueIdentifier(getName(struct), "global");
66
- ctx.addDeclaration(`\
62
+ if (struct[$internal].isAbstruct) {
63
+ throw new Error('Cannot resolve abstract struct types to WGSL.');
64
+ }
65
+ const id = ctx.makeUniqueIdentifier(getName(struct), 'global');
66
+ ctx.addDeclaration(`\
67
67
  struct ${id} {
68
- ${Object.entries(struct.propTypes).map((prop) => resolveStructProperty(ctx, prop)).join("")}\
69
- }`);
70
- return id;
68
+ ${Object.entries(struct.propTypes)
69
+ .map((prop) => resolveStructProperty(ctx, prop))
70
+ .join('')}\
71
+ }`, id);
72
+ return id;
71
73
  }
72
74
  /**
73
- * Resolves an unstruct (struct that does not align data by default) to its struct data counterpart.
74
- * @param ctx - The resolution context.
75
- * @param unstruct - The unstruct to resolve.
76
- *
77
- * @returns The resolved unstruct name.
78
- *
79
- * @example
80
- * ```ts
81
- * resolveUnstruct(ctx, {
82
- * uv: d.float16x2, // -> d.vec2f after resolution
83
- * color: d.snorm8x4, -> d.vec4f after resolution
84
- * });
85
- * ```
86
- */
75
+ * Resolves an unstruct (struct that does not align data by default) to its struct data counterpart.
76
+ * @param ctx - The resolution context.
77
+ * @param unstruct - The unstruct to resolve.
78
+ *
79
+ * @returns The resolved unstruct name.
80
+ *
81
+ * @example
82
+ * ```ts
83
+ * resolveUnstruct(ctx, {
84
+ * uv: d.float16x2, // -> d.vec2f after resolution
85
+ * color: d.snorm8x4, -> d.vec4f after resolution
86
+ * });
87
+ * ```
88
+ */
87
89
  function resolveUnstruct(ctx, unstruct) {
88
- const id = ctx.makeUniqueIdentifier(getName(unstruct), "global");
89
- ctx.addDeclaration(`\
90
+ const id = ctx.makeUniqueIdentifier(getName(unstruct), 'global');
91
+ ctx.addDeclaration(`\
90
92
  struct ${id} {
91
- ${Object.entries(unstruct.propTypes).map((prop) => isAttribute(prop[1]) ? resolveStructProperty(ctx, [prop[0], formatToWGSLType[prop[1].format]]) : resolveStructProperty(ctx, prop)).join("")}
92
- }`);
93
- return id;
93
+ ${Object.entries(unstruct.propTypes)
94
+ .map((prop) => isAttribute(prop[1])
95
+ ? resolveStructProperty(ctx, [prop[0], formatToWGSLType[prop[1].format]])
96
+ : resolveStructProperty(ctx, prop))
97
+ .join('')}
98
+ }`, id);
99
+ return id;
94
100
  }
95
101
  /**
96
- * Resolves an array.
97
- * @param ctx - The resolution context.
98
- * @param array - The array to resolve.
99
- *
100
- * @returns The resolved array name along with its element type and count (if not runtime-sized).
101
- *
102
- * @example
103
- * ```ts
104
- * resolveArray(ctx, d.arrayOf(d.u32, 0)); // 'array<u32>' (not a real pattern, a function is preferred)
105
- * resolveArray(ctx, d.arrayOf(d.u32, 5)); // 'array<u32, 5>'
106
- * ```
107
- */
102
+ * Resolves an array.
103
+ * @param ctx - The resolution context.
104
+ * @param array - The array to resolve.
105
+ *
106
+ * @returns The resolved array name along with its element type and count (if not runtime-sized).
107
+ *
108
+ * @example
109
+ * ```ts
110
+ * resolveArray(ctx, d.arrayOf(d.u32, 0)); // 'array<u32>' (not a real pattern, a function is preferred)
111
+ * resolveArray(ctx, d.arrayOf(d.u32, 5)); // 'array<u32, 5>'
112
+ * ```
113
+ */
108
114
  function resolveArray(ctx, array) {
109
- const element = ctx.resolve(array.elementType).value;
110
- return array.elementCount === 0 ? `array<${element}>` : `array<${element}, ${array.elementCount}>`;
115
+ const element = ctx.resolve(array.elementType).value;
116
+ return array.elementCount === 0
117
+ ? `array<${element}>`
118
+ : `array<${element}, ${array.elementCount}>`;
111
119
  }
112
120
  function resolveDisarray(ctx, disarray) {
113
- const element = ctx.resolve(isAttribute(disarray.elementType) ? formatToWGSLType[disarray.elementType.format] : disarray.elementType).value;
114
- return disarray.elementCount === 0 ? `array<${element}>` : `array<${element}, ${disarray.elementCount}>`;
121
+ const element = ctx.resolve(isAttribute(disarray.elementType)
122
+ ? formatToWGSLType[disarray.elementType.format]
123
+ : disarray.elementType).value;
124
+ return disarray.elementCount === 0
125
+ ? `array<${element}>`
126
+ : `array<${element}, ${disarray.elementCount}>`;
115
127
  }
116
128
  /**
117
- * Resolves a WGSL data-type schema to a string.
118
- * @param ctx - The resolution context.
119
- * @param data - The data-type to resolve.
120
- *
121
- * @returns The resolved data-type string.
122
- */
123
- function resolveData(ctx, data) {
124
- if (isLooseData(data)) {
125
- if (data.type === "unstruct") return resolveUnstruct(ctx, data);
126
- if (data.type === "disarray") return resolveDisarray(ctx, data);
127
- if (data.type === "loose-decorated") return ctx.resolve(isAttribute(data.inner) ? formatToWGSLType[data.inner.format] : data.inner).value;
128
- return ctx.resolve(formatToWGSLType[data.type]).value;
129
- }
130
- if (isIdentityType(data)) return data.type;
131
- if (data.type === "struct") return resolveStruct(ctx, data);
132
- if (data.type === "array") return resolveArray(ctx, data);
133
- if (data.type === "atomic") return `atomic<${resolveData(ctx, data.inner)}>`;
134
- if (data.type === "decorated") return ctx.resolve(data.inner).value;
135
- if (data.type === "ptr") {
136
- if (data.addressSpace === "storage") return `ptr<storage, ${ctx.resolve(data.inner).value}, ${data.access === "read-write" ? "read_write" : data.access}>`;
137
- return `ptr<${data.addressSpace}, ${ctx.resolve(data.inner).value}>`;
138
- }
139
- if (data.type === "abstractInt" || data.type === "abstractFloat" || data.type === "void" || data.type === "u16") throw new Error(`${data.type} has no representation in WGSL`);
140
- if (isWgslStorageTexture(data)) return `${data.type}<${data.format}, ${accessModeMap[data.access]}>`;
141
- if (isWgslTexture(data)) return data.type.startsWith("texture_depth") ? data.type : `${data.type}<${data.sampleType.type}>`;
142
- if (isWgslComparisonSampler(data) || isWgslSampler(data)) return data.type;
143
- assertExhaustive(data, "resolveData");
129
+ * Resolves a WGSL data-type schema to a string.
130
+ * @param ctx - The resolution context.
131
+ * @param data - The data-type to resolve.
132
+ *
133
+ * @returns The resolved data-type string.
134
+ */
135
+ export function resolveData(ctx, data) {
136
+ if (isLooseData(data)) {
137
+ if (data.type === 'unstruct') {
138
+ return resolveUnstruct(ctx, data);
139
+ }
140
+ if (data.type === 'disarray') {
141
+ return resolveDisarray(ctx, data);
142
+ }
143
+ if (data.type === 'loose-decorated') {
144
+ return ctx.resolve(isAttribute(data.inner) ? formatToWGSLType[data.inner.format] : data.inner)
145
+ .value;
146
+ }
147
+ return ctx.resolve(formatToWGSLType[data.type]).value;
148
+ }
149
+ if (isIdentityType(data)) {
150
+ return data.type;
151
+ }
152
+ if (data.type === 'struct') {
153
+ return resolveStruct(ctx, data);
154
+ }
155
+ if (data.type === 'array') {
156
+ return resolveArray(ctx, data);
157
+ }
158
+ if (data.type === 'atomic') {
159
+ return `atomic<${resolveData(ctx, data.inner)}>`;
160
+ }
161
+ if (data.type === 'decorated') {
162
+ return ctx.resolve(data.inner).value;
163
+ }
164
+ if (data.type === 'ptr') {
165
+ if (data.addressSpace === 'storage') {
166
+ return `ptr<storage, ${ctx.resolve(data.inner).value}, ${data.access === 'read-write' ? 'read_write' : data.access}>`;
167
+ }
168
+ return `ptr<${data.addressSpace}, ${ctx.resolve(data.inner).value}>`;
169
+ }
170
+ if (data.type === 'abstractInt' ||
171
+ data.type === 'abstractFloat' ||
172
+ data.type === 'void' ||
173
+ data.type === 'u16') {
174
+ throw new Error(`${data.type} has no representation in WGSL`);
175
+ }
176
+ if (isWgslStorageTexture(data)) {
177
+ return `${data.type}<${data.format}, ${accessModeMap[data.access]}>`;
178
+ }
179
+ if (isWgslTexture(data)) {
180
+ return data.type.startsWith('texture_depth')
181
+ ? data.type
182
+ : `${data.type}<${data.sampleType.type}>`;
183
+ }
184
+ if (isWgslComparisonSampler(data) || isWgslSampler(data)) {
185
+ return data.type;
186
+ }
187
+ assertExhaustive(data, 'resolveData');
144
188
  }
145
-
146
- //#endregion
147
- export { resolveData };
@@ -0,0 +1,8 @@
1
+ import { type Snippet } from '../../data/snippet.ts';
2
+ type ValueOrArray<T> = T | readonly T[];
3
+ /**
4
+ * "The reverse of snipping"
5
+ * Injects resolved snippets into a template string.
6
+ */
7
+ export declare function stitch(strings: TemplateStringsArray, ...snippets: ValueOrArray<Snippet | string | number | undefined>[]): string;
8
+ export {};
@@ -1,25 +1,27 @@
1
1
  import { isSnippet } from "../../data/snippet.js";
2
2
  import { getResolutionCtx } from "../../execMode.js";
3
-
4
- //#region src/core/resolve/stitch.ts
5
3
  /**
6
- * "The reverse of snipping"
7
- * Injects resolved snippets into a template string.
8
- */
9
- function stitch(strings, ...snippets) {
10
- const ctx = getResolutionCtx();
11
- function resolveSnippet(maybeSnippet) {
12
- return isSnippet(maybeSnippet) ? ctx.resolve(maybeSnippet.value, maybeSnippet.dataType).value : maybeSnippet;
13
- }
14
- let result = "";
15
- for (let i = 0; i < strings.length; ++i) {
16
- result += strings[i];
17
- const snippet = snippets[i];
18
- if (Array.isArray(snippet)) result += snippet.filter((s) => s !== void 0).map(resolveSnippet).join(", ");
19
- else if (snippet) result += resolveSnippet(snippet);
20
- }
21
- return result;
4
+ * "The reverse of snipping"
5
+ * Injects resolved snippets into a template string.
6
+ */
7
+ export function stitch(strings, ...snippets) {
8
+ const ctx = getResolutionCtx();
9
+ function resolveSnippet(maybeSnippet) {
10
+ return isSnippet(maybeSnippet) ? ctx.resolveSnippet(maybeSnippet).value : maybeSnippet;
11
+ }
12
+ let result = '';
13
+ for (let i = 0; i < strings.length; ++i) {
14
+ result += strings[i];
15
+ const snippet = snippets[i];
16
+ if (Array.isArray(snippet)) {
17
+ result += snippet
18
+ .filter((s) => s !== undefined)
19
+ .map(resolveSnippet)
20
+ .join(', ');
21
+ }
22
+ else if (snippet) {
23
+ result += resolveSnippet(snippet);
24
+ }
25
+ }
26
+ return result;
22
27
  }
23
-
24
- //#endregion
25
- export { stitch };
@@ -1,51 +1,55 @@
1
- import { ShaderGenerator } from "../../tgsl/shaderGenerator.js";
2
- import { Configurable } from "../root/rootTypes.js";
3
- import { WgslEnableExtension } from "../../wgslExtensions.js";
4
- import { ResolvableObject, Wgsl } from "../../types.js";
5
- import { Namespace } from "./namespace.js";
6
- import { ResolutionResult } from "../../resolutionCtx.js";
7
-
8
- //#region src/core/resolve/tgpuResolve.d.ts
9
- interface TgpuResolveOptions {
10
- /**
11
- * The naming strategy used for generating identifiers for resolved externals and their dependencies.
12
- *
13
- * ## Namespaces
14
- * Each call to `tgpu.resolve` uses it's own namespace by default, but a
15
- * custom namespace can be created with `tgpu.namespace` and passed in.
16
- *
17
- * This allows tracking the behavior of the resolution process, as well as
18
- * sharing state between calls to `tgpu.resolve`.
19
- *
20
- * @default 'random'
21
- */
22
- names?: 'strict' | 'random' | Namespace | undefined;
23
- /**
24
- * A function to configure the resolution context.
25
- */
26
- config?: ((cfg: Configurable) => Configurable) | undefined;
27
- /**
28
- * List of WGSL shader extensions to enable.
29
- */
30
- enableExtensions?: WgslEnableExtension[] | undefined;
31
- /**
32
- * **NOTE: This is an unstable API and may change in the future.**
33
- *
34
- * A custom shader code generator, used when resolving TypeGPU functions.
35
- * If not provided, the default WGSL generator will be used.
36
- */
37
- unstable_shaderGenerator?: ShaderGenerator | undefined;
1
+ import { type ResolutionResult } from '../../resolutionCtx.ts';
2
+ import type { ShaderGenerator } from '../../tgsl/shaderGenerator.ts';
3
+ import { type ResolvableObject, type Wgsl } from '../../types.ts';
4
+ import type { WgslEnableExtension } from '../../wgslExtensions.ts';
5
+ import type { Configurable } from '../root/rootTypes.ts';
6
+ import { type Namespace } from './namespace.ts';
7
+ export interface TgpuResolveOptions {
8
+ /**
9
+ * The naming strategy used for generating identifiers for resolved externals and their dependencies.
10
+ *
11
+ * ## Namespaces
12
+ * Each call to `tgpu.resolve` uses its own namespace by default, but a
13
+ * custom namespace can be created with `tgpu['~unstable'].namespace` and passed in.
14
+ *
15
+ * This allows tracking the behavior of the resolution process, as well as
16
+ * sharing state between calls to `tgpu.resolve`.
17
+ *
18
+ * @default 'strict'
19
+ */
20
+ names?: 'strict' | 'random' | Namespace | undefined;
21
+ /**
22
+ * When set to true, the resulting shaders will be stripped from all unnecessary whitespace.
23
+ *
24
+ * @default false
25
+ */
26
+ unstable_minify?: boolean;
27
+ /**
28
+ * A function to configure the resolution context.
29
+ */
30
+ config?: ((cfg: Configurable) => Configurable) | undefined;
31
+ /**
32
+ * List of WGSL shader extensions to enable.
33
+ */
34
+ enableExtensions?: WgslEnableExtension[] | undefined;
35
+ /**
36
+ * **NOTE: This is an unstable API and may change in the future.**
37
+ *
38
+ * A custom shader code generator, used when resolving TypeGPU functions.
39
+ * If not provided, the default WGSL generator will be used.
40
+ */
41
+ unstable_shaderGenerator?: ShaderGenerator | undefined;
38
42
  }
39
- interface TgpuExtendedResolveOptions extends TgpuResolveOptions {
40
- /**
41
- * Map of external names to their resolvable values.
42
- */
43
- externals: Record<string, Wgsl | object>;
44
- /**
45
- * The code template to use for the resolution. All external names will be replaced with their resolved values.
46
- * @default ''
47
- */
48
- template?: string | undefined;
43
+ export interface TgpuExtendedResolveOptions extends TgpuResolveOptions {
44
+ /**
45
+ * Map of external names to their resolvable values.
46
+ */
47
+ externals: Record<string, Wgsl | object>;
48
+ /**
49
+ * The code template to use for the resolution. All external names will be replaced with their resolved values.
50
+ * @default ''
51
+ */
52
+ template?: string | undefined;
49
53
  }
50
54
  /**
51
55
  * Resolves a template with external values. Each external that is used will get resolved to a code string and replaced in the template.
@@ -79,7 +83,7 @@ interface TgpuExtendedResolveOptions extends TgpuResolveOptions {
79
83
  * // }
80
84
  * ```
81
85
  */
82
- declare function resolveWithContext(options: TgpuExtendedResolveOptions): ResolutionResult;
86
+ export declare function resolveWithContext(options: TgpuExtendedResolveOptions): ResolutionResult;
83
87
  /**
84
88
  * Resolves given TypeGPU resources.
85
89
  * Any dependencies of the externals will also be resolved and included in the output.
@@ -105,7 +109,7 @@ declare function resolveWithContext(options: TgpuExtendedResolveOptions): Resolu
105
109
  * // }
106
110
  * ```
107
111
  */
108
- declare function resolveWithContext(items: ResolvableObject[], options?: TgpuResolveOptions): ResolutionResult;
112
+ export declare function resolveWithContext(items: ResolvableObject[], options?: TgpuResolveOptions): ResolutionResult;
109
113
  /**
110
114
  * A shorthand for calling `tgpu.resolveWithContext(...).code`.
111
115
  *
@@ -147,7 +151,5 @@ declare function resolveWithContext(items: ResolvableObject[], options?: TgpuRes
147
151
  * // }
148
152
  * ```
149
153
  */
150
- declare function resolve(options: TgpuExtendedResolveOptions): string;
151
- declare function resolve(items: ResolvableObject[], options?: TgpuResolveOptions): string;
152
- //#endregion
153
- export { resolve, resolveWithContext };
154
+ export declare function resolve(options: TgpuExtendedResolveOptions): string;
155
+ export declare function resolve(items: ResolvableObject[], options?: TgpuResolveOptions): string;