typegpu 0.11.8 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. package/builtin.d.ts +51 -53
  2. package/builtin.js +30 -34
  3. package/common/fullScreenTriangle.d.ts +2 -10
  4. package/common/fullScreenTriangle.js +20 -28
  5. package/common/index.d.ts +2 -9
  6. package/common/index.js +3 -12
  7. package/common/writeSoA.d.ts +11 -12
  8. package/common/writeSoA.js +88 -76
  9. package/core/buffer/buffer.d.ts +79 -62
  10. package/core/buffer/buffer.js +279 -205
  11. package/core/buffer/bufferBinding.d.ts +71 -0
  12. package/core/buffer/bufferBinding.js +154 -0
  13. package/core/buffer/bufferUsage.d.ts +14 -45
  14. package/core/buffer/bufferUsage.js +1 -171
  15. package/core/buffer/laidOutBuffer.d.ts +25 -0
  16. package/core/buffer/laidOutBuffer.js +55 -0
  17. package/core/commandEncoder/attachments.d.ts +125 -0
  18. package/core/commandEncoder/attachments.js +29 -0
  19. package/core/commandEncoder/commandEncoder.d.ts +53 -0
  20. package/core/commandEncoder/commandEncoder.js +56 -0
  21. package/core/commandEncoder/computePass.d.ts +58 -0
  22. package/core/commandEncoder/computePass.js +63 -0
  23. package/core/commandEncoder/renderPass.d.ts +121 -0
  24. package/core/commandEncoder/renderPass.js +196 -0
  25. package/core/constant/tgpuConstant.d.ts +26 -26
  26. package/core/constant/tgpuConstant.js +76 -65
  27. package/core/declare/tgpuDeclare.d.ts +3 -6
  28. package/core/declare/tgpuDeclare.js +37 -38
  29. package/core/function/autoIO.d.ts +61 -33
  30. package/core/function/autoIO.js +68 -73
  31. package/core/function/comptime.d.ts +11 -13
  32. package/core/function/comptime.js +60 -52
  33. package/core/function/createCallableSchema.d.ts +16 -0
  34. package/core/function/createCallableSchema.js +50 -40
  35. package/core/function/dualImpl.d.ts +44 -0
  36. package/core/function/dualImpl.js +71 -50
  37. package/core/function/entryInputRouter.d.ts +26 -0
  38. package/core/function/entryInputRouter.js +31 -33
  39. package/core/function/extractArgs.d.ts +38 -0
  40. package/core/function/extractArgs.js +202 -200
  41. package/core/function/fnCore.d.ts +44 -0
  42. package/core/function/fnCore.js +148 -92
  43. package/core/function/fnTypes.d.ts +31 -29
  44. package/core/function/fnTypes.js +1 -0
  45. package/core/function/ioSchema.d.ts +12 -10
  46. package/core/function/ioSchema.js +65 -47
  47. package/core/function/shelllessImpl.d.ts +9 -12
  48. package/core/function/shelllessImpl.js +18 -20
  49. package/core/function/templateUtils.d.ts +2 -0
  50. package/core/function/templateUtils.js +9 -8
  51. package/core/function/tgpuComputeFn.d.ts +26 -28
  52. package/core/function/tgpuComputeFn.js +47 -48
  53. package/core/function/tgpuFn.d.ts +34 -37
  54. package/core/function/tgpuFn.js +179 -153
  55. package/core/function/tgpuFragmentFn.d.ts +52 -53
  56. package/core/function/tgpuFragmentFn.js +63 -56
  57. package/core/function/tgpuVertexFn.d.ts +36 -39
  58. package/core/function/tgpuVertexFn.js +56 -53
  59. package/core/pipeline/computePipeline.d.ts +141 -53
  60. package/core/pipeline/computePipeline.js +291 -225
  61. package/core/pipeline/connectAttachmentToShader.d.ts +4 -0
  62. package/core/pipeline/connectAttachmentToShader.js +25 -22
  63. package/core/pipeline/connectTargetsToShader.d.ts +3 -0
  64. package/core/pipeline/connectTargetsToShader.js +29 -27
  65. package/core/pipeline/drawState.d.ts +52 -0
  66. package/core/pipeline/drawState.js +225 -0
  67. package/core/pipeline/limitsOverflow.d.ts +2 -0
  68. package/core/pipeline/limitsOverflow.js +13 -10
  69. package/core/pipeline/performanceTracker.d.ts +14 -0
  70. package/core/pipeline/performanceTracker.js +34 -0
  71. package/core/pipeline/pipelineUtils.d.ts +18 -0
  72. package/core/pipeline/pipelineUtils.js +54 -25
  73. package/core/pipeline/priors.d.ts +1 -0
  74. package/core/pipeline/priors.js +12 -0
  75. package/core/pipeline/renderPipeline.d.ts +246 -261
  76. package/core/pipeline/renderPipeline.js +487 -480
  77. package/core/pipeline/timeable.d.ts +28 -18
  78. package/core/pipeline/timeable.js +90 -52
  79. package/core/pipeline/typeGuards.d.ts +17 -0
  80. package/core/pipeline/typeGuards.js +52 -22
  81. package/core/querySet/querySet.d.ts +26 -21
  82. package/core/querySet/querySet.js +127 -103
  83. package/core/rawCodeSnippet/tgpuRawCodeSnippet.d.ts +13 -18
  84. package/core/rawCodeSnippet/tgpuRawCodeSnippet.js +90 -93
  85. package/core/resolve/externals.d.ts +25 -7
  86. package/core/resolve/externals.js +79 -62
  87. package/core/resolve/namespace.d.ts +22 -25
  88. package/core/resolve/namespace.js +16 -21
  89. package/core/resolve/resolvableString.d.ts +7 -0
  90. package/core/resolve/resolvableString.js +13 -0
  91. package/core/resolve/resolveData.d.ts +10 -0
  92. package/core/resolve/resolveData.js +162 -121
  93. package/core/resolve/stitch.d.ts +8 -0
  94. package/core/resolve/stitch.js +23 -21
  95. package/core/resolve/tgpuResolve.d.ts +55 -53
  96. package/core/resolve/tgpuResolve.js +106 -55
  97. package/core/root/configurableImpl.d.ts +10 -0
  98. package/core/root/configurableImpl.js +17 -19
  99. package/core/root/init.d.ts +76 -38
  100. package/core/root/init.js +346 -454
  101. package/core/root/rootTypes.d.ts +461 -627
  102. package/core/root/rootTypes.js +1 -0
  103. package/core/sampler/sampler.d.ts +50 -31
  104. package/core/sampler/sampler.js +120 -113
  105. package/core/simulate/tgpuSimulate.d.ts +9 -12
  106. package/core/simulate/tgpuSimulate.js +68 -71
  107. package/core/slot/accessor.d.ts +36 -13
  108. package/core/slot/accessor.js +138 -91
  109. package/core/slot/internalSlots.d.ts +2 -0
  110. package/core/slot/internalSlots.js +1 -6
  111. package/core/slot/lazy.d.ts +2 -6
  112. package/core/slot/lazy.js +71 -39
  113. package/core/slot/slot.d.ts +2 -6
  114. package/core/slot/slot.js +45 -38
  115. package/core/slot/slotTypes.d.ts +78 -80
  116. package/core/slot/slotTypes.js +11 -16
  117. package/core/texture/externalTexture.d.ts +20 -11
  118. package/core/texture/externalTexture.js +46 -46
  119. package/core/texture/texture.d.ts +152 -97
  120. package/core/texture/texture.js +407 -314
  121. package/core/texture/textureFormats.d.ts +42 -23
  122. package/core/texture/textureFormats.js +104 -75
  123. package/core/texture/textureProps.d.ts +7 -10
  124. package/core/texture/textureProps.js +1 -0
  125. package/core/texture/textureUtils.d.ts +8 -0
  126. package/core/texture/textureUtils.js +185 -179
  127. package/core/texture/usageExtension.d.ts +21 -18
  128. package/core/texture/usageExtension.js +13 -17
  129. package/core/unroll/tgpuUnroll.d.ts +20 -19
  130. package/core/unroll/tgpuUnroll.js +82 -91
  131. package/core/valueProxyUtils.d.ts +3 -0
  132. package/core/valueProxyUtils.js +52 -41
  133. package/core/variable/tgpuVariable.d.ts +26 -27
  134. package/core/variable/tgpuVariable.js +93 -96
  135. package/core/vertexLayout/connectAttributesToShader.d.ts +9 -0
  136. package/core/vertexLayout/connectAttributesToShader.js +61 -56
  137. package/core/vertexLayout/vertexAttribute.d.ts +21 -17
  138. package/core/vertexLayout/vertexAttribute.js +1 -0
  139. package/core/vertexLayout/vertexLayout.d.ts +24 -18
  140. package/core/vertexLayout/vertexLayout.js +130 -99
  141. package/core/whitespaces.d.ts +2 -0
  142. package/core/whitespaces.js +16 -0
  143. package/data/alignIO.d.ts +7 -0
  144. package/data/alignIO.js +13 -13
  145. package/data/alignmentOf.d.ts +5 -8
  146. package/data/alignmentOf.js +90 -75
  147. package/data/array.d.ts +6 -9
  148. package/data/array.js +48 -40
  149. package/data/atomic.d.ts +2 -7
  150. package/data/atomic.js +26 -23
  151. package/data/attributes.d.ts +19 -21
  152. package/data/attributes.js +192 -132
  153. package/data/autoStruct.d.ts +36 -3
  154. package/data/autoStruct.js +84 -81
  155. package/data/compiledIO.d.ts +5 -0
  156. package/data/compiledIO.js +231 -214
  157. package/data/dataIO.d.ts +13 -11
  158. package/data/dataIO.js +643 -589
  159. package/data/dataTypes.d.ts +83 -65
  160. package/data/dataTypes.js +66 -68
  161. package/data/deepEqual.d.ts +2 -7
  162. package/data/deepEqual.js +80 -55
  163. package/data/disarray.d.ts +6 -10
  164. package/data/disarray.js +52 -46
  165. package/data/float16Conversion.d.ts +4 -0
  166. package/data/float16Conversion.js +7 -0
  167. package/data/getLongestContiguousPrefix.d.ts +4 -8
  168. package/data/getLongestContiguousPrefix.js +6 -11
  169. package/data/index.d.ts +30 -31
  170. package/data/index.js +39 -172
  171. package/data/instanceToSchema.d.ts +24 -27
  172. package/data/instanceToSchema.js +1 -0
  173. package/data/isContiguous.d.ts +4 -8
  174. package/data/isContiguous.js +6 -11
  175. package/data/matrix.d.ts +21 -21
  176. package/data/matrix.js +513 -505
  177. package/data/numberOps.d.ts +6 -0
  178. package/data/numberOps.js +26 -20
  179. package/data/numeric.d.ts +21 -12
  180. package/data/numeric.js +287 -192
  181. package/data/offsetUtils.d.ts +9 -13
  182. package/data/offsetUtils.js +204 -144
  183. package/data/offsets.d.ts +8 -0
  184. package/data/offsets.js +33 -33
  185. package/data/partialIO.d.ts +13 -8
  186. package/data/partialIO.js +124 -113
  187. package/data/ptr.d.ts +12 -12
  188. package/data/ptr.js +42 -44
  189. package/data/ref.d.ts +40 -27
  190. package/data/ref.js +125 -95
  191. package/data/sampler.d.ts +99 -101
  192. package/data/sampler.js +17 -21
  193. package/data/schemaCallWrapper.d.ts +19 -0
  194. package/data/schemaCallWrapper.js +31 -26
  195. package/data/schemaMemoryLayout.d.ts +8 -0
  196. package/data/schemaMemoryLayout.js +213 -185
  197. package/data/sizeOf.d.ts +4 -8
  198. package/data/sizeOf.js +6 -11
  199. package/data/snippet.d.ts +96 -20
  200. package/data/snippet.js +75 -86
  201. package/data/struct.d.ts +4 -7
  202. package/data/struct.js +51 -39
  203. package/data/texture.d.ts +253 -250
  204. package/data/texture.js +238 -200
  205. package/data/unstruct.d.ts +2 -7
  206. package/data/unstruct.js +43 -37
  207. package/data/vector.d.ts +33 -21
  208. package/data/vector.js +234 -221
  209. package/data/vectorImpl.d.ts +231 -0
  210. package/data/vectorImpl.js +563 -515
  211. package/data/vectorOps.d.ts +63 -0
  212. package/data/vectorOps.js +642 -630
  213. package/data/vertexFormatData.d.ts +181 -184
  214. package/data/vertexFormatData.js +104 -106
  215. package/data/wgslTypes.d.ts +665 -600
  216. package/data/wgslTypes.js +220 -198
  217. package/errors.d.ts +50 -24
  218. package/errors.js +146 -120
  219. package/execMode.d.ts +16 -0
  220. package/execMode.js +47 -40
  221. package/extension.d.ts +13 -8
  222. package/extension.js +10 -16
  223. package/getGPUValue.d.ts +1 -0
  224. package/getGPUValue.js +2 -7
  225. package/index.d.ts +28 -68
  226. package/index.js +8 -28
  227. package/indexNamedExports.d.ts +69 -42
  228. package/indexNamedExports.js +25 -0
  229. package/internal.d.ts +16 -0
  230. package/internal.js +12 -0
  231. package/mathUtils.d.ts +5 -0
  232. package/mathUtils.js +7 -11
  233. package/memo.d.ts +11 -0
  234. package/memo.js +20 -22
  235. package/minify.d.ts +5 -0
  236. package/minify.js +93 -0
  237. package/nameUtils.d.ts +29 -0
  238. package/nameUtils.js +428 -398
  239. package/package.json +9 -3
  240. package/resolutionCtx.d.ts +162 -22
  241. package/resolutionCtx.js +911 -624
  242. package/serial/registry.d.ts +15 -0
  243. package/serial/registry.js +106 -0
  244. package/serial/restore.d.ts +49 -0
  245. package/serial/restore.js +68 -0
  246. package/serial/schema.d.ts +58 -0
  247. package/serial/schema.js +209 -0
  248. package/serial/types.d.ts +5 -0
  249. package/serial/types.js +1 -0
  250. package/shared/env.d.ts +9 -0
  251. package/shared/env.js +9 -12
  252. package/shared/generators.d.ts +4 -0
  253. package/shared/generators.js +10 -12
  254. package/shared/meta.d.ts +29 -14
  255. package/shared/meta.js +71 -55
  256. package/shared/normalizeMetadata.d.ts +32 -27
  257. package/shared/normalizeMetadata.js +23 -36
  258. package/shared/repr.d.ts +73 -55
  259. package/shared/repr.js +1 -0
  260. package/shared/soul.d.ts +17 -0
  261. package/shared/soul.js +1 -0
  262. package/shared/stringify.d.ts +2 -0
  263. package/shared/stringify.js +29 -20
  264. package/shared/symbols.d.ts +26 -20
  265. package/shared/symbols.js +79 -79
  266. package/shared/tseynit.d.ts +2 -0
  267. package/shared/tseynit.js +160 -75
  268. package/shared/utilityTypes.d.ts +30 -14
  269. package/shared/utilityTypes.js +2 -6
  270. package/shared/vertexFormat.d.ts +41 -43
  271. package/shared/vertexFormat.js +59 -62
  272. package/std/array.d.ts +2 -7
  273. package/std/array.js +18 -23
  274. package/std/atomic.d.ts +14 -18
  275. package/std/atomic.js +96 -95
  276. package/std/bitcast.d.ts +193 -10
  277. package/std/bitcast.js +309 -39
  278. package/std/boolean.d.ts +19 -33
  279. package/std/boolean.js +296 -288
  280. package/std/copy.d.ts +2 -7
  281. package/std/copy.js +27 -24
  282. package/std/derivative.d.ts +11 -15
  283. package/std/derivative.js +56 -79
  284. package/std/discard.d.ts +1 -6
  285. package/std/discard.js +7 -14
  286. package/std/environment.d.ts +19 -14
  287. package/std/environment.js +71 -51
  288. package/std/extensions.d.ts +2 -8
  289. package/std/extensions.js +10 -11
  290. package/std/index.d.ts +20 -24
  291. package/std/index.js +32 -187
  292. package/std/matrix.d.ts +6 -12
  293. package/std/matrix.js +60 -69
  294. package/std/numeric.d.ts +143 -146
  295. package/std/numeric.js +858 -749
  296. package/std/operators.d.ts +19 -27
  297. package/std/operators.js +227 -193
  298. package/std/packing.d.ts +5 -11
  299. package/std/packing.js +67 -75
  300. package/std/range.d.ts +6 -11
  301. package/std/range.js +48 -36
  302. package/std/subgroup.d.ts +33 -37
  303. package/std/subgroup.js +180 -217
  304. package/std/texture.d.ts +70 -38
  305. package/std/texture.js +176 -172
  306. package/taskQueue.d.ts +6 -0
  307. package/taskQueue.js +30 -0
  308. package/tgpu.d.ts +16 -0
  309. package/tgpu.js +17 -44
  310. package/tgpuBindGroupLayout.d.ts +132 -152
  311. package/tgpuBindGroupLayout.js +346 -268
  312. package/tgpuLogger.d.ts +34 -0
  313. package/tgpuLogger.js +63 -0
  314. package/tgpuUnstable.d.ts +16 -22
  315. package/tgpuUnstable.js +13 -35
  316. package/tgsl/accessIndex.d.ts +2 -0
  317. package/tgsl/accessIndex.js +76 -33
  318. package/tgsl/accessProp.d.ts +2 -0
  319. package/tgsl/accessProp.js +142 -100
  320. package/tgsl/accessStructProp.d.ts +5 -0
  321. package/tgsl/accessStructProp.js +18 -0
  322. package/tgsl/consoleLog/deserializers.d.ts +13 -0
  323. package/tgsl/consoleLog/deserializers.js +119 -103
  324. package/tgsl/consoleLog/logGenerator.d.ts +21 -0
  325. package/tgsl/consoleLog/logGenerator.js +85 -80
  326. package/tgsl/consoleLog/serializers.d.ts +21 -0
  327. package/tgsl/consoleLog/serializers.js +119 -100
  328. package/tgsl/consoleLog/types.d.ts +40 -39
  329. package/tgsl/consoleLog/types.js +1 -0
  330. package/tgsl/conversion.d.ts +33 -0
  331. package/tgsl/conversion.js +272 -193
  332. package/tgsl/forOfUtils.d.ts +15 -0
  333. package/tgsl/forOfUtils.js +85 -70
  334. package/tgsl/generationHelpers.d.ts +22 -39
  335. package/tgsl/generationHelpers.js +85 -58
  336. package/tgsl/infixDispatch.d.ts +70 -0
  337. package/tgsl/infixDispatch.js +48 -46
  338. package/tgsl/jsPolyfills.d.ts +16 -19
  339. package/tgsl/jsPolyfills.js +44 -42
  340. package/tgsl/makeDereferenceable.d.ts +48 -0
  341. package/tgsl/makeDereferenceable.js +86 -0
  342. package/tgsl/makeResolvable.d.ts +22 -0
  343. package/tgsl/makeResolvable.js +33 -0
  344. package/tgsl/shaderGenerator.d.ts +77 -17
  345. package/tgsl/shaderGenerator.js +1 -0
  346. package/tgsl/shellless.d.ts +6 -9
  347. package/tgsl/shellless.js +73 -43
  348. package/tgsl/wgslGenerator.d.ts +66 -59
  349. package/tgsl/wgslGenerator.js +1344 -747
  350. package/types.d.ts +287 -221
  351. package/types.js +61 -44
  352. package/unwrapper.d.ts +31 -26
  353. package/unwrapper.js +1 -0
  354. package/wgslExtensions.d.ts +3 -5
  355. package/wgslExtensions.js +12 -16
  356. package/_virtual/rolldown_runtime.js +0 -13
  357. package/core/buffer/bufferShorthand.d.ts +0 -50
  358. package/core/buffer/bufferShorthand.js +0 -55
  359. package/core/pipeline/applyPipelineState.js +0 -37
  360. package/package.js +0 -5
  361. package/tgsl/shaderGenerator_members.d.ts +0 -33
  362. package/tgsl/shaderGenerator_members.js +0 -12
@@ -1,70 +1,81 @@
1
- import { $gpuValueOf, $internal, $ownSnippet, $resolve } from "../../shared/symbols.js";
2
- import { getName, setName } from "../../shared/meta.js";
3
1
  import { isData } from "../../data/dataTypes.js";
4
2
  import { snip } from "../../data/snippet.js";
5
- import { inCodegenMode } from "../../execMode.js";
6
- import { valueProxyHandler } from "../valueProxyUtils.js";
7
-
8
- //#region src/core/constant/tgpuConstant.ts
9
- function constant(dataType, value) {
10
- if (!isData(dataType)) {
11
- if (!Array.isArray(value)) throw new Error(`Expected an array value for a partially-applied array schema, but received: ${typeof value}.`);
12
- return new TgpuConstImpl(dataType(value.length), value);
13
- }
14
- return new TgpuConstImpl(dataType, value);
3
+ import {} from "../../data/wgslTypes.js";
4
+ import { makeDereferenceable } from "../../tgsl/makeDereferenceable.js";
5
+ import { makeResolvable } from "../../tgsl/makeResolvable.js";
6
+ import { getName, setName } from "../../shared/meta.js";
7
+ import { $gpuValueOf, $internal, $soul } from "../../shared/symbols.js";
8
+ export function constant(dataType, value) {
9
+ if (!isData(dataType)) {
10
+ if (!Array.isArray(value)) {
11
+ throw new Error(`Expected an array value for a partially-applied array schema, but received: ${typeof value}.`);
12
+ }
13
+ return new TgpuConstImpl(dataType(value.length), value);
14
+ }
15
+ return new TgpuConstImpl(dataType, value);
15
16
  }
17
+ // --------------
18
+ // Implementation
19
+ // --------------
16
20
  function deepFreeze(object) {
17
- const propNames = Reflect.ownKeys(object);
18
- for (const name of propNames) {
19
- const value = object[name];
20
- if (value && typeof value === "object" || typeof value === "function") deepFreeze(value);
21
- }
22
- return Object.freeze(object);
21
+ // Retrieve the property names defined on object
22
+ const propNames = Reflect.ownKeys(object);
23
+ // Freeze properties before freezing self
24
+ for (const name of propNames) {
25
+ // oxlint-disable-next-line typescript/no-explicit-any -- chill TypeScript
26
+ const value = object[name];
27
+ if ((value && typeof value === 'object') || typeof value === 'function') {
28
+ deepFreeze(value);
29
+ }
30
+ }
31
+ return Object.freeze(object);
32
+ }
33
+ class TgpuConstImpl {
34
+ [$soul];
35
+ static {
36
+ TgpuConstImpl.prototype[$internal] = {};
37
+ TgpuConstImpl.prototype.resourceType = 'const';
38
+ makeDereferenceable(makeResolvable(TgpuConstImpl.prototype, {
39
+ asString() {
40
+ return `const:${getName(this) ?? '<unnamed>'}`;
41
+ },
42
+ resolve(ctx) {
43
+ const id = ctx.makeUniqueIdentifier(getName(this), 'global');
44
+ return ctx.gen.declareGlobalConst({
45
+ id,
46
+ dataType: this.dataType,
47
+ init: snip(this[$soul].value, this.dataType, 'constant'),
48
+ });
49
+ },
50
+ }), {
51
+ codegenMode: {
52
+ getBaseSnippet(trackingProxy) {
53
+ return snip(trackingProxy, this.dataType, 'constant-immutable-def',
54
+ /* possibleSideEffects */ false);
55
+ },
56
+ },
57
+ normalMode: {
58
+ get() {
59
+ return this[$soul].value;
60
+ },
61
+ },
62
+ });
63
+ }
64
+ constructor(dataType, value) {
65
+ this[$soul] = {
66
+ type: 'const',
67
+ dataType,
68
+ value: value && typeof value === 'object'
69
+ ? deepFreeze(value)
70
+ : value,
71
+ label: undefined,
72
+ };
73
+ }
74
+ get dataType() {
75
+ return this[$soul].dataType;
76
+ }
77
+ $name(label) {
78
+ setName(this, label);
79
+ return this;
80
+ }
23
81
  }
24
- var TgpuConstImpl = class {
25
- [$internal] = {};
26
- resourceType;
27
- dataType;
28
- #value;
29
- constructor(dataType, value) {
30
- this.resourceType = "const";
31
- this.dataType = dataType;
32
- this.#value = value && typeof value === "object" ? deepFreeze(value) : value;
33
- }
34
- $name(label) {
35
- setName(this, label);
36
- return this;
37
- }
38
- [$resolve](ctx) {
39
- const id = ctx.makeUniqueIdentifier(getName(this), "global");
40
- return ctx.gen.declareGlobalConst({
41
- id,
42
- dataType: this.dataType,
43
- init: snip(this.#value, this.dataType, "constant")
44
- });
45
- }
46
- toString() {
47
- return `const:${getName(this) ?? "<unnamed>"}`;
48
- }
49
- get [$gpuValueOf]() {
50
- const dataType = this.dataType;
51
- return new Proxy({
52
- [$internal]: true,
53
- get [$ownSnippet]() {
54
- return snip(this, dataType, "constant-immutable-def");
55
- },
56
- [$resolve]: (ctx) => ctx.resolve(this),
57
- toString: () => `const:${getName(this) ?? "<unnamed>"}.$`
58
- }, valueProxyHandler);
59
- }
60
- get $() {
61
- if (inCodegenMode()) return this[$gpuValueOf];
62
- return this.#value;
63
- }
64
- get value() {
65
- return this.$;
66
- }
67
- };
68
-
69
- //#endregion
70
- export { constant };
@@ -1,10 +1,9 @@
1
- //#region src/core/declare/tgpuDeclare.d.ts
2
1
  /**
3
2
  * Extra declaration that shall be included in final WGSL code,
4
3
  * when resolving objects that use it.
5
4
  */
6
- interface TgpuDeclare {
7
- $uses(dependencyMap: Record<string, unknown>): this;
5
+ export interface TgpuDeclare {
6
+ $uses(dependencyMap: Record<string, unknown>): this;
8
7
  }
9
8
  /**
10
9
  * Allows defining extra declarations that shall be included in the final WGSL code,
@@ -13,6 +12,4 @@ interface TgpuDeclare {
13
12
  * Using this API is generally discouraged, as it shouldn't be necessary in any common scenario.
14
13
  * It was developed to ensure full compatibility of TypeGPU programs with current and future versions of WGSL.
15
14
  */
16
- declare function declare(declaration: string): TgpuDeclare;
17
- //#endregion
18
- export { TgpuDeclare, declare };
15
+ export declare function declare(declaration: string): TgpuDeclare;
@@ -1,41 +1,40 @@
1
- import { $internal, $resolve } from "../../shared/symbols.js";
2
- import { Void } from "../../data/wgslTypes.js";
3
1
  import { snip } from "../../data/snippet.js";
4
- import { mergeExternals, replaceExternalsInWgsl } from "../resolve/externals.js";
5
-
6
- //#region src/core/declare/tgpuDeclare.ts
2
+ import { Void } from "../../data/wgslTypes.js";
3
+ import { $internal, $resolve } from "../../shared/symbols.js";
4
+ import { replaceExternalsInWgsl } from "../resolve/externals.js";
7
5
  /**
8
- * Allows defining extra declarations that shall be included in the final WGSL code,
9
- * when resolving objects that use them.
10
- *
11
- * Using this API is generally discouraged, as it shouldn't be necessary in any common scenario.
12
- * It was developed to ensure full compatibility of TypeGPU programs with current and future versions of WGSL.
13
- */
14
- function declare(declaration) {
15
- return new TgpuDeclareImpl(declaration);
6
+ * Allows defining extra declarations that shall be included in the final WGSL code,
7
+ * when resolving objects that use them.
8
+ *
9
+ * Using this API is generally discouraged, as it shouldn't be necessary in any common scenario.
10
+ * It was developed to ensure full compatibility of TypeGPU programs with current and future versions of WGSL.
11
+ */
12
+ export function declare(declaration) {
13
+ return new TgpuDeclareImpl(declaration);
14
+ }
15
+ // --------------
16
+ // Implementation
17
+ // --------------
18
+ class TgpuDeclareImpl {
19
+ [$internal] = true;
20
+ #externals;
21
+ #declaration;
22
+ constructor(declaration) {
23
+ this.#declaration = declaration;
24
+ }
25
+ $uses(dependencyMap) {
26
+ if (this.#externals !== undefined) {
27
+ throw new Error("Cannot call '$uses' multiple times. If you wish to override dependencies, use slots or accessors instead.");
28
+ }
29
+ this.#externals = dependencyMap;
30
+ return this;
31
+ }
32
+ [$resolve](ctx) {
33
+ const replacedDeclaration = replaceExternalsInWgsl(ctx, this.#externals ?? {}, this.#declaration);
34
+ ctx.addDeclaration(replacedDeclaration);
35
+ return snip('', Void, /* origin */ 'constant');
36
+ }
37
+ toString() {
38
+ return `declare: ${this.#declaration}`;
39
+ }
16
40
  }
17
- var TgpuDeclareImpl = class {
18
- [$internal] = true;
19
- #externalsToApply = [];
20
- #declaration;
21
- constructor(declaration) {
22
- this.#declaration = declaration;
23
- }
24
- $uses(dependencyMap) {
25
- this.#externalsToApply.push(dependencyMap);
26
- return this;
27
- }
28
- [$resolve](ctx) {
29
- const externalMap = {};
30
- for (const externals of this.#externalsToApply) mergeExternals(externalMap, externals);
31
- const replacedDeclaration = replaceExternalsInWgsl(ctx, externalMap, this.#declaration);
32
- ctx.addDeclaration(replacedDeclaration);
33
- return snip("", Void, "constant");
34
- }
35
- toString() {
36
- return `declare: ${this.#declaration}`;
37
- }
38
- };
39
-
40
- //#endregion
41
- export { declare };
@@ -1,41 +1,69 @@
1
- import { Assume, RemoveIndexSignature } from "../../shared/utilityTypes.js";
2
- import { BuiltinClipDistances, BuiltinFragDepth, BuiltinFrontFacing, BuiltinInstanceIndex, BuiltinPosition, BuiltinPrimitiveIndex, BuiltinSampleIndex, BuiltinSampleMask, BuiltinSubgroupInvocationId, BuiltinSubgroupSize, BuiltinVertexIndex, OmitBuiltins } from "../../builtin.js";
3
- import "../../data/snippet.js";
4
- import { BaseIOData } from "./fnTypes.js";
5
- import { TgpuVertexAttrib } from "../../shared/vertexFormat.js";
6
- import "../../data/autoStruct.js";
7
- import { FormatToWGSLType } from "../../data/vertexFormatData.js";
8
- import "../../types.js";
9
- import { v4f } from "../../data/wgslTypes.js";
10
- import { InferGPU, InferGPURecord, InferRecord } from "../../shared/repr.js";
11
-
12
- //#region src/core/function/autoIO.d.ts
13
- type AnyAutoCustoms = Record<string, InferGPU<BaseIOData>>;
1
+ import { type OmitBuiltins } from '../../builtin.ts';
2
+ import { AutoStruct } from '../../data/autoStruct.ts';
3
+ import type { ResolvedSnippet } from '../../data/snippet.ts';
4
+ import type { FormatToWGSLType } from '../../data/vertexFormatData.ts';
5
+ import type { BaseData, v4f } from '../../data/wgslTypes.ts';
6
+ import type { InferGPU, InferGPURecord, InferRecord } from '../../shared/repr.ts';
7
+ import { $internal, $resolve } from '../../shared/symbols.ts';
8
+ import type { Assume, RemoveIndexSignature } from '../../shared/utilityTypes.ts';
9
+ import type { TgpuVertexAttrib } from '../../shared/vertexFormat.ts';
10
+ import type { ResolutionCtx, SelfResolvable } from '../../types.ts';
11
+ import type { BaseIOData } from './fnTypes.ts';
12
+ export type AnyAutoCustoms = Record<string, InferGPU<BaseIOData>>;
14
13
  declare const builtinVertexIn: {
15
- readonly $vertexIndex: BuiltinVertexIndex;
16
- readonly $instanceIndex: BuiltinInstanceIndex;
14
+ readonly $vertexIndex: import("../../builtin.ts").BuiltinVertexIndex;
15
+ readonly $instanceIndex: import("../../builtin.ts").BuiltinInstanceIndex;
17
16
  };
18
- type AutoVertexIn<T extends AnyAutoCustoms> = RemoveIndexSignature<T> & InferRecord<typeof builtinVertexIn>;
19
- type _AutoVertexIn<T> = AutoVertexIn<{ [Key in keyof T]: T[Key] extends TgpuVertexAttrib ? InferGPU<FormatToWGSLType<T[Key]['format']>> : Assume<T[Key], InferGPU<BaseIOData>> }>;
17
+ export type AutoVertexIn<T extends AnyAutoCustoms> = RemoveIndexSignature<T> & InferRecord<typeof builtinVertexIn>;
18
+ export type _AutoVertexIn<T> = AutoVertexIn<{
19
+ [Key in keyof T]: T[Key] extends TgpuVertexAttrib ? InferGPU<FormatToWGSLType<T[Key]['format']>> : Assume<T[Key], InferGPU<BaseIOData>>;
20
+ }>;
20
21
  declare const builtinVertexOut: {
21
- readonly $clipDistances: BuiltinClipDistances;
22
- readonly $position: BuiltinPosition;
22
+ readonly $clipDistances: import("../../builtin.ts").BuiltinClipDistances;
23
+ readonly $position: import("../../builtin.ts").BuiltinPosition;
23
24
  };
24
- type AutoVertexOut<T extends AnyAutoCustoms> = OmitBuiltins<T> & Partial<InferGPURecord<typeof builtinVertexOut>>;
25
+ export type AutoVertexOut<T extends AnyAutoCustoms> = OmitBuiltins<T> & Partial<InferGPURecord<typeof builtinVertexOut>>;
25
26
  declare const builtinFragmentIn: {
26
- readonly $position: BuiltinPosition;
27
- readonly $frontFacing: BuiltinFrontFacing;
28
- readonly $primitiveIndex: BuiltinPrimitiveIndex;
29
- readonly $sampleIndex: BuiltinSampleIndex;
30
- readonly $sampleMask: BuiltinSampleMask;
31
- readonly $subgroupInvocationId: BuiltinSubgroupInvocationId;
32
- readonly $subgroupSize: BuiltinSubgroupSize;
27
+ readonly $position: import("../../builtin.ts").BuiltinPosition;
28
+ readonly $frontFacing: import("../../builtin.ts").BuiltinFrontFacing;
29
+ readonly $primitiveIndex: import("../../builtin.ts").BuiltinPrimitiveIndex;
30
+ readonly $sampleIndex: import("../../builtin.ts").BuiltinSampleIndex;
31
+ readonly $sampleMask: import("../../builtin.ts").BuiltinSampleMask;
32
+ readonly $subgroupInvocationId: import("../../builtin.ts").BuiltinSubgroupInvocationId;
33
+ readonly $subgroupSize: import("../../builtin.ts").BuiltinSubgroupSize;
33
34
  };
34
- type AutoFragmentIn<T extends AnyAutoCustoms> = RemoveIndexSignature<T> & InferRecord<typeof builtinFragmentIn>;
35
+ export type AutoFragmentIn<T extends AnyAutoCustoms> = RemoveIndexSignature<T> & InferRecord<typeof builtinFragmentIn>;
35
36
  declare const builtinFragmentOut: {
36
- readonly $fragDepth: BuiltinFragDepth;
37
- readonly $sampleMask: BuiltinSampleMask;
37
+ readonly $fragDepth: import("../../builtin.ts").BuiltinFragDepth;
38
+ readonly $sampleMask: import("../../builtin.ts").BuiltinSampleMask;
38
39
  };
39
- type AutoFragmentOut<T extends undefined | v4f | AnyAutoCustoms> = T extends undefined | v4f ? T : T & Partial<InferGPURecord<typeof builtinFragmentOut>>;
40
- //#endregion
41
- export { AnyAutoCustoms, AutoFragmentIn, AutoFragmentOut, AutoVertexIn, AutoVertexOut, _AutoVertexIn };
40
+ export type AutoFragmentOut<T extends undefined | v4f | AnyAutoCustoms> = T extends undefined | v4f ? T : T & Partial<InferGPURecord<typeof builtinFragmentOut>>;
41
+ type AutoFragmentFnImpl = (input: AutoFragmentIn<Record<string, never>>) => AutoFragmentOut<undefined | v4f | AnyAutoCustoms>;
42
+ /**
43
+ * Only used internally. Meant to be recreated on every resolution.
44
+ */
45
+ export declare class AutoFragmentFn implements SelfResolvable {
46
+ #private;
47
+ [$internal]: true;
48
+ resourceType: 'auto-fragment-fn';
49
+ autoIn: AutoStruct;
50
+ autoOut: AutoStruct;
51
+ constructor(impl: AutoFragmentFnImpl, varyings: Record<string, BaseData>, locations?: Record<string, number>);
52
+ toString(): string;
53
+ [$resolve](ctx: ResolutionCtx): ResolvedSnippet;
54
+ }
55
+ type AutoVertexFnImpl = (input: AutoVertexIn<Record<string, never>>) => AutoVertexOut<AnyAutoCustoms>;
56
+ /**
57
+ * Only used internally. Meant to be recreated on every resolution.
58
+ */
59
+ export declare class AutoVertexFn implements SelfResolvable {
60
+ #private;
61
+ [$internal]: true;
62
+ resourceType: 'auto-vertex-fn';
63
+ autoIn: AutoStruct;
64
+ autoOut: AutoStruct;
65
+ constructor(impl: AutoVertexFnImpl, attribs: Record<string, BaseData>, locations?: Record<string, number>);
66
+ toString(): string;
67
+ [$resolve](ctx: ResolutionCtx): ResolvedSnippet;
68
+ }
69
+ export {};
@@ -1,87 +1,82 @@
1
- import { $internal, $resolve } from "../../shared/symbols.js";
2
- import { getName, setName } from "../../shared/meta.js";
3
- import { vec4f } from "../../data/vector.js";
1
+ import { builtin } from "../../builtin.js";
4
2
  import { AutoStruct } from "../../data/autoStruct.js";
5
- import { createFnCore } from "./fnCore.js";
3
+ import { vec4f } from "../../data/vector.js";
4
+ import { getName, setName } from "../../shared/meta.js";
5
+ import { $internal, $resolve } from "../../shared/symbols.js";
6
6
  import { shaderStageSlot } from "../slot/internalSlots.js";
7
- import { builtin } from "../../builtin.js";
8
-
9
- //#region src/core/function/autoIO.ts
7
+ import { createFnCore } from "./fnCore.js";
10
8
  const builtinVertexIn = {
11
- $vertexIndex: builtin.vertexIndex,
12
- $instanceIndex: builtin.instanceIndex
9
+ $vertexIndex: builtin.vertexIndex,
10
+ $instanceIndex: builtin.instanceIndex,
13
11
  };
14
12
  const builtinVertexOut = {
15
- $clipDistances: builtin.clipDistances,
16
- $position: builtin.position
13
+ $clipDistances: builtin.clipDistances,
14
+ $position: builtin.position,
17
15
  };
18
16
  const builtinFragmentIn = {
19
- $position: builtin.position,
20
- $frontFacing: builtin.frontFacing,
21
- $primitiveIndex: builtin.primitiveIndex,
22
- $sampleIndex: builtin.sampleIndex,
23
- $sampleMask: builtin.sampleMask,
24
- $subgroupInvocationId: builtin.subgroupInvocationId,
25
- $subgroupSize: builtin.subgroupSize
17
+ $position: builtin.position,
18
+ $frontFacing: builtin.frontFacing,
19
+ $primitiveIndex: builtin.primitiveIndex,
20
+ $sampleIndex: builtin.sampleIndex,
21
+ $sampleMask: builtin.sampleMask,
22
+ $subgroupInvocationId: builtin.subgroupInvocationId,
23
+ $subgroupSize: builtin.subgroupSize,
26
24
  };
27
25
  const builtinFragmentOut = {
28
- $fragDepth: builtin.fragDepth,
29
- $sampleMask: builtin.sampleMask
26
+ $fragDepth: builtin.fragDepth,
27
+ $sampleMask: builtin.sampleMask,
30
28
  };
31
29
  /**
32
- * Only used internally. Meant to be recreated on every resolution.
33
- */
34
- var AutoFragmentFn = class {
35
- #core;
36
- autoIn;
37
- autoOut;
38
- constructor(impl, varyings, locations) {
39
- if (!getName(impl)) setName(impl, "fragmentFn");
40
- this.#core = createFnCore(impl, "fragment");
41
- this.autoIn = new AutoStruct({
42
- ...builtinFragmentIn,
43
- ...varyings
44
- }, void 0, locations);
45
- setName(this.autoIn, "FragmentIn");
46
- this.autoOut = new AutoStruct(builtinFragmentOut, vec4f);
47
- setName(this.autoOut, "FragmentOut");
48
- }
49
- toString() {
50
- return "autoFragmentFn";
51
- }
52
- [$resolve](ctx) {
53
- return ctx.withSlots([[shaderStageSlot, "fragment"]], () => this.#core.resolve(ctx, [this.autoIn], this.autoOut));
54
- }
55
- };
30
+ * Only used internally. Meant to be recreated on every resolution.
31
+ */
32
+ export class AutoFragmentFn {
33
+ #core;
34
+ autoIn;
35
+ autoOut;
36
+ constructor(impl, varyings, locations) {
37
+ // If the implementation is not named, we can fallback to "fragmentFn"
38
+ if (!getName(impl)) {
39
+ setName(impl, 'fragmentFn');
40
+ }
41
+ this.#core = createFnCore(impl, 'fragment');
42
+ this.autoIn = new AutoStruct({ ...builtinFragmentIn, ...varyings }, undefined, locations);
43
+ setName(this.autoIn, 'FragmentIn');
44
+ this.autoOut = new AutoStruct(builtinFragmentOut, vec4f);
45
+ setName(this.autoOut, 'FragmentOut');
46
+ }
47
+ toString() {
48
+ return 'autoFragmentFn';
49
+ }
50
+ [$resolve](ctx) {
51
+ return ctx.withSlots([[shaderStageSlot, 'fragment']], () => this.#core.resolve(ctx, [this.autoIn], this.autoOut));
52
+ }
53
+ }
56
54
  AutoFragmentFn.prototype[$internal] = true;
57
- AutoFragmentFn.prototype.resourceType = "auto-fragment-fn";
55
+ AutoFragmentFn.prototype.resourceType = 'auto-fragment-fn';
58
56
  /**
59
- * Only used internally. Meant to be recreated on every resolution.
60
- */
61
- var AutoVertexFn = class {
62
- #core;
63
- autoIn;
64
- autoOut;
65
- constructor(impl, attribs, locations) {
66
- if (!getName(impl)) setName(impl, "vertexFn");
67
- this.#core = createFnCore(impl, "vertex");
68
- this.autoIn = new AutoStruct({
69
- ...builtinVertexIn,
70
- ...attribs
71
- }, void 0, locations);
72
- setName(this.autoIn, "VertexIn");
73
- this.autoOut = new AutoStruct(builtinVertexOut, void 0);
74
- setName(this.autoOut, "VertexOut");
75
- }
76
- toString() {
77
- return "autoVertexFn";
78
- }
79
- [$resolve](ctx) {
80
- return ctx.withSlots([[shaderStageSlot, "vertex"]], () => this.#core.resolve(ctx, [this.autoIn], this.autoOut));
81
- }
82
- };
57
+ * Only used internally. Meant to be recreated on every resolution.
58
+ */
59
+ export class AutoVertexFn {
60
+ #core;
61
+ autoIn;
62
+ autoOut;
63
+ constructor(impl, attribs, locations) {
64
+ // If the implementation is not named, we can fallback to "vertexFn"
65
+ if (!getName(impl)) {
66
+ setName(impl, 'vertexFn');
67
+ }
68
+ this.#core = createFnCore(impl, 'vertex');
69
+ this.autoIn = new AutoStruct({ ...builtinVertexIn, ...attribs }, undefined, locations);
70
+ setName(this.autoIn, 'VertexIn');
71
+ this.autoOut = new AutoStruct(builtinVertexOut, undefined);
72
+ setName(this.autoOut, 'VertexOut');
73
+ }
74
+ toString() {
75
+ return 'autoVertexFn';
76
+ }
77
+ [$resolve](ctx) {
78
+ return ctx.withSlots([[shaderStageSlot, 'vertex']], () => this.#core.resolve(ctx, [this.autoIn], this.autoOut));
79
+ }
80
+ }
83
81
  AutoVertexFn.prototype[$internal] = true;
84
- AutoVertexFn.prototype.resourceType = "auto-vertex-fn";
85
-
86
- //#endregion
87
- export { AutoFragmentFn, AutoVertexFn };
82
+ AutoVertexFn.prototype.resourceType = 'auto-vertex-fn';
@@ -1,15 +1,14 @@
1
- import { TgpuNamable } from "../../shared/meta.js";
2
- import { $getNameForward, $internal } from "../../shared/symbols.js";
3
- import { DualFn } from "../../types.js";
4
-
5
- //#region src/core/function/comptime.d.ts
1
+ import { type TgpuNamable } from '../../shared/meta.ts';
2
+ import { $getNameForward, $internal } from '../../shared/symbols.ts';
3
+ import { type DualFn } from '../../types.ts';
6
4
  type AnyFn = (...args: never[]) => unknown;
7
- type TgpuComptime<T extends AnyFn = AnyFn> = DualFn<T> & TgpuNamable & {
8
- [$getNameForward]: unknown;
9
- [$internal]: {
10
- isComptime: true;
11
- };
5
+ export type TgpuComptime<T extends AnyFn = AnyFn> = DualFn<T> & TgpuNamable & {
6
+ [$getNameForward]: unknown;
7
+ [$internal]: {
8
+ isComptime: true;
9
+ };
12
10
  };
11
+ export declare function isComptimeFn(value: unknown): value is TgpuComptime;
13
12
  /**
14
13
  * Creates a version of `func` that can called safely in a TypeGPU function to
15
14
  * precompute and inject a value into the final shader code.
@@ -34,6 +33,5 @@ type TgpuComptime<T extends AnyFn = AnyFn> = DualFn<T> & TgpuNamable & {
34
33
  * };
35
34
  * ```
36
35
  */
37
- declare function comptime<T extends (...args: never[]) => unknown>(func: T): TgpuComptime<T>;
38
- //#endregion
39
- export { TgpuComptime, comptime };
36
+ export declare function comptime<T extends (...args: never[]) => unknown>(func: T): TgpuComptime<T>;
37
+ export {};