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,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,40 +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";
2
+ import { Void } from "../../data/wgslTypes.js";
3
+ import { $internal, $resolve } from "../../shared/symbols.js";
4
4
  import { replaceExternalsInWgsl } from "../resolve/externals.js";
5
-
6
- //#region src/core/declare/tgpuDeclare.ts
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
- #externals;
20
- #declaration;
21
- constructor(declaration) {
22
- this.#declaration = declaration;
23
- }
24
- $uses(dependencyMap) {
25
- if (this.#externals !== void 0) throw new Error("Cannot call '$uses' multiple times. If you wish to override dependencies, use slots or accessors instead.");
26
- this.#externals = dependencyMap;
27
- return this;
28
- }
29
- [$resolve](ctx) {
30
- const replacedDeclaration = replaceExternalsInWgsl(ctx, this.#externals ?? {}, this.#declaration);
31
- ctx.addDeclaration(replacedDeclaration);
32
- return snip("", Void, "constant");
33
- }
34
- toString() {
35
- return `declare: ${this.#declaration}`;
36
- }
37
- };
38
-
39
- //#endregion
40
- 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 {};