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
@@ -0,0 +1 @@
1
+ import { $internal, $soul } from "../../shared/symbols.js";
@@ -1,35 +1,54 @@
1
- import { TgpuNamable } from "../../shared/meta.js";
2
- import { $gpuValueOf, $internal } from "../../shared/symbols.js";
3
- import { WgslComparisonSampler, WgslSampler } from "../../data/sampler.js";
4
- import "../../data/snippet.js";
5
- import "../../unwrapper.js";
6
- import "../../tgpuBindGroupLayout.js";
7
- import "../../types.js";
8
- import { Infer } from "../../shared/repr.js";
9
-
10
- //#region src/core/sampler/sampler.d.ts
1
+ import type { WgslComparisonSamplerProps, WgslSamplerProps } from '../../data/sampler.ts';
2
+ import type { TgpuNamable } from '../../shared/meta.ts';
3
+ import type { Infer, InferGPU } from '../../shared/repr.ts';
4
+ import type { TgpuDeviceOwningSoul } from '../../shared/soul.ts';
5
+ import { $gpuValueOf, $internal, $repr, $resolve, $soul } from '../../shared/symbols.ts';
6
+ import type { LayoutMembership } from '../../tgpuBindGroupLayout.ts';
7
+ import { type WgslComparisonSampler, type WgslSampler } from '../../data/sampler.ts';
8
+ import type { SelfResolvable } from '../../types.ts';
9
+ import type { ExperimentalTgpuRoot } from '../root/rootTypes.ts';
11
10
  interface SamplerInternals {
12
- readonly unwrap?: (() => GPUSampler) | undefined;
11
+ readonly root?: ExperimentalTgpuRoot;
12
+ readonly materialize?: (() => GPUSampler) | undefined;
13
13
  }
14
- interface TgpuSampler {
15
- readonly [$internal]: SamplerInternals;
16
- readonly resourceType: 'sampler';
17
- readonly schema: WgslSampler;
18
- readonly [$gpuValueOf]: Infer<WgslSampler>;
19
- value: Infer<WgslSampler>;
20
- $: Infer<WgslSampler>;
14
+ export interface TgpuSamplerSoul extends TgpuDeviceOwningSoul<'sampler' | 'sampler-comparison', GPUSampler> {
15
+ readonly props: WgslSamplerProps | WgslComparisonSamplerProps;
21
16
  }
22
- interface TgpuComparisonSampler {
23
- readonly [$internal]: SamplerInternals;
24
- readonly resourceType: 'sampler-comparison';
25
- readonly schema: WgslComparisonSampler;
26
- readonly [$gpuValueOf]: Infer<WgslComparisonSampler>;
27
- value: Infer<WgslComparisonSampler>;
28
- $: Infer<WgslComparisonSampler>;
17
+ export interface TgpuSampler {
18
+ readonly [$internal]: SamplerInternals;
19
+ readonly resourceType: 'sampler';
20
+ readonly schema: WgslSampler;
21
+ readonly [$gpuValueOf]: InferGPU<WgslSampler>;
22
+ $: InferGPU<WgslSampler>;
23
+ toString(): string;
29
24
  }
30
- interface TgpuFixedSampler extends TgpuSampler, TgpuNamable {}
31
- interface TgpuFixedComparisonSampler extends TgpuComparisonSampler, TgpuNamable {}
32
- declare function isSampler(resource: unknown): resource is TgpuSampler;
33
- declare function isComparisonSampler(resource: unknown): resource is TgpuComparisonSampler;
34
- //#endregion
35
- export { TgpuComparisonSampler, TgpuFixedComparisonSampler, TgpuFixedSampler, TgpuSampler, isComparisonSampler, isSampler };
25
+ export interface TgpuComparisonSampler {
26
+ readonly [$internal]: SamplerInternals;
27
+ readonly resourceType: 'sampler-comparison';
28
+ readonly schema: WgslComparisonSampler;
29
+ readonly [$gpuValueOf]: InferGPU<WgslComparisonSampler>;
30
+ $: InferGPU<WgslComparisonSampler>;
31
+ toString(): string;
32
+ }
33
+ export interface TgpuFixedSampler extends TgpuSampler, TgpuNamable {
34
+ readonly [$soul]: TgpuSamplerSoul;
35
+ }
36
+ export interface TgpuFixedComparisonSampler extends TgpuComparisonSampler, TgpuNamable {
37
+ readonly [$soul]: TgpuSamplerSoul;
38
+ }
39
+ export declare function INTERNAL_createSampler(props: WgslSamplerProps, root: ExperimentalTgpuRoot): TgpuFixedSampler;
40
+ export declare function INTERNAL_createComparisonSampler(props: WgslComparisonSamplerProps, root: ExperimentalTgpuRoot): TgpuFixedComparisonSampler;
41
+ export declare function isSampler(resource: unknown): resource is TgpuSampler;
42
+ export declare function isComparisonSampler(resource: unknown): resource is TgpuComparisonSampler;
43
+ export declare class TgpuLaidOutSamplerImpl<T extends WgslSampler | WgslComparisonSampler> implements SelfResolvable {
44
+ #private;
45
+ readonly [$repr]: Infer<T>;
46
+ readonly [$internal]: SamplerInternals;
47
+ readonly resourceType: T extends WgslComparisonSampler ? 'sampler-comparison' : 'sampler';
48
+ readonly schema: T;
49
+ [$resolve]: SelfResolvable[typeof $resolve];
50
+ $: InferGPU<WgslSampler>;
51
+ readonly [$gpuValueOf]: InferGPU<WgslSampler>;
52
+ constructor(schema: T, membership: LayoutMembership);
53
+ }
54
+ export {};
@@ -1,118 +1,125 @@
1
- import { $gpuValueOf, $internal, $ownSnippet, $resolve } from "../../shared/symbols.js";
2
- import { getName, setName } from "../../shared/meta.js";
3
1
  import { snip } from "../../data/snippet.js";
4
- import { inCodegenMode } from "../../execMode.js";
5
- import { valueProxyHandler } from "../valueProxyUtils.js";
6
- import { comparisonSampler, sampler } from "../../data/sampler.js";
7
-
8
- //#region src/core/sampler/sampler.ts
9
- function INTERNAL_createSampler(props, branch) {
10
- return new TgpuFixedSamplerImpl(sampler(), props, branch);
2
+ import { getName, setName } from "../../shared/meta.js";
3
+ import { $gpuValueOf, $internal, $repr, $resolve, $soul } from "../../shared/symbols.js";
4
+ import { comparisonSampler as wgslComparisonSampler, sampler as wgslSampler, } from "../../data/sampler.js";
5
+ import { makeDereferenceable } from "../../tgsl/makeDereferenceable.js";
6
+ import { makeResolvable } from "../../tgsl/makeResolvable.js";
7
+ export function INTERNAL_createSampler(props, root) {
8
+ return new TgpuFixedSamplerImpl(wgslSampler(), props, root);
9
+ }
10
+ export function INTERNAL_createComparisonSampler(props, root) {
11
+ return new TgpuFixedSamplerImpl(wgslComparisonSampler(), props, root);
12
+ }
13
+ export function isSampler(resource) {
14
+ const maybe = resource;
15
+ return maybe?.resourceType === 'sampler' && !!maybe[$internal];
11
16
  }
12
- function INTERNAL_createComparisonSampler(props, branch) {
13
- return new TgpuFixedSamplerImpl(comparisonSampler(), props, branch);
17
+ export function isComparisonSampler(resource) {
18
+ const maybe = resource;
19
+ return maybe?.resourceType === 'sampler-comparison' && !!maybe[$internal];
14
20
  }
15
- function isSampler(resource) {
16
- const maybe = resource;
17
- return maybe?.resourceType === "sampler" && !!maybe[$internal];
21
+ // --------------
22
+ // Implementation
23
+ // --------------
24
+ export class TgpuLaidOutSamplerImpl {
25
+ [$internal] = { materialize: undefined };
26
+ resourceType;
27
+ schema;
28
+ #membership;
29
+ static {
30
+ makeDereferenceable(makeResolvable(TgpuLaidOutSamplerImpl.prototype, {
31
+ asString() {
32
+ return `${this.resourceType}:${getName(this) ?? '<unnamed>'}`;
33
+ },
34
+ resolve(ctx) {
35
+ const id = ctx.makeUniqueIdentifier(getName(this), 'global');
36
+ const group = ctx.allocateLayoutEntry(this.#membership.layout);
37
+ ctx.addDeclaration(`@group(${group}) @binding(${this.#membership.idx}) var ${id}: ${ctx.resolve(this.schema).value};`, id);
38
+ return snip(id, this.schema, /* origin */ 'handle');
39
+ },
40
+ }), {
41
+ codegenMode: {
42
+ getBaseSnippet(trackingProxy) {
43
+ return snip(trackingProxy, this.schema, /* origin */ 'handle', false);
44
+ },
45
+ },
46
+ normalMode: {
47
+ get() {
48
+ throw new Error('Direct access to sampler values is possible only as part of a compute dispatch or draw call.');
49
+ },
50
+ },
51
+ });
52
+ }
53
+ constructor(schema, membership) {
54
+ this.schema = schema;
55
+ this.#membership = membership;
56
+ this.resourceType = (schema.type === 'sampler_comparison' ? 'sampler-comparison' : 'sampler');
57
+ setName(this, membership.key);
58
+ }
18
59
  }
19
- function isComparisonSampler(resource) {
20
- const maybe = resource;
21
- return maybe?.resourceType === "sampler-comparison" && !!maybe[$internal];
60
+ class TgpuFixedSamplerImpl {
61
+ [$internal];
62
+ [$soul];
63
+ resourceType;
64
+ schema;
65
+ #filtering;
66
+ static {
67
+ makeDereferenceable(makeResolvable(TgpuFixedSamplerImpl.prototype, {
68
+ asString() {
69
+ return `${this.resourceType}:${getName(this) ?? '<unnamed>'}`;
70
+ },
71
+ resolve(ctx) {
72
+ const id = ctx.makeUniqueIdentifier(getName(this), 'global');
73
+ const { group, binding } = ctx.allocateFixedEntry(this.schema.type === 'sampler_comparison'
74
+ ? { sampler: 'comparison' }
75
+ : { sampler: this.#filtering ? 'filtering' : 'non-filtering' }, this);
76
+ ctx.addDeclaration(`@group(${group}) @binding(${binding}) var ${id}: ${ctx.resolve(this.schema).value};`, id);
77
+ return snip(id, this.schema, /* origin */ 'handle');
78
+ },
79
+ }), {
80
+ codegenMode: {
81
+ getBaseSnippet(trackingProxy) {
82
+ return snip(trackingProxy, this.schema, /* origin */ 'handle', false);
83
+ },
84
+ },
85
+ normalMode: {
86
+ get() {
87
+ throw new Error('Direct access to sampler values is possible only as part of a compute dispatch or draw call.');
88
+ },
89
+ },
90
+ });
91
+ }
92
+ constructor(schema, props, root) {
93
+ this.schema = schema;
94
+ this.resourceType = (schema.type === 'sampler_comparison' ? 'sampler-comparison' : 'sampler');
95
+ this[$soul] = {
96
+ type: this.resourceType,
97
+ device: root.device,
98
+ props,
99
+ raw: undefined,
100
+ label: undefined,
101
+ };
102
+ this[$internal] = {
103
+ root,
104
+ materialize: () => {
105
+ const soul = this[$soul];
106
+ if (!soul.raw) {
107
+ soul.raw = soul.device.createSampler({
108
+ ...soul.props,
109
+ label: getName(this) ?? '<unnamed>',
110
+ });
111
+ }
112
+ return soul.raw;
113
+ },
114
+ };
115
+ // Based on https://www.w3.org/TR/webgpu/#sampler-creation
116
+ this.#filtering =
117
+ props.minFilter === 'linear' ||
118
+ props.magFilter === 'linear' ||
119
+ props.mipmapFilter === 'linear';
120
+ }
121
+ $name(label) {
122
+ setName(this, label);
123
+ return this;
124
+ }
22
125
  }
23
- var TgpuLaidOutSamplerImpl = class {
24
- [$internal] = { unwrap: void 0 };
25
- resourceType;
26
- schema;
27
- #membership;
28
- constructor(schema, membership) {
29
- this.schema = schema;
30
- this.#membership = membership;
31
- this.resourceType = schema.type === "sampler_comparison" ? "sampler-comparison" : "sampler";
32
- setName(this, membership.key);
33
- }
34
- [$resolve](ctx) {
35
- const id = ctx.makeUniqueIdentifier(getName(this), "global");
36
- const group = ctx.allocateLayoutEntry(this.#membership.layout);
37
- ctx.addDeclaration(`@group(${group}) @binding(${this.#membership.idx}) var ${id}: ${ctx.resolve(this.schema).value};`);
38
- return snip(id, this.schema, "handle");
39
- }
40
- get [$gpuValueOf]() {
41
- const schema = this.schema;
42
- return new Proxy({
43
- [$internal]: true,
44
- get [$ownSnippet]() {
45
- return snip(this, schema, "handle");
46
- },
47
- [$resolve]: (ctx) => ctx.resolve(this),
48
- toString: () => `${this.toString()}.$`
49
- }, valueProxyHandler);
50
- }
51
- get $() {
52
- if (inCodegenMode()) return this[$gpuValueOf];
53
- throw new Error("Direct access to sampler values is possible only as part of a compute dispatch or draw call.");
54
- }
55
- get value() {
56
- return this.$;
57
- }
58
- toString() {
59
- return `${this.resourceType}:${getName(this) ?? "<unnamed>"}`;
60
- }
61
- };
62
- var TgpuFixedSamplerImpl = class {
63
- [$internal];
64
- resourceType;
65
- schema;
66
- #filtering;
67
- #sampler = null;
68
- #props;
69
- #branch;
70
- constructor(schema, props, branch) {
71
- this.schema = schema;
72
- this.#props = props;
73
- this.#branch = branch;
74
- this.resourceType = schema.type === "sampler_comparison" ? "sampler-comparison" : "sampler";
75
- this[$internal] = { unwrap: () => {
76
- if (!this.#sampler) this.#sampler = this.#branch.device.createSampler({
77
- ...this.#props,
78
- label: getName(this) ?? "<unnamed>"
79
- });
80
- return this.#sampler;
81
- } };
82
- this.#filtering = props.minFilter === "linear" || props.magFilter === "linear" || props.mipmapFilter === "linear";
83
- }
84
- [$resolve](ctx) {
85
- const id = ctx.makeUniqueIdentifier(getName(this), "global");
86
- const { group, binding } = ctx.allocateFixedEntry(this.schema.type === "sampler_comparison" ? { sampler: "comparison" } : { sampler: this.#filtering ? "filtering" : "non-filtering" }, this);
87
- ctx.addDeclaration(`@group(${group}) @binding(${binding}) var ${id}: ${ctx.resolve(this.schema).value};`);
88
- return snip(id, this.schema, "handle");
89
- }
90
- get [$gpuValueOf]() {
91
- const schema = this.schema;
92
- return new Proxy({
93
- [$internal]: true,
94
- get [$ownSnippet]() {
95
- return snip(this, schema, "handle");
96
- },
97
- [$resolve]: (ctx) => ctx.resolve(this),
98
- toString: () => `${this.toString()}.$`
99
- }, valueProxyHandler);
100
- }
101
- get $() {
102
- if (inCodegenMode()) return this[$gpuValueOf];
103
- throw new Error("Direct access to sampler values is possible only as part of a compute dispatch or draw call.");
104
- }
105
- get value() {
106
- return this.$;
107
- }
108
- $name(label) {
109
- setName(this, label);
110
- return this;
111
- }
112
- toString() {
113
- return `${this.resourceType}:${getName(this) ?? "<unnamed>"}`;
114
- }
115
- };
116
-
117
- //#endregion
118
- export { INTERNAL_createComparisonSampler, INTERNAL_createSampler, TgpuLaidOutSamplerImpl, isComparisonSampler, isSampler };
@@ -1,13 +1,11 @@
1
- import { TgpuVar } from "../variable/tgpuVariable.js";
2
- import { TgpuBuffer } from "../buffer/buffer.js";
3
- import { BaseData } from "../../data/wgslTypes.js";
4
-
5
- //#region src/core/simulate/tgpuSimulate.d.ts
1
+ import type { BaseData } from '../../data/wgslTypes.ts';
2
+ import type { TgpuBuffer } from '../buffer/buffer.ts';
3
+ import type { TgpuVar } from '../variable/tgpuVariable.ts';
6
4
  interface SimulationResult<T> {
7
- value: T;
8
- buffers: Map<TgpuBuffer<BaseData>, unknown>;
9
- privateVars: Map<TgpuVar<'private'>, unknown>[][][];
10
- workgroupVars: Map<TgpuVar<'workgroup'>, unknown>[][][];
5
+ value: T;
6
+ buffers: Map<TgpuBuffer<BaseData>, unknown>;
7
+ privateVars: Map<TgpuVar<'private'>, unknown>[][][];
8
+ workgroupVars: Map<TgpuVar<'workgroup'>, unknown>[][][];
11
9
  }
12
10
  /**
13
11
  * Runs the provided callback in a simulated environment, giving
@@ -31,6 +29,5 @@ interface SimulationResult<T> {
31
29
  *
32
30
  * console.log(result.value); // 3
33
31
  */
34
- declare function simulate<T>(callback: () => T): SimulationResult<T>;
35
- //#endregion
36
- export { simulate };
32
+ export declare function simulate<T>(callback: () => T): SimulationResult<T>;
33
+ export {};
@@ -1,76 +1,73 @@
1
- import { SimulationState } from "../../types.js";
2
1
  import { getResolutionCtx, provideCtx } from "../../execMode.js";
3
- import wgslGenerator_default from "../../tgsl/wgslGenerator.js";
4
2
  import { ResolutionCtxImpl } from "../../resolutionCtx.js";
3
+ import { SimulationState } from "../../types.js";
5
4
  import { namespace } from "../resolve/namespace.js";
6
-
7
- //#region src/core/simulate/tgpuSimulate.ts
8
5
  /**
9
- * Runs the provided callback in a simulated environment, giving
10
- * it access to buffers and variables as if it were running on the GPU.
11
- *
12
- * The result of the simulation is returned, and does not affect the actual GPU state,
13
- * nor does it carry over to other simulations.
14
- *
15
- * @param callback The callback to run in the simulated environment.
16
- * @returns An object containing the result of the simulation, and
17
- * the final state of the environment.
18
- *
19
- * @example
20
- * const counter = tgpu.privateVar(d.u32);
21
- *
22
- * const result = tgpu.simulate(() => {
23
- * counter.$ += 1;
24
- * counter.$ += 2;
25
- * return counter.$;
26
- * });
27
- *
28
- * console.log(result.value); // 3
29
- */
30
- function simulate(callback) {
31
- const ctx = getResolutionCtx() ?? new ResolutionCtxImpl({
32
- namespace: namespace(),
33
- shaderGenerator: wgslGenerator_default
34
- });
35
- const workgroups = [
36
- 1,
37
- 1,
38
- 1
39
- ];
40
- const workgroupSize = [
41
- 1,
42
- 1,
43
- 1
44
- ];
45
- const threads = [
46
- workgroups[0] * workgroupSize[0],
47
- workgroups[1] * workgroupSize[1],
48
- workgroups[2] * workgroupSize[2]
49
- ];
50
- const buffers = /* @__PURE__ */ new Map();
51
- const workgroupVars = Array.from({ length: workgroups[0] }, () => Array.from({ length: workgroups[1] }, () => Array.from({ length: workgroups[2] }, () => /* @__PURE__ */ new Map())));
52
- const privateVars = Array.from({ length: threads[0] }, () => Array.from({ length: threads[1] }, () => Array.from({ length: threads[2] }, () => /* @__PURE__ */ new Map())));
53
- const simStates = Array.from({ length: threads[0] }, (_, i) => Array.from({ length: threads[1] }, (_$1, j) => Array.from({ length: threads[2] }, (_$2, k) => {
54
- const wi = Math.floor(i / workgroupSize[0]);
55
- const wj = Math.floor(j / workgroupSize[1]);
56
- const wk = Math.floor(k / workgroupSize[2]);
57
- return new SimulationState(buffers, {
58
- private: privateVars[i][j][k],
59
- workgroup: workgroupVars[wi][wj][wk]
60
- });
61
- })));
62
- ctx.pushMode(simStates[0][0][0]);
63
- try {
64
- return {
65
- value: provideCtx(ctx, callback),
66
- buffers,
67
- privateVars,
68
- workgroupVars
69
- };
70
- } finally {
71
- ctx.popMode("simulate");
72
- }
6
+ * Runs the provided callback in a simulated environment, giving
7
+ * it access to buffers and variables as if it were running on the GPU.
8
+ *
9
+ * The result of the simulation is returned, and does not affect the actual GPU state,
10
+ * nor does it carry over to other simulations.
11
+ *
12
+ * @param callback The callback to run in the simulated environment.
13
+ * @returns An object containing the result of the simulation, and
14
+ * the final state of the environment.
15
+ *
16
+ * @example
17
+ * const counter = tgpu.privateVar(d.u32);
18
+ *
19
+ * const result = tgpu.simulate(() => {
20
+ * counter.$ += 1;
21
+ * counter.$ += 2;
22
+ * return counter.$;
23
+ * });
24
+ *
25
+ * console.log(result.value); // 3
26
+ */
27
+ export function simulate(callback) {
28
+ // We could already be inside a resolution context, for example
29
+ // during lazy computation, where users would like to precompute
30
+ // something that happens to require simulation.
31
+ const ctx = getResolutionCtx() ??
32
+ new ResolutionCtxImpl({
33
+ // Not relevant
34
+ minify: false,
35
+ namespace: namespace(),
36
+ });
37
+ // Statically locked to one "thread" for now
38
+ const workgroups = [1, 1, 1];
39
+ const workgroupSize = [1, 1, 1];
40
+ const threads = [
41
+ workgroups[0] * workgroupSize[0],
42
+ workgroups[1] * workgroupSize[1],
43
+ workgroups[2] * workgroupSize[2],
44
+ ];
45
+ const buffers = new Map();
46
+ const workgroupVars = Array.from({ length: workgroups[0] }, () => Array.from({ length: workgroups[1] }, () => Array.from({ length: workgroups[2] }, () => new Map())));
47
+ const privateVars = Array.from({ length: threads[0] }, () => Array.from({ length: threads[1] }, () => Array.from({ length: threads[2] }, () => new Map())));
48
+ const simStates = Array.from({ length: threads[0] }, (_, i) => Array.from({ length: threads[1] }, (_, j) => Array.from({ length: threads[2] }, (_, k) => {
49
+ const wi = Math.floor(i / workgroupSize[0]);
50
+ const wj = Math.floor(j / workgroupSize[1]);
51
+ const wk = Math.floor(k / workgroupSize[2]);
52
+ return new SimulationState(buffers, {
53
+ // oxlint-disable-next-line typescript/no-non-null-assertion -- it's there, trust me
54
+ private: privateVars[i][j][k],
55
+ // oxlint-disable-next-line typescript/no-non-null-assertion -- it's there, trust me
56
+ workgroup: workgroupVars[wi][wj][wk],
57
+ });
58
+ })));
59
+ // oxlint-disable-next-line typescript/no-non-null-assertion -- it's there, trust me
60
+ ctx.pushMode(simStates[0][0][0]);
61
+ try {
62
+ const value = provideCtx(ctx, callback);
63
+ return {
64
+ value,
65
+ buffers,
66
+ privateVars,
67
+ workgroupVars,
68
+ };
69
+ }
70
+ finally {
71
+ ctx.popMode('simulate');
72
+ }
73
73
  }
74
-
75
- //#endregion
76
- export { simulate };
@@ -1,13 +1,36 @@
1
- import "../../data/snippet.js";
2
- import { TgpuAccessor, TgpuMutableAccessor } from "./slotTypes.js";
3
- import { UnwrapRuntimeConstructor } from "../../tgpuBindGroupLayout.js";
4
- import "../../types.js";
5
- import "../../data/wgslTypes.js";
6
- import "../../shared/repr.js";
7
- import { AnyData } from "../../data/dataTypes.js";
8
-
9
- //#region src/core/slot/accessor.d.ts
10
- declare function accessor<T extends AnyData | ((count: number) => AnyData)>(schemaOrConstructor: T, defaultValue?: TgpuAccessor.In<NoInfer<T>>): TgpuAccessor<UnwrapRuntimeConstructor<T>>;
11
- declare function mutableAccessor<T extends AnyData | ((count: number) => AnyData)>(schemaOrConstructor: T, defaultValue?: TgpuMutableAccessor.In<NoInfer<T>>): TgpuMutableAccessor<UnwrapRuntimeConstructor<T>>;
12
- //#endregion
13
- export { accessor, mutableAccessor };
1
+ import { type AnyData } from '../../data/dataTypes.ts';
2
+ import type { BaseData } from '../../data/wgslTypes.ts';
3
+ import type { InferGPU } from '../../shared/repr.ts';
4
+ import { $getNameForward, $gpuValueOf, $internal, $resolve, $soul } from '../../shared/symbols.ts';
5
+ import type { UnwrapRuntimeConstructor } from '../../tgpuBindGroupLayout.ts';
6
+ import { type SelfResolvable } from '../../types.ts';
7
+ import type { TgpuAccessor, TgpuAccessorSoul, TgpuMutableAccessor, TgpuSlot } from './slotTypes.ts';
8
+ export declare function accessor<T extends AnyData>(schema: T, defaultValue?: TgpuAccessor.In<NoInfer<T>>): TgpuAccessor<UnwrapRuntimeConstructor<T>>;
9
+ export declare function accessor<T extends (count: number) => AnyData>(schema: T, defaultValue?: TgpuAccessor.In<NoInfer<T>>): TgpuAccessor<UnwrapRuntimeConstructor<T>>;
10
+ export declare function mutableAccessor<T extends AnyData>(schema: T, defaultValue?: TgpuMutableAccessor.In<NoInfer<T>>): TgpuMutableAccessor<UnwrapRuntimeConstructor<T>>;
11
+ export declare function mutableAccessor<T extends (count: number) => AnyData>(schema: T, defaultValue?: TgpuMutableAccessor.In<NoInfer<T>>): TgpuMutableAccessor<UnwrapRuntimeConstructor<T>>;
12
+ declare abstract class AccessorBase<T extends BaseData, TValue extends TgpuAccessor.In<T> | TgpuMutableAccessor.In<T>> {
13
+ readonly [$getNameForward]: unknown;
14
+ readonly [$soul]: TgpuAccessorSoul<T, TValue>;
15
+ readonly slot: TgpuSlot<TValue>;
16
+ abstract readonly resourceType: string;
17
+ [$internal]: true;
18
+ [$resolve]: SelfResolvable[typeof $resolve];
19
+ readonly [$gpuValueOf]: InferGPU<T>;
20
+ abstract readonly $: InferGPU<T>;
21
+ constructor(type: 'accessor' | 'mutable-accessor', schemaOrConstructor: T | ((count: number) => T), defaultValue?: TValue | undefined);
22
+ get schema(): T;
23
+ get defaultValue(): TValue | undefined;
24
+ $name(label: string): this;
25
+ }
26
+ export declare class TgpuAccessorImpl<T extends BaseData> extends AccessorBase<T, TgpuAccessor.In<T>> implements TgpuAccessor<T> {
27
+ resourceType: 'accessor';
28
+ readonly $: InferGPU<T>;
29
+ constructor(schemaOrConstructor: T | ((count: number) => T), defaultValue?: TgpuAccessor.In<T> | undefined);
30
+ }
31
+ export declare class TgpuMutableAccessorImpl<T extends BaseData> extends AccessorBase<T, TgpuMutableAccessor.In<T>> implements TgpuMutableAccessor<T> {
32
+ resourceType: 'mutable-accessor';
33
+ $: InferGPU<T>;
34
+ constructor(schemaOrConstructor: T | ((count: number) => T), defaultValue?: TgpuMutableAccessor.In<T> | undefined);
35
+ }
36
+ export {};