typegpu 0.11.9 → 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 +36 -36
  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 -5
  42. package/core/function/fnCore.js +148 -93
  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 +17 -22
  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 +89 -90
  85. package/core/resolve/externals.d.ts +25 -8
  86. package/core/resolve/externals.js +78 -54
  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 -53
  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 -455
  101. package/core/root/rootTypes.d.ts +461 -636
  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 -215
  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 -197
  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 -126
  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 +427 -394
  239. package/package.json +5 -1
  240. package/resolutionCtx.d.ts +162 -22
  241. package/resolutionCtx.js +911 -629
  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 -101
  320. package/tgsl/accessStructProp.d.ts +5 -0
  321. package/tgsl/accessStructProp.js +13 -15
  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 +271 -216
  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 -760
  350. package/types.d.ts +287 -222
  351. package/types.js +61 -44
  352. package/unwrapper.d.ts +31 -26
  353. package/unwrapper.js +1 -0
  354. package/wgslExtensions.d.ts +3 -5
  355. package/wgslExtensions.js +12 -16
  356. package/_virtual/rolldown_runtime.js +0 -13
  357. package/core/buffer/bufferShorthand.d.ts +0 -50
  358. package/core/buffer/bufferShorthand.js +0 -55
  359. package/core/pipeline/applyPipelineState.js +0 -37
  360. package/package.js +0 -5
  361. package/tgsl/shaderGenerator_members.d.ts +0 -33
  362. package/tgsl/shaderGenerator_members.js +0 -12
@@ -1,21 +1,16 @@
1
- import { $providing } from "../../shared/symbols.js";
2
-
3
- //#region src/core/slot/slotTypes.ts
4
- function isSlot(value) {
5
- return value?.resourceType === "slot";
1
+ import { $gpuValueOf, $internal, $providing, $soul } from "../../shared/symbols.js";
2
+ export function isSlot(value) {
3
+ return value?.resourceType === 'slot';
6
4
  }
7
- function isLazy(value) {
8
- return value?.resourceType === "lazy";
5
+ export function isLazy(value) {
6
+ return value?.resourceType === 'lazy';
9
7
  }
10
- function isProviding(value) {
11
- return value?.[$providing] !== void 0;
8
+ export function isProviding(value) {
9
+ return value?.[$providing] !== undefined;
12
10
  }
13
- function isAccessor(value) {
14
- return value?.resourceType === "accessor";
11
+ export function isAccessor(value) {
12
+ return value?.resourceType === 'accessor';
15
13
  }
16
- function isMutableAccessor(value) {
17
- return value?.resourceType === "mutable-accessor";
14
+ export function isMutableAccessor(value) {
15
+ return value?.resourceType === 'mutable-accessor';
18
16
  }
19
-
20
- //#endregion
21
- export { isAccessor, isLazy, isMutableAccessor, isProviding, isSlot };
@@ -1,12 +1,21 @@
1
- import "../../data/snippet.js";
2
- import "../../tgpuBindGroupLayout.js";
3
- import "../../types.js";
4
- import "../../data/texture.js";
5
- import "../../shared/repr.js";
6
-
7
- //#region src/core/texture/externalTexture.d.ts
8
- interface TgpuExternalTexture {
9
- readonly resourceType: 'external-texture';
1
+ import { $gpuValueOf, $internal, $resolve } from '../../shared/symbols.ts';
2
+ import type { LayoutMembership } from '../../tgpuBindGroupLayout.ts';
3
+ import { type WgslExternalTexture } from '../../data/texture.ts';
4
+ import type { ResolutionCtx, SelfResolvable } from '../../types.ts';
5
+ import { type ResolvedSnippet } from '../../data/snippet.ts';
6
+ import type { Infer } from '../../shared/repr.ts';
7
+ export interface TgpuExternalTexture {
8
+ readonly resourceType: 'external-texture';
9
+ }
10
+ export declare function isExternalTexture(value: unknown): value is TgpuExternalTexture;
11
+ export declare class TgpuExternalTextureImpl implements TgpuExternalTexture, SelfResolvable {
12
+ #private;
13
+ readonly resourceType = "external-texture";
14
+ readonly [$internal] = true;
15
+ readonly schema: WgslExternalTexture;
16
+ constructor(schema: WgslExternalTexture, membership: LayoutMembership);
17
+ [$resolve](ctx: ResolutionCtx): ResolvedSnippet;
18
+ get [$gpuValueOf](): Infer<WgslExternalTexture>;
19
+ get $(): Infer<WgslExternalTexture>;
20
+ toString(): string;
10
21
  }
11
- //#endregion
12
- export { TgpuExternalTexture };
@@ -1,49 +1,49 @@
1
1
  import { $gpuValueOf, $internal, $ownSnippet, $resolve } from "../../shared/symbols.js";
2
2
  import { getName, setName } from "../../shared/meta.js";
3
- import { snip } from "../../data/snippet.js";
4
- import { inCodegenMode } from "../../execMode.js";
5
- import { valueProxyHandler } from "../valueProxyUtils.js";
6
3
  import { textureExternal } from "../../data/texture.js";
7
-
8
- //#region src/core/texture/externalTexture.ts
9
- var TgpuExternalTextureImpl = class {
10
- resourceType = "external-texture";
11
- [$internal] = true;
12
- schema;
13
- #membership;
14
- constructor(schema, membership) {
15
- this.schema = schema;
16
- this.#membership = membership;
17
- setName(this, membership.key);
18
- }
19
- [$resolve](ctx) {
20
- const id = ctx.makeUniqueIdentifier(getName(this), "global");
21
- const group = ctx.allocateLayoutEntry(this.#membership.layout);
22
- ctx.addDeclaration(`@group(${group}) @binding(${this.#membership.idx}) var ${id}: ${ctx.resolve(this.schema).value};`);
23
- return snip(id, textureExternal(), "handle");
24
- }
25
- get [$gpuValueOf]() {
26
- const schema = this.schema;
27
- return new Proxy({
28
- [$internal]: true,
29
- get [$ownSnippet]() {
30
- return snip(this, schema, "handle");
31
- },
32
- [$resolve]: (ctx) => ctx.resolve(this),
33
- toString: () => `textureExternal:${getName(this) ?? "<unnamed>"}.$`
34
- }, valueProxyHandler);
35
- }
36
- get $() {
37
- if (inCodegenMode()) return this[$gpuValueOf];
38
- throw new Error("Direct access to texture views values is possible only as part of a compute dispatch or draw call. Try .read() or .write() instead");
39
- }
40
- get value() {
41
- return this.$;
42
- }
43
- toString() {
44
- return `textureExternal:${getName(this) ?? "<unnamed>"}`;
45
- }
46
- };
47
-
48
- //#endregion
49
- export { TgpuExternalTextureImpl };
4
+ import { valueProxyHandler } from "../valueProxyUtils.js";
5
+ import { inCodegenMode } from "../../execMode.js";
6
+ import { snip } from "../../data/snippet.js";
7
+ export function isExternalTexture(value) {
8
+ return value?.resourceType === 'external-texture';
9
+ }
10
+ // --------------
11
+ // Implementation
12
+ // --------------
13
+ export class TgpuExternalTextureImpl {
14
+ resourceType = 'external-texture';
15
+ [$internal] = true;
16
+ schema;
17
+ #membership;
18
+ constructor(schema, membership) {
19
+ this.schema = schema;
20
+ this.#membership = membership;
21
+ setName(this, membership.key);
22
+ }
23
+ [$resolve](ctx) {
24
+ const id = ctx.makeUniqueIdentifier(getName(this), 'global');
25
+ const group = ctx.allocateLayoutEntry(this.#membership.layout);
26
+ ctx.addDeclaration(`@group(${group}) @binding(${this.#membership.idx}) var ${id}: ${ctx.resolve(this.schema).value};`, id);
27
+ return snip(id, textureExternal(), 'handle');
28
+ }
29
+ get [$gpuValueOf]() {
30
+ const schema = this.schema;
31
+ return new Proxy({
32
+ [$internal]: true,
33
+ get [$ownSnippet]() {
34
+ return snip(this, schema, 'handle', false);
35
+ },
36
+ [$resolve]: (ctx) => ctx.resolve(this),
37
+ toString: () => `textureExternal:${getName(this) ?? '<unnamed>'}.$`,
38
+ }, valueProxyHandler);
39
+ }
40
+ get $() {
41
+ if (inCodegenMode()) {
42
+ return this[$gpuValueOf];
43
+ }
44
+ throw new Error('Direct access to texture views values is possible only as part of a compute dispatch or draw call. Try .read() or .write() instead');
45
+ }
46
+ toString() {
47
+ return `textureExternal:${getName(this) ?? '<unnamed>'}`;
48
+ }
49
+ }
@@ -1,118 +1,173 @@
1
- import { TgpuNamable } from "../../shared/meta.js";
2
- import { $gpuValueOf, $internal } from "../../shared/symbols.js";
3
- import { Default, TypedArray, UnionToIntersection } from "../../shared/utilityTypes.js";
4
- import "../../data/snippet.js";
5
- import { TextureProps } from "./textureProps.js";
6
- import { AllowedUsages, LiteralToExtensionMap } from "./usageExtension.js";
7
- import "../../tgpuBindGroupLayout.js";
8
- import "../root/rootTypes.js";
9
- import "../../types.js";
10
- import { F32 } from "../../data/wgslTypes.js";
11
- import { TextureFormats, ViewDimensionToDimension } from "./textureFormats.js";
12
- import { TextureSchemaForDescriptor, WgslStorageTexture, WgslTexture } from "../../data/texture.js";
13
- import { Infer, ValidateTextureViewSchema } from "../../shared/repr.js";
14
-
15
- //#region src/core/texture/texture.d.ts
16
- type TextureInternals = {
17
- unwrap(): GPUTexture;
1
+ import { type TextureSchemaForDescriptor, type WgslStorageTexture, type WgslTexture } from '../../data/texture.ts';
2
+ import type { StorageFlag } from '../../extension.ts';
3
+ import { type ResolvedSnippet } from '../../data/snippet.ts';
4
+ import type { F32, Vec4f, Vec4i, Vec4u } from '../../data/wgslTypes.ts';
5
+ import type { TgpuNamable } from '../../shared/meta.ts';
6
+ import type { Infer, ValidateTextureViewSchema } from '../../shared/repr.ts';
7
+ import { type TextureFormats, type ViewDimensionToDimension } from './textureFormats.ts';
8
+ import type { TgpuDeviceOwningSoul, TgpuSoul } from '../../shared/soul.ts';
9
+ import { $gpuValueOf, $internal, $repr, $resolve, $soul } from '../../shared/symbols.ts';
10
+ import type { Default, TypedArray, UnionToIntersection } from '../../shared/utilityTypes.ts';
11
+ import type { LayoutMembership } from '../../tgpuBindGroupLayout.ts';
12
+ import type { ResolutionCtx, SelfResolvable } from '../../types.ts';
13
+ import type { ExperimentalTgpuRoot } from '../root/rootTypes.ts';
14
+ import type { TextureProps } from './textureProps.ts';
15
+ import type { AllowedUsages, LiteralToExtensionMap, RenderFlag, SampledFlag } from './usageExtension.ts';
16
+ export type TextureInternals = {
17
+ root: ExperimentalTgpuRoot;
18
+ materialize(): GPUTexture;
18
19
  };
20
+ export type TextureUsageLiteral = 'sampled' | 'storage' | 'render' | 'transient';
21
+ export interface TgpuTextureSoul<TProps extends TextureProps = TextureProps> extends TgpuDeviceOwningSoul<'texture', GPUTexture> {
22
+ readonly props: TProps;
23
+ flags: GPUTextureUsageFlags;
24
+ flagsOverridden: boolean;
25
+ readonly usages: TextureUsageLiteral[];
26
+ }
27
+ export interface TgpuTextureViewSoul<T extends WgslTexture | WgslStorageTexture | 'render' = WgslTexture | WgslStorageTexture | 'render'> extends TgpuSoul<'texture-view'> {
28
+ readonly texture: TgpuTexture;
29
+ readonly schema: T;
30
+ readonly descriptor: (TgpuTextureViewDescriptor & {
31
+ sampleType?: T extends WgslTexture ? 'float' | 'unfilterable-float' : never;
32
+ }) | undefined;
33
+ raw?: GPUTextureView | undefined;
34
+ }
19
35
  type TextureViewInternals = {
20
- readonly unwrap: (() => GPUTextureView) | undefined;
36
+ readonly unwrap: (() => GPUTextureView) | undefined;
37
+ readonly format?: GPUTextureFormat | undefined;
38
+ readonly aspect?: GPUTextureAspect | undefined;
39
+ };
40
+ export type TexelData = Vec4u | Vec4i | Vec4f;
41
+ export type ExternalImageSource = HTMLCanvasElement | HTMLImageElement | HTMLVideoElement | ImageBitmap | ImageData | OffscreenCanvas | VideoFrame;
42
+ export type TextureWriteFit = 'stretch';
43
+ export type TextureWriteOptions = {
44
+ /**
45
+ * How to handle a source whose dimensions do not match the texture.
46
+ *
47
+ * By default, mismatched writes throw. Use `'stretch'` to resample the
48
+ * source to the texture's dimensions.
49
+ */
50
+ fit?: TextureWriteFit;
21
51
  };
22
- type ExternalImageSource = HTMLCanvasElement | HTMLImageElement | HTMLVideoElement | ImageBitmap | ImageData | OffscreenCanvas | VideoFrame;
23
52
  type TgpuTextureViewDescriptor = {
24
- /**
25
- * Which {@link GPUTextureAspect | aspect(s)} of the texture are accessible to the texture view.
26
- */
27
- aspect?: GPUTextureAspect;
28
- /**
29
- * The first (most detailed) mipmap level accessible to the texture view.
30
- */
31
- baseMipLevel?: GPUIntegerCoordinate;
32
- /**
33
- * How many mipmap levels, starting with {@link GPUTextureViewDescriptor#baseMipLevel}, are accessible to
34
- * the texture view.
35
- */
36
- mipLevelCount?: GPUIntegerCoordinate;
37
- /**
38
- * The index of the first array layer accessible to the texture view.
39
- */
40
- baseArrayLayer?: GPUIntegerCoordinate;
41
- /**
42
- * How many array layers, starting with {@link GPUTextureViewDescriptor#baseArrayLayer}, are accessible
43
- * to the texture view.
44
- */
45
- arrayLayerCount?: GPUIntegerCoordinate;
46
- /**
47
- * The format of the texture view. Must be either the {@link GPUTextureDescriptor#format} of the
48
- * texture or one of the {@link GPUTextureDescriptor#viewFormats} specified during its creation.
49
- */
50
- format?: GPUTextureFormat;
53
+ /**
54
+ * Which {@link GPUTextureAspect | aspect(s)} of the texture are accessible to the texture view.
55
+ */
56
+ aspect?: GPUTextureAspect;
57
+ /**
58
+ * The first (most detailed) mipmap level accessible to the texture view.
59
+ */
60
+ baseMipLevel?: GPUIntegerCoordinate;
61
+ /**
62
+ * How many mipmap levels, starting with {@link GPUTextureViewDescriptor#baseMipLevel}, are accessible to
63
+ * the texture view.
64
+ */
65
+ mipLevelCount?: GPUIntegerCoordinate;
66
+ /**
67
+ * The index of the first array layer accessible to the texture view.
68
+ */
69
+ baseArrayLayer?: GPUIntegerCoordinate;
70
+ /**
71
+ * How many array layers, starting with {@link GPUTextureViewDescriptor#baseArrayLayer}, are accessible
72
+ * to the texture view.
73
+ */
74
+ arrayLayerCount?: GPUIntegerCoordinate;
75
+ /**
76
+ * The format of the texture view. Must be either the {@link GPUTextureDescriptor#format} of the
77
+ * texture or one of the {@link GPUTextureDescriptor#viewFormats} specified during its creation.
78
+ */
79
+ format?: GPUTextureFormat;
51
80
  };
52
81
  type DefaultViewSchema<T extends Partial<TextureProps>> = TextureSchemaForDescriptor<{
53
- dimension: Default<T['dimension'], '2d'>;
54
- sampleType: T['format'] extends keyof TextureFormats ? TextureFormats[T['format']]['channelType'] : TextureFormats[keyof TextureFormats]['channelType'];
55
- multisampled: Default<T['sampleCount'], 1> extends 1 ? false : true;
82
+ dimension: Default<T['dimension'], '2d'>;
83
+ sampleType: T['format'] extends keyof TextureFormats ? TextureFormats[T['format']]['channelType'] : TextureFormats[keyof TextureFormats]['channelType'];
84
+ multisampled: Default<T['sampleCount'], 1> extends 1 ? false : true;
56
85
  }>;
57
86
  type BaseDimension<T extends string> = T extends keyof ViewDimensionToDimension ? ViewDimensionToDimension[T] : never;
58
87
  type OptionalDimension<T extends string> = T extends '2d' | '2d-array' | 'cube' | 'cube-array' ? {
59
- dimension?: BaseDimension<T>;
88
+ dimension?: BaseDimension<T>;
60
89
  } : {
61
- dimension: BaseDimension<T>;
90
+ dimension: BaseDimension<T>;
62
91
  };
63
92
  type MultisampledProps<T extends WgslTexture> = T['multisampled'] extends true ? OptionalDimension<T['dimension']> & {
64
- sampleCount: 4;
93
+ sampleCount: 4;
65
94
  } : OptionalDimension<T['dimension']> & {
66
- sampleCount?: 1;
95
+ sampleCount?: 1;
67
96
  };
68
- type PropsForSchema<T extends WgslTexture | WgslStorageTexture> = T extends WgslTexture ? {
69
- size: readonly number[];
70
- format: GPUTextureFormat;
97
+ export type PropsForSchema<T extends WgslTexture | WgslStorageTexture> = T extends WgslTexture ? {
98
+ size: readonly number[];
99
+ format: GPUTextureFormat;
71
100
  } & MultisampledProps<T> : T extends WgslStorageTexture ? {
72
- size: readonly number[];
73
- format: T['format'];
101
+ size: readonly number[];
102
+ format: T['format'];
74
103
  } & OptionalDimension<T['dimension']> : never;
75
104
  type CopyCompatibleTexture<T extends TextureProps> = TgpuTexture<{
76
- size: T['size'];
77
- format: T['format'];
78
- sampleCount?: T['sampleCount'];
105
+ size: T['size'];
106
+ format: T['format'];
107
+ sampleCount?: T['sampleCount'];
79
108
  }>;
80
- interface TgpuTexture<TProps extends TextureProps = any> extends TgpuNamable {
81
- readonly [$internal]: TextureInternals;
82
- readonly resourceType: 'texture';
83
- readonly props: TProps;
84
- readonly destroyed: boolean;
85
- readonly usableAsStorage: boolean;
86
- readonly usableAsSampled: boolean;
87
- readonly usableAsRender: boolean;
88
- $usage<T extends AllowedUsages<TProps>[]>(...usages: T): this & UnionToIntersection<LiteralToExtensionMap[T[number]]>;
89
- createView(...args: this['usableAsSampled'] extends true ? [] : [ValidateTextureViewSchema<this, WgslTexture>]): TgpuTextureView<DefaultViewSchema<TProps>>;
90
- createView(schema: 'render', viewDescriptor?: TgpuTextureViewDescriptor): TgpuTextureRenderView;
91
- createView<T extends WgslTexture>(schema: ValidateTextureViewSchema<this, T>, viewDescriptor?: TgpuTextureViewDescriptor & {
92
- sampleType?: T['sampleType'] extends F32 ? 'float' | 'unfilterable-float' : never;
93
- }): TgpuTextureView<T>;
94
- createView<T extends WgslStorageTexture>(schema: ValidateTextureViewSchema<this, T>, viewDescriptor?: TgpuTextureViewDescriptor): TgpuTextureView<T>;
95
- clear(mipLevel?: number | 'all'): void;
96
- generateMipmaps(baseMipLevel?: number, mipLevels?: number): void;
97
- write(source: ExternalImageSource | ExternalImageSource[]): void;
98
- write(source: ArrayBuffer | TypedArray | DataView, mipLevel?: number): void;
99
- copyFrom<T extends CopyCompatibleTexture<TProps>>(source: T): void;
100
- destroy(): void;
109
+ export interface TgpuTexture<TProps extends TextureProps = any> extends TgpuNamable {
110
+ readonly [$internal]: TextureInternals;
111
+ readonly [$soul]: TgpuTextureSoul<TProps>;
112
+ readonly resourceType: 'texture';
113
+ readonly props: TProps;
114
+ readonly destroyed: boolean;
115
+ readonly usableAsStorage: boolean;
116
+ readonly usableAsSampled: boolean;
117
+ readonly usableAsRender: boolean;
118
+ $usage<T extends AllowedUsages<TProps>[]>(...usages: T): this & UnionToIntersection<LiteralToExtensionMap[T[number]]>;
119
+ $overrideFlags(flags: GPUTextureUsageFlags): this & StorageFlag & SampledFlag & RenderFlag;
120
+ createView(...args: this['usableAsSampled'] extends true ? [] : [ValidateTextureViewSchema<this, WgslTexture>]): TgpuTextureView<DefaultViewSchema<TProps>>;
121
+ createView(schema: 'render', viewDescriptor?: TgpuTextureViewDescriptor): TgpuTextureRenderView;
122
+ createView<T extends WgslTexture>(schema: ValidateTextureViewSchema<this, T>, viewDescriptor?: TgpuTextureViewDescriptor & {
123
+ sampleType?: T['sampleType'] extends F32 ? 'float' | 'unfilterable-float' : never;
124
+ }): TgpuTextureView<T>;
125
+ createView<T extends WgslStorageTexture>(schema: ValidateTextureViewSchema<this, T>, viewDescriptor?: TgpuTextureViewDescriptor): TgpuTextureView<T>;
126
+ clear(mipLevel?: number | 'all'): void;
127
+ generateMipmaps(baseMipLevel?: number, mipLevels?: number): void;
128
+ write(source: ExternalImageSource | ExternalImageSource[], options?: TextureWriteOptions): void;
129
+ write(source: ArrayBuffer | TypedArray | DataView, mipLevel?: number): void;
130
+ copyFrom<T extends CopyCompatibleTexture<TProps>>(source: T): void;
131
+ destroy(): void;
132
+ }
133
+ export interface TgpuTextureView<TSchema extends WgslStorageTexture | WgslTexture = WgslStorageTexture | WgslTexture> extends TgpuNamable {
134
+ readonly [$internal]: TextureViewInternals;
135
+ readonly resourceType: 'texture-view';
136
+ readonly schema: TSchema;
137
+ readonly size?: number[] | undefined;
138
+ readonly [$gpuValueOf]: Infer<TSchema>;
139
+ $: Infer<TSchema>;
140
+ toString(): string;
141
+ }
142
+ export interface TgpuTextureRenderView {
143
+ readonly [$internal]: TextureViewInternals;
144
+ readonly resourceType: 'texture-view';
145
+ readonly descriptor: TgpuTextureViewDescriptor;
101
146
  }
102
- interface TgpuTextureView<TSchema extends WgslStorageTexture | WgslTexture = WgslStorageTexture | WgslTexture> extends TgpuNamable {
103
- readonly [$internal]: TextureViewInternals;
104
- readonly resourceType: 'texture-view';
105
- readonly schema: TSchema;
106
- readonly size?: number[] | undefined;
107
- readonly [$gpuValueOf]: Infer<TSchema>;
108
- value: Infer<TSchema>;
109
- $: Infer<TSchema>;
147
+ export declare function INTERNAL_createTexture(props: TextureProps, root: ExperimentalTgpuRoot, rawTexture?: GPUTexture): TgpuTexture<TextureProps>;
148
+ export declare function isTexture(value: unknown): value is TgpuTexture;
149
+ export declare function isTextureView(value: unknown): value is TgpuTextureView;
150
+ export declare class TgpuLaidOutTextureViewImpl<T extends WgslTexture | WgslStorageTexture> implements TgpuTextureView<T>, SelfResolvable {
151
+ #private;
152
+ /** Type-token, not available at runtime */
153
+ readonly [$repr]: Infer<T>;
154
+ readonly [$internal]: {
155
+ unwrap: undefined;
156
+ };
157
+ readonly resourceType: "texture-view";
158
+ readonly schema: T;
159
+ constructor(schema: T, membership: LayoutMembership);
160
+ toString(): string;
161
+ [$resolve](ctx: ResolutionCtx): ResolvedSnippet;
162
+ get [$gpuValueOf](): Infer<T>;
163
+ get $(): Infer<T>;
164
+ $name(label: string): this;
110
165
  }
111
- interface TgpuTextureRenderView {
112
- readonly [$internal]: TextureViewInternals;
113
- readonly resourceType: 'texture-view';
114
- readonly descriptor: TgpuTextureViewDescriptor;
166
+ export declare class TgpuTextureRenderViewImpl implements TgpuTextureRenderView {
167
+ readonly [$internal]: TextureViewInternals;
168
+ readonly [$soul]: TgpuTextureViewSoul<'render'>;
169
+ readonly resourceType: "texture-view";
170
+ constructor(baseTexture: TgpuTexture, descriptor?: TgpuTextureViewDescriptor);
171
+ get descriptor(): TgpuTextureViewDescriptor;
115
172
  }
116
- declare function isTexture(value: unknown): value is TgpuTexture;
117
- //#endregion
118
- export { PropsForSchema, TextureInternals, TgpuTexture, TgpuTextureRenderView, TgpuTextureView, isTexture };
173
+ export {};