typegpu 0.11.9 → 0.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. package/bin.mjs +28 -6
  2. package/builtin.d.ts +51 -53
  3. package/builtin.js +30 -34
  4. package/common/fullScreenTriangle.d.ts +2 -10
  5. package/common/fullScreenTriangle.js +20 -28
  6. package/common/index.d.ts +2 -9
  7. package/common/index.js +3 -12
  8. package/common/writeSoA.d.ts +11 -12
  9. package/common/writeSoA.js +88 -76
  10. package/core/buffer/buffer.d.ts +79 -62
  11. package/core/buffer/buffer.js +283 -205
  12. package/core/buffer/bufferBinding.d.ts +71 -0
  13. package/core/buffer/bufferBinding.js +154 -0
  14. package/core/buffer/bufferUsage.d.ts +14 -45
  15. package/core/buffer/bufferUsage.js +1 -171
  16. package/core/buffer/laidOutBuffer.d.ts +25 -0
  17. package/core/buffer/laidOutBuffer.js +55 -0
  18. package/core/commandEncoder/attachments.d.ts +125 -0
  19. package/core/commandEncoder/attachments.js +29 -0
  20. package/core/commandEncoder/commandEncoder.d.ts +53 -0
  21. package/core/commandEncoder/commandEncoder.js +56 -0
  22. package/core/commandEncoder/computePass.d.ts +58 -0
  23. package/core/commandEncoder/computePass.js +63 -0
  24. package/core/commandEncoder/renderPass.d.ts +121 -0
  25. package/core/commandEncoder/renderPass.js +196 -0
  26. package/core/constant/tgpuConstant.d.ts +26 -26
  27. package/core/constant/tgpuConstant.js +76 -65
  28. package/core/declare/tgpuDeclare.d.ts +3 -6
  29. package/core/declare/tgpuDeclare.js +36 -36
  30. package/core/function/autoIO.d.ts +61 -33
  31. package/core/function/autoIO.js +68 -73
  32. package/core/function/comptime.d.ts +11 -13
  33. package/core/function/comptime.js +60 -52
  34. package/core/function/createCallableSchema.d.ts +16 -0
  35. package/core/function/createCallableSchema.js +50 -40
  36. package/core/function/dualImpl.d.ts +44 -0
  37. package/core/function/dualImpl.js +71 -50
  38. package/core/function/entryInputRouter.d.ts +26 -0
  39. package/core/function/entryInputRouter.js +31 -33
  40. package/core/function/extractArgs.d.ts +38 -0
  41. package/core/function/extractArgs.js +202 -200
  42. package/core/function/fnCore.d.ts +44 -5
  43. package/core/function/fnCore.js +148 -93
  44. package/core/function/fnTypes.d.ts +31 -29
  45. package/core/function/fnTypes.js +1 -0
  46. package/core/function/ioSchema.d.ts +12 -10
  47. package/core/function/ioSchema.js +65 -47
  48. package/core/function/shelllessImpl.d.ts +9 -12
  49. package/core/function/shelllessImpl.js +17 -22
  50. package/core/function/templateUtils.d.ts +2 -0
  51. package/core/function/templateUtils.js +9 -8
  52. package/core/function/tgpuComputeFn.d.ts +26 -28
  53. package/core/function/tgpuComputeFn.js +47 -48
  54. package/core/function/tgpuFn.d.ts +34 -37
  55. package/core/function/tgpuFn.js +179 -153
  56. package/core/function/tgpuFragmentFn.d.ts +52 -53
  57. package/core/function/tgpuFragmentFn.js +63 -56
  58. package/core/function/tgpuVertexFn.d.ts +36 -39
  59. package/core/function/tgpuVertexFn.js +56 -53
  60. package/core/pipeline/computePipeline.d.ts +141 -53
  61. package/core/pipeline/computePipeline.js +291 -225
  62. package/core/pipeline/connectAttachmentToShader.d.ts +4 -0
  63. package/core/pipeline/connectAttachmentToShader.js +25 -22
  64. package/core/pipeline/connectTargetsToShader.d.ts +3 -0
  65. package/core/pipeline/connectTargetsToShader.js +29 -27
  66. package/core/pipeline/drawState.d.ts +52 -0
  67. package/core/pipeline/drawState.js +225 -0
  68. package/core/pipeline/performanceTracker.d.ts +14 -0
  69. package/core/pipeline/performanceTracker.js +34 -0
  70. package/core/pipeline/pipelineUtils.d.ts +18 -0
  71. package/core/pipeline/pipelineUtils.js +54 -25
  72. package/core/pipeline/priors.d.ts +1 -0
  73. package/core/pipeline/priors.js +12 -0
  74. package/core/pipeline/renderPipeline.d.ts +246 -261
  75. package/core/pipeline/renderPipeline.js +487 -480
  76. package/core/pipeline/timeable.d.ts +28 -18
  77. package/core/pipeline/timeable.js +90 -52
  78. package/core/pipeline/typeGuards.d.ts +17 -0
  79. package/core/pipeline/typeGuards.js +52 -22
  80. package/core/pipeline/webgpuLimitations.d.ts +10 -0
  81. package/core/pipeline/webgpuLimitations.js +81 -0
  82. package/core/querySet/querySet.d.ts +26 -21
  83. package/core/querySet/querySet.js +127 -103
  84. package/core/rawCodeSnippet/tgpuRawCodeSnippet.d.ts +13 -18
  85. package/core/rawCodeSnippet/tgpuRawCodeSnippet.js +89 -90
  86. package/core/resolve/externals.d.ts +25 -8
  87. package/core/resolve/externals.js +78 -54
  88. package/core/resolve/namespace.d.ts +22 -25
  89. package/core/resolve/namespace.js +16 -21
  90. package/core/resolve/resolvableString.d.ts +7 -0
  91. package/core/resolve/resolvableString.js +13 -0
  92. package/core/resolve/resolveData.d.ts +10 -0
  93. package/core/resolve/resolveData.js +162 -121
  94. package/core/resolve/stitch.d.ts +8 -0
  95. package/core/resolve/stitch.js +23 -21
  96. package/core/resolve/tgpuResolve.d.ts +55 -53
  97. package/core/resolve/tgpuResolve.js +106 -53
  98. package/core/root/configurableImpl.d.ts +10 -0
  99. package/core/root/configurableImpl.js +17 -19
  100. package/core/root/init.d.ts +76 -38
  101. package/core/root/init.js +346 -455
  102. package/core/root/rootTypes.d.ts +461 -636
  103. package/core/root/rootTypes.js +1 -0
  104. package/core/sampler/sampler.d.ts +50 -31
  105. package/core/sampler/sampler.js +120 -113
  106. package/core/simulate/tgpuSimulate.d.ts +9 -12
  107. package/core/simulate/tgpuSimulate.js +68 -71
  108. package/core/slot/accessor.d.ts +36 -13
  109. package/core/slot/accessor.js +138 -91
  110. package/core/slot/internalSlots.d.ts +2 -0
  111. package/core/slot/internalSlots.js +1 -6
  112. package/core/slot/lazy.d.ts +2 -6
  113. package/core/slot/lazy.js +71 -39
  114. package/core/slot/slot.d.ts +2 -6
  115. package/core/slot/slot.js +45 -38
  116. package/core/slot/slotTypes.d.ts +78 -80
  117. package/core/slot/slotTypes.js +11 -16
  118. package/core/texture/externalTexture.d.ts +20 -11
  119. package/core/texture/externalTexture.js +46 -46
  120. package/core/texture/texture.d.ts +152 -97
  121. package/core/texture/texture.js +407 -314
  122. package/core/texture/textureFormats.d.ts +42 -23
  123. package/core/texture/textureFormats.js +104 -75
  124. package/core/texture/textureProps.d.ts +7 -10
  125. package/core/texture/textureProps.js +1 -0
  126. package/core/texture/textureUtils.d.ts +8 -0
  127. package/core/texture/textureUtils.js +185 -179
  128. package/core/texture/usageExtension.d.ts +21 -18
  129. package/core/texture/usageExtension.js +13 -17
  130. package/core/unroll/tgpuUnroll.d.ts +20 -19
  131. package/core/unroll/tgpuUnroll.js +82 -91
  132. package/core/valueProxyUtils.d.ts +3 -0
  133. package/core/valueProxyUtils.js +52 -41
  134. package/core/variable/tgpuVariable.d.ts +26 -27
  135. package/core/variable/tgpuVariable.js +93 -96
  136. package/core/vertexLayout/connectAttributesToShader.d.ts +9 -0
  137. package/core/vertexLayout/connectAttributesToShader.js +61 -56
  138. package/core/vertexLayout/vertexAttribute.d.ts +21 -17
  139. package/core/vertexLayout/vertexAttribute.js +1 -0
  140. package/core/vertexLayout/vertexLayout.d.ts +24 -18
  141. package/core/vertexLayout/vertexLayout.js +130 -99
  142. package/core/whitespaces.d.ts +2 -0
  143. package/core/whitespaces.js +16 -0
  144. package/data/alignIO.d.ts +7 -0
  145. package/data/alignIO.js +13 -13
  146. package/data/alignmentOf.d.ts +5 -8
  147. package/data/alignmentOf.js +90 -75
  148. package/data/array.d.ts +17 -9
  149. package/data/array.js +57 -40
  150. package/data/atomic.d.ts +2 -7
  151. package/data/atomic.js +26 -23
  152. package/data/attributes.d.ts +19 -21
  153. package/data/attributes.js +192 -132
  154. package/data/autoStruct.d.ts +36 -3
  155. package/data/autoStruct.js +84 -81
  156. package/data/compiledIO.d.ts +5 -0
  157. package/data/compiledIO.js +231 -215
  158. package/data/dataIO.d.ts +13 -11
  159. package/data/dataIO.js +643 -589
  160. package/data/dataTypes.d.ts +83 -65
  161. package/data/dataTypes.js +66 -68
  162. package/data/deepEqual.d.ts +2 -7
  163. package/data/deepEqual.js +80 -55
  164. package/data/disarray.d.ts +6 -10
  165. package/data/disarray.js +52 -46
  166. package/data/float16Conversion.d.ts +4 -0
  167. package/data/float16Conversion.js +7 -0
  168. package/data/generalizeFn.d.ts +25 -0
  169. package/data/generalizeFn.js +89 -0
  170. package/data/getLongestContiguousPrefix.d.ts +4 -8
  171. package/data/getLongestContiguousPrefix.js +6 -11
  172. package/data/index.d.ts +30 -31
  173. package/data/index.js +39 -172
  174. package/data/instanceToSchema.d.ts +24 -27
  175. package/data/instanceToSchema.js +1 -0
  176. package/data/isContiguous.d.ts +4 -8
  177. package/data/isContiguous.js +6 -11
  178. package/data/matrix.d.ts +21 -21
  179. package/data/matrix.js +513 -505
  180. package/data/numberOps.d.ts +5 -0
  181. package/data/numberOps.js +21 -21
  182. package/data/numeric.d.ts +21 -12
  183. package/data/numeric.js +287 -197
  184. package/data/offsetUtils.d.ts +9 -13
  185. package/data/offsetUtils.js +204 -144
  186. package/data/offsets.d.ts +8 -0
  187. package/data/offsets.js +33 -33
  188. package/data/partialIO.d.ts +13 -8
  189. package/data/partialIO.js +124 -113
  190. package/data/ptr.d.ts +12 -12
  191. package/data/ptr.js +42 -44
  192. package/data/ref.d.ts +40 -27
  193. package/data/ref.js +125 -95
  194. package/data/sampler.d.ts +99 -101
  195. package/data/sampler.js +17 -21
  196. package/data/schemaCallWrapper.d.ts +19 -0
  197. package/data/schemaCallWrapper.js +31 -26
  198. package/data/schemaMemoryLayout.d.ts +8 -0
  199. package/data/schemaMemoryLayout.js +213 -185
  200. package/data/sizeOf.d.ts +4 -8
  201. package/data/sizeOf.js +6 -11
  202. package/data/snippet.d.ts +96 -20
  203. package/data/snippet.js +75 -86
  204. package/data/struct.d.ts +4 -7
  205. package/data/struct.js +51 -39
  206. package/data/texture.d.ts +253 -250
  207. package/data/texture.js +238 -200
  208. package/data/unstruct.d.ts +2 -7
  209. package/data/unstruct.js +43 -37
  210. package/data/vector.d.ts +33 -21
  211. package/data/vector.js +234 -221
  212. package/data/vectorImpl.d.ts +231 -0
  213. package/data/vectorImpl.js +563 -515
  214. package/data/vectorOps.d.ts +25 -0
  215. package/data/vectorOps.js +118 -669
  216. package/data/vertexFormatData.d.ts +181 -184
  217. package/data/vertexFormatData.js +104 -106
  218. package/data/wgslTypes.d.ts +665 -600
  219. package/data/wgslTypes.js +220 -198
  220. package/errors.d.ts +50 -24
  221. package/errors.js +146 -126
  222. package/execMode.d.ts +16 -0
  223. package/execMode.js +47 -40
  224. package/extension.d.ts +13 -8
  225. package/extension.js +10 -16
  226. package/getGPUValue.d.ts +1 -0
  227. package/getGPUValue.js +2 -7
  228. package/index.d.ts +28 -68
  229. package/index.js +8 -28
  230. package/indexNamedExports.d.ts +69 -42
  231. package/indexNamedExports.js +25 -0
  232. package/internal.d.ts +16 -0
  233. package/internal.js +12 -0
  234. package/mathUtils.d.ts +5 -0
  235. package/mathUtils.js +7 -11
  236. package/memo.d.ts +11 -0
  237. package/memo.js +20 -22
  238. package/minify.d.ts +5 -0
  239. package/minify.js +93 -0
  240. package/nameUtils.d.ts +29 -0
  241. package/nameUtils.js +427 -394
  242. package/package.json +5 -1
  243. package/resolutionCtx.d.ts +162 -22
  244. package/resolutionCtx.js +911 -629
  245. package/serial/registry.d.ts +15 -0
  246. package/serial/registry.js +106 -0
  247. package/serial/restore.d.ts +49 -0
  248. package/serial/restore.js +68 -0
  249. package/serial/schema.d.ts +58 -0
  250. package/serial/schema.js +209 -0
  251. package/serial/types.d.ts +5 -0
  252. package/serial/types.js +1 -0
  253. package/shared/env.d.ts +9 -0
  254. package/shared/env.js +9 -12
  255. package/shared/generators.d.ts +4 -0
  256. package/shared/generators.js +10 -12
  257. package/shared/meta.d.ts +29 -14
  258. package/shared/meta.js +71 -55
  259. package/shared/normalizeMetadata.d.ts +32 -27
  260. package/shared/normalizeMetadata.js +23 -36
  261. package/shared/repr.d.ts +73 -55
  262. package/shared/repr.js +1 -0
  263. package/shared/soul.d.ts +17 -0
  264. package/shared/soul.js +1 -0
  265. package/shared/stringify.d.ts +2 -0
  266. package/shared/stringify.js +29 -20
  267. package/shared/symbols.d.ts +26 -20
  268. package/shared/symbols.js +79 -79
  269. package/shared/tseynit.d.ts +2 -0
  270. package/shared/tseynit.js +160 -75
  271. package/shared/utilityTypes.d.ts +30 -14
  272. package/shared/utilityTypes.js +2 -6
  273. package/shared/vertexFormat.d.ts +41 -43
  274. package/shared/vertexFormat.js +59 -62
  275. package/std/array.d.ts +2 -7
  276. package/std/array.js +18 -23
  277. package/std/atomic.d.ts +14 -18
  278. package/std/atomic.js +96 -95
  279. package/std/bitcast.d.ts +193 -10
  280. package/std/bitcast.js +309 -39
  281. package/std/boolean.d.ts +19 -33
  282. package/std/boolean.js +296 -292
  283. package/std/copy.d.ts +2 -7
  284. package/std/copy.js +27 -24
  285. package/std/derivative.d.ts +11 -15
  286. package/std/derivative.js +56 -79
  287. package/std/discard.d.ts +1 -6
  288. package/std/discard.js +7 -14
  289. package/std/environment.d.ts +19 -14
  290. package/std/environment.js +71 -51
  291. package/std/extensions.d.ts +2 -8
  292. package/std/extensions.js +10 -11
  293. package/std/index.d.ts +20 -24
  294. package/std/index.js +32 -187
  295. package/std/matrix.d.ts +6 -12
  296. package/std/matrix.js +60 -69
  297. package/std/numeric.d.ts +150 -146
  298. package/std/numeric.js +771 -727
  299. package/std/operators.d.ts +19 -27
  300. package/std/operators.js +195 -194
  301. package/std/packing.d.ts +5 -11
  302. package/std/packing.js +67 -75
  303. package/std/range.d.ts +6 -11
  304. package/std/range.js +48 -36
  305. package/std/subgroup.d.ts +33 -37
  306. package/std/subgroup.js +180 -217
  307. package/std/texture.d.ts +70 -38
  308. package/std/texture.js +176 -172
  309. package/taskQueue.d.ts +6 -0
  310. package/taskQueue.js +30 -0
  311. package/tgpu.d.ts +16 -0
  312. package/tgpu.js +17 -44
  313. package/tgpuBindGroupLayout.d.ts +132 -152
  314. package/tgpuBindGroupLayout.js +346 -268
  315. package/tgpuLogger.d.ts +34 -0
  316. package/tgpuLogger.js +64 -0
  317. package/tgpuUnstable.d.ts +16 -22
  318. package/tgpuUnstable.js +13 -35
  319. package/tgsl/accessIndex.d.ts +2 -0
  320. package/tgsl/accessIndex.js +76 -33
  321. package/tgsl/accessProp.d.ts +2 -0
  322. package/tgsl/accessProp.js +142 -101
  323. package/tgsl/accessStructProp.d.ts +5 -0
  324. package/tgsl/accessStructProp.js +13 -15
  325. package/tgsl/consoleLog/deserializers.d.ts +13 -0
  326. package/tgsl/consoleLog/deserializers.js +119 -103
  327. package/tgsl/consoleLog/logGenerator.d.ts +21 -0
  328. package/tgsl/consoleLog/logGenerator.js +85 -80
  329. package/tgsl/consoleLog/serializers.d.ts +21 -0
  330. package/tgsl/consoleLog/serializers.js +119 -100
  331. package/tgsl/consoleLog/types.d.ts +40 -39
  332. package/tgsl/consoleLog/types.js +1 -0
  333. package/tgsl/conversion.d.ts +33 -0
  334. package/tgsl/conversion.js +271 -216
  335. package/tgsl/forOfUtils.d.ts +15 -0
  336. package/tgsl/forOfUtils.js +85 -70
  337. package/tgsl/generationHelpers.d.ts +22 -39
  338. package/tgsl/generationHelpers.js +85 -58
  339. package/tgsl/infixDispatch.d.ts +70 -0
  340. package/tgsl/infixDispatch.js +48 -46
  341. package/tgsl/jsPolyfills.d.ts +16 -19
  342. package/tgsl/jsPolyfills.js +44 -42
  343. package/tgsl/makeDereferenceable.d.ts +48 -0
  344. package/tgsl/makeDereferenceable.js +86 -0
  345. package/tgsl/makeResolvable.d.ts +22 -0
  346. package/tgsl/makeResolvable.js +33 -0
  347. package/tgsl/shaderGenerator.d.ts +77 -17
  348. package/tgsl/shaderGenerator.js +1 -0
  349. package/tgsl/shellless.d.ts +6 -9
  350. package/tgsl/shellless.js +73 -43
  351. package/tgsl/wgslGenerator.d.ts +66 -59
  352. package/tgsl/wgslGenerator.js +1345 -760
  353. package/types.d.ts +287 -222
  354. package/types.js +61 -44
  355. package/unwrapper.d.ts +31 -26
  356. package/unwrapper.js +1 -0
  357. package/wgslExtensions.d.ts +3 -5
  358. package/wgslExtensions.js +12 -16
  359. package/_virtual/rolldown_runtime.js +0 -13
  360. package/core/buffer/bufferShorthand.d.ts +0 -50
  361. package/core/buffer/bufferShorthand.js +0 -55
  362. package/core/pipeline/applyPipelineState.js +0 -37
  363. package/core/pipeline/limitsOverflow.js +0 -13
  364. package/package.js +0 -5
  365. package/tgsl/shaderGenerator_members.d.ts +0 -33
  366. package/tgsl/shaderGenerator_members.js +0 -12
@@ -1,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 {};