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