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
package/data/texture.js CHANGED
@@ -1,208 +1,246 @@
1
1
  import { $internal, $repr } from "../shared/symbols.js";
2
2
  import { f32 } from "./numeric.js";
3
-
4
- //#region src/data/texture.ts
5
- function textureDescriptorToSchema(desc) {
6
- if ("multisampled" in desc) {
7
- if (desc.multisampled) {
8
- if (desc.dimension === "2d") return textureMultisampled2d(desc.sampleType);
9
- throw new Error(`Multisampled textures only support '2d' dimension, got '${desc.dimension}'`);
10
- }
11
- switch (desc.dimension) {
12
- case "1d": return texture1d(desc.sampleType);
13
- case "2d": return texture2d(desc.sampleType);
14
- case "2d-array": return texture2dArray(desc.sampleType);
15
- case "3d": return texture3d(desc.sampleType);
16
- case "cube": return textureCube(desc.sampleType);
17
- case "cube-array": return textureCubeArray(desc.sampleType);
18
- default: throw new Error(`Unsupported texture dimension: '${desc.dimension}'`);
19
- }
20
- }
21
- if (!("access" in desc)) throw new Error("Descriptor is neither a sampled nor a storage texture");
22
- switch (desc.dimension) {
23
- case "1d": return textureStorage1d(desc.format, desc.access);
24
- case "2d": return textureStorage2d(desc.format, desc.access);
25
- case "2d-array": return textureStorage2dArray(desc.format, desc.access);
26
- case "3d": return textureStorage3d(desc.format, desc.access);
27
- default: throw new Error(`Unsupported storage texture dimension: '${desc.dimension}'`);
28
- }
3
+ export function textureDescriptorToSchema(desc) {
4
+ if ('multisampled' in desc) {
5
+ if (desc.multisampled) {
6
+ if (desc.dimension === '2d') {
7
+ return textureMultisampled2d(desc.sampleType);
8
+ }
9
+ throw new Error(`Multisampled textures only support '2d' dimension, got '${desc.dimension}'`);
10
+ }
11
+ switch (desc.dimension) {
12
+ case '1d':
13
+ return texture1d(desc.sampleType);
14
+ case '2d':
15
+ return texture2d(desc.sampleType);
16
+ case '2d-array':
17
+ return texture2dArray(desc.sampleType);
18
+ case '3d':
19
+ return texture3d(desc.sampleType);
20
+ case 'cube':
21
+ return textureCube(desc.sampleType);
22
+ case 'cube-array':
23
+ return textureCubeArray(desc.sampleType);
24
+ default:
25
+ throw new Error(
26
+ // @ts-expect-error
27
+ `Unsupported texture dimension: '${desc.dimension}'`);
28
+ }
29
+ }
30
+ if (!('access' in desc)) {
31
+ throw new Error('Descriptor is neither a sampled nor a storage texture');
32
+ }
33
+ switch (desc.dimension) {
34
+ case '1d':
35
+ return textureStorage1d(desc.format, desc.access);
36
+ case '2d':
37
+ return textureStorage2d(desc.format, desc.access);
38
+ case '2d-array':
39
+ return textureStorage2dArray(desc.format, desc.access);
40
+ case '3d':
41
+ return textureStorage3d(desc.format, desc.access);
42
+ default:
43
+ throw new Error(
44
+ // @ts-expect-error
45
+ `Unsupported storage texture dimension: '${desc.dimension}'`);
46
+ }
29
47
  }
30
48
  function createTexture(type, props) {
31
- const sampleTypes = type.startsWith("texture_depth") ? [
32
- "depth",
33
- "float",
34
- "unfilterable-float"
35
- ] : props.sampleType.type === "i32" ? ["sint"] : props.sampleType.type === "u32" ? ["uint"] : ["float", "unfilterable-float"];
36
- return {
37
- [$internal]: {},
38
- [$repr]: void 0,
39
- type,
40
- bindingSampleType: sampleTypes,
41
- ...props
42
- };
49
+ const isDepth = type.startsWith('texture_depth');
50
+ const sampleTypes = isDepth
51
+ ? ['depth', 'float', 'unfilterable-float']
52
+ : props.sampleType.type === 'i32'
53
+ ? ['sint']
54
+ : props.sampleType.type === 'u32'
55
+ ? ['uint']
56
+ : ['float', 'unfilterable-float'];
57
+ return {
58
+ [$internal]: {},
59
+ [$repr]: undefined,
60
+ type,
61
+ bindingSampleType: sampleTypes,
62
+ ...props,
63
+ };
43
64
  }
44
65
  function createStorageTexture(type, props) {
45
- return {
46
- [$internal]: {},
47
- [$repr]: void 0,
48
- type,
49
- ...props
50
- };
51
- }
52
- const textureCache = /* @__PURE__ */ new Map();
53
- const accessModeMap = {
54
- "write-only": "write",
55
- "read-only": "read",
56
- "read-write": "read_write"
66
+ return {
67
+ [$internal]: {},
68
+ [$repr]: undefined,
69
+ type,
70
+ ...props,
71
+ };
72
+ }
73
+ const textureCache = new Map();
74
+ export const accessModeMap = {
75
+ 'write-only': 'write',
76
+ 'read-only': 'read',
77
+ 'read-write': 'read_write',
57
78
  };
58
79
  function getOrCreate(key, factory) {
59
- let cached = textureCache.get(key);
60
- if (!cached) {
61
- cached = factory();
62
- textureCache.set(key, cached);
63
- }
64
- return cached;
65
- }
66
- function texture1d(sampleType) {
67
- const actualSampleType = sampleType || f32;
68
- return getOrCreate(`texture_1d<${actualSampleType.type}>`, () => createTexture("texture_1d", {
69
- dimension: "1d",
70
- sampleType: actualSampleType,
71
- multisampled: false
72
- }));
73
- }
74
- function texture2d(sampleType) {
75
- const actualSampleType = sampleType || f32;
76
- return getOrCreate(`texture_2d<${actualSampleType.type}>`, () => createTexture("texture_2d", {
77
- dimension: "2d",
78
- sampleType: actualSampleType,
79
- multisampled: false
80
- }));
81
- }
82
- function textureMultisampled2d(sampleType) {
83
- const actualSampleType = sampleType || f32;
84
- return getOrCreate(`texture_multisampled_2d<${actualSampleType.type}>`, () => createTexture("texture_multisampled_2d", {
85
- dimension: "2d",
86
- sampleType: actualSampleType,
87
- multisampled: true
88
- }));
89
- }
90
- function texture2dArray(sampleType) {
91
- const actualSampleType = sampleType || f32;
92
- return getOrCreate(`texture_2d_array<${actualSampleType.type}>`, () => createTexture("texture_2d_array", {
93
- dimension: "2d-array",
94
- sampleType: actualSampleType,
95
- multisampled: false
96
- }));
97
- }
98
- function textureCube(sampleType) {
99
- const actualSampleType = sampleType || f32;
100
- return getOrCreate(`texture_cube<${actualSampleType.type}>`, () => createTexture("texture_cube", {
101
- dimension: "cube",
102
- sampleType: actualSampleType,
103
- multisampled: false
104
- }));
105
- }
106
- function textureCubeArray(sampleType) {
107
- const actualSampleType = sampleType || f32;
108
- return getOrCreate(`texture_cube_array<${actualSampleType.type}>`, () => createTexture("texture_cube_array", {
109
- dimension: "cube-array",
110
- sampleType: actualSampleType,
111
- multisampled: false
112
- }));
113
- }
114
- function texture3d(sampleType) {
115
- const actualSampleType = sampleType || f32;
116
- return getOrCreate(`texture_3d<${actualSampleType.type}>`, () => createTexture("texture_3d", {
117
- dimension: "3d",
118
- sampleType: actualSampleType,
119
- multisampled: false
120
- }));
121
- }
122
- function textureStorage1d(format, access) {
123
- const actualAccess = access || "write-only";
124
- return getOrCreate(`texture_storage_1d<${format}, ${accessModeMap[actualAccess]}>`, () => createStorageTexture("texture_storage_1d", {
125
- dimension: "1d",
126
- format,
127
- access: actualAccess
128
- }));
129
- }
130
- function textureStorage2d(format, access) {
131
- const actualAccess = access || "write-only";
132
- return getOrCreate(`texture_storage_2d<${format}, ${accessModeMap[actualAccess]}>`, () => createStorageTexture("texture_storage_2d", {
133
- dimension: "2d",
134
- format,
135
- access: actualAccess
136
- }));
137
- }
138
- function textureStorage2dArray(format, access) {
139
- const actualAccess = access || "write-only";
140
- return getOrCreate(`texture_storage_2d_array<${format}, ${accessModeMap[actualAccess]}>`, () => createStorageTexture("texture_storage_2d_array", {
141
- dimension: "2d-array",
142
- format,
143
- access: actualAccess
144
- }));
145
- }
146
- function textureStorage3d(format, access) {
147
- const actualAccess = access || "write-only";
148
- return getOrCreate(`texture_storage_3d<${format}, ${accessModeMap[actualAccess]}>`, () => createStorageTexture("texture_storage_3d", {
149
- dimension: "3d",
150
- format,
151
- access: actualAccess
152
- }));
153
- }
154
- function textureDepth2d() {
155
- return getOrCreate("texture_depth_2d", () => createTexture("texture_depth_2d", {
156
- dimension: "2d",
157
- sampleType: f32,
158
- multisampled: false
159
- }));
160
- }
161
- function textureDepthMultisampled2d() {
162
- return getOrCreate("texture_depth_multisampled_2d", () => createTexture("texture_depth_multisampled_2d", {
163
- dimension: "2d",
164
- sampleType: f32,
165
- multisampled: true
166
- }));
167
- }
168
- function textureDepth2dArray() {
169
- return getOrCreate("texture_depth_2d_array", () => createTexture("texture_depth_2d_array", {
170
- dimension: "2d-array",
171
- sampleType: f32,
172
- multisampled: false
173
- }));
174
- }
175
- function textureDepthCube() {
176
- return getOrCreate("texture_depth_cube", () => createTexture("texture_depth_cube", {
177
- dimension: "cube",
178
- sampleType: f32,
179
- multisampled: false
180
- }));
181
- }
182
- function textureDepthCubeArray() {
183
- return getOrCreate("texture_depth_cube_array", () => createTexture("texture_depth_cube_array", {
184
- dimension: "cube-array",
185
- sampleType: f32,
186
- multisampled: false
187
- }));
188
- }
189
- function textureExternal() {
190
- return getOrCreate("texture_external", () => ({
191
- [$internal]: {},
192
- [$repr]: void 0,
193
- type: "texture_external",
194
- dimension: "2d"
195
- }));
196
- }
197
- function isWgslTexture(value) {
198
- return !!value[$internal] && typeof value.multisampled === "boolean";
199
- }
200
- function isWgslStorageTexture(value) {
201
- return !!value[$internal] && typeof value.format === "string" && typeof value.access === "string";
202
- }
203
- function isWgslExternalTexture(value) {
204
- return !!value[$internal] && value.type === "texture_external";
205
- }
206
-
207
- //#endregion
208
- export { accessModeMap, isWgslExternalTexture, isWgslStorageTexture, isWgslTexture, texture1d, texture2d, texture2dArray, texture3d, textureCube, textureCubeArray, textureDepth2d, textureDepth2dArray, textureDepthCube, textureDepthCubeArray, textureDepthMultisampled2d, textureDescriptorToSchema, textureExternal, textureMultisampled2d, textureStorage1d, textureStorage2d, textureStorage2dArray, textureStorage3d };
80
+ let cached = textureCache.get(key);
81
+ if (!cached) {
82
+ cached = factory();
83
+ textureCache.set(key, cached);
84
+ }
85
+ return cached;
86
+ }
87
+ export function texture1d(sampleType) {
88
+ const actualSampleType = (sampleType || f32);
89
+ const key = `texture_1d<${actualSampleType.type}>`;
90
+ return getOrCreate(key, () => createTexture('texture_1d', {
91
+ dimension: '1d',
92
+ sampleType: actualSampleType,
93
+ multisampled: false,
94
+ }));
95
+ }
96
+ export function texture2d(sampleType) {
97
+ const actualSampleType = (sampleType || f32);
98
+ const key = `texture_2d<${actualSampleType.type}>`;
99
+ return getOrCreate(key, () => createTexture('texture_2d', {
100
+ dimension: '2d',
101
+ sampleType: actualSampleType,
102
+ multisampled: false,
103
+ }));
104
+ }
105
+ export function textureMultisampled2d(sampleType) {
106
+ const actualSampleType = (sampleType || f32);
107
+ const key = `texture_multisampled_2d<${actualSampleType.type}>`;
108
+ return getOrCreate(key, () => createTexture('texture_multisampled_2d', {
109
+ dimension: '2d',
110
+ sampleType: actualSampleType,
111
+ multisampled: true,
112
+ }));
113
+ }
114
+ export function texture2dArray(sampleType) {
115
+ const actualSampleType = (sampleType || f32);
116
+ const key = `texture_2d_array<${actualSampleType.type}>`;
117
+ return getOrCreate(key, () => createTexture('texture_2d_array', {
118
+ dimension: '2d-array',
119
+ sampleType: actualSampleType,
120
+ multisampled: false,
121
+ }));
122
+ }
123
+ export function textureCube(sampleType) {
124
+ const actualSampleType = (sampleType || f32);
125
+ const key = `texture_cube<${actualSampleType.type}>`;
126
+ return getOrCreate(key, () => createTexture('texture_cube', {
127
+ dimension: 'cube',
128
+ sampleType: actualSampleType,
129
+ multisampled: false,
130
+ }));
131
+ }
132
+ export function textureCubeArray(sampleType) {
133
+ const actualSampleType = (sampleType || f32);
134
+ const key = `texture_cube_array<${actualSampleType.type}>`;
135
+ return getOrCreate(key, () => createTexture('texture_cube_array', {
136
+ dimension: 'cube-array',
137
+ sampleType: actualSampleType,
138
+ multisampled: false,
139
+ }));
140
+ }
141
+ export function texture3d(sampleType) {
142
+ const actualSampleType = (sampleType || f32);
143
+ const key = `texture_3d<${actualSampleType.type}>`;
144
+ return getOrCreate(key, () => createTexture('texture_3d', {
145
+ dimension: '3d',
146
+ sampleType: actualSampleType,
147
+ multisampled: false,
148
+ }));
149
+ }
150
+ export function textureStorage1d(format, access) {
151
+ const actualAccess = (access || 'write-only');
152
+ const key = `texture_storage_1d<${format}, ${accessModeMap[actualAccess]}>`;
153
+ return getOrCreate(key, () => createStorageTexture('texture_storage_1d', {
154
+ dimension: '1d',
155
+ format,
156
+ access: actualAccess,
157
+ }));
158
+ }
159
+ export function textureStorage2d(format, access) {
160
+ const actualAccess = (access || 'write-only');
161
+ const key = `texture_storage_2d<${format}, ${accessModeMap[actualAccess]}>`;
162
+ return getOrCreate(key, () => createStorageTexture('texture_storage_2d', {
163
+ dimension: '2d',
164
+ format,
165
+ access: actualAccess,
166
+ }));
167
+ }
168
+ export function textureStorage2dArray(format, access) {
169
+ const actualAccess = (access || 'write-only');
170
+ const key = `texture_storage_2d_array<${format}, ${accessModeMap[actualAccess]}>`;
171
+ return getOrCreate(key, () => createStorageTexture('texture_storage_2d_array', {
172
+ dimension: '2d-array',
173
+ format,
174
+ access: actualAccess,
175
+ }));
176
+ }
177
+ export function textureStorage3d(format, access) {
178
+ const actualAccess = (access || 'write-only');
179
+ const key = `texture_storage_3d<${format}, ${accessModeMap[actualAccess]}>`;
180
+ return getOrCreate(key, () => createStorageTexture('texture_storage_3d', {
181
+ dimension: '3d',
182
+ format,
183
+ access: actualAccess,
184
+ }));
185
+ }
186
+ export function textureDepth2d() {
187
+ const key = 'texture_depth_2d';
188
+ return getOrCreate(key, () => createTexture('texture_depth_2d', {
189
+ dimension: '2d',
190
+ sampleType: f32,
191
+ multisampled: false,
192
+ }));
193
+ }
194
+ export function textureDepthMultisampled2d() {
195
+ const key = 'texture_depth_multisampled_2d';
196
+ return getOrCreate(key, () => createTexture('texture_depth_multisampled_2d', {
197
+ dimension: '2d',
198
+ sampleType: f32,
199
+ multisampled: true,
200
+ }));
201
+ }
202
+ export function textureDepth2dArray() {
203
+ const key = 'texture_depth_2d_array';
204
+ return getOrCreate(key, () => createTexture('texture_depth_2d_array', {
205
+ dimension: '2d-array',
206
+ sampleType: f32,
207
+ multisampled: false,
208
+ }));
209
+ }
210
+ export function textureDepthCube() {
211
+ const key = 'texture_depth_cube';
212
+ return getOrCreate(key, () => createTexture('texture_depth_cube', {
213
+ dimension: 'cube',
214
+ sampleType: f32,
215
+ multisampled: false,
216
+ }));
217
+ }
218
+ export function textureDepthCubeArray() {
219
+ const key = 'texture_depth_cube_array';
220
+ return getOrCreate(key, () => createTexture('texture_depth_cube_array', {
221
+ dimension: 'cube-array',
222
+ sampleType: f32,
223
+ multisampled: false,
224
+ }));
225
+ }
226
+ export function textureExternal() {
227
+ const key = 'texture_external';
228
+ return getOrCreate(key, () => ({
229
+ [$internal]: {},
230
+ [$repr]: undefined,
231
+ type: 'texture_external',
232
+ dimension: '2d',
233
+ }));
234
+ }
235
+ export function isWgslTexture(value) {
236
+ return (!!value[$internal] && typeof value.multisampled === 'boolean');
237
+ }
238
+ export function isWgslStorageTexture(value) {
239
+ return (!!value[$internal] &&
240
+ typeof value.format === 'string' &&
241
+ typeof value.access === 'string');
242
+ }
243
+ export function isWgslExternalTexture(value) {
244
+ return (!!value[$internal] &&
245
+ value.type === 'texture_external');
246
+ }
@@ -1,7 +1,4 @@
1
- import { AnyData, Unstruct } from "./dataTypes.js";
2
-
3
- //#region src/data/unstruct.d.ts
4
-
1
+ import type { AnyData, Unstruct } from './dataTypes.ts';
5
2
  /**
6
3
  * Creates a loose struct schema that can be used to construct vertex buffers.
7
4
  * Describes structs with members of both loose and non-loose types.
@@ -20,6 +17,4 @@ import { AnyData, Unstruct } from "./dataTypes.js";
20
17
  * @param properties Record with `string` keys and `TgpuData` or `TgpuLooseData` values,
21
18
  * each entry describing one struct member.
22
19
  */
23
- declare function unstruct<TProps extends Record<string, AnyData>>(properties: TProps): Unstruct<TProps>;
24
- //#endregion
25
- export { unstruct };
20
+ export declare function unstruct<TProps extends Record<string, AnyData>>(properties: TProps): Unstruct<TProps>;
package/data/unstruct.js CHANGED
@@ -1,43 +1,49 @@
1
- import { $internal } from "../shared/symbols.js";
2
1
  import { getName, setName } from "../shared/meta.js";
2
+ import { $internal } from "../shared/symbols.js";
3
3
  import { schemaCallWrapper } from "./schemaCallWrapper.js";
4
-
5
- //#region src/data/unstruct.ts
4
+ // ----------
5
+ // Public API
6
+ // ----------
6
7
  /**
7
- * Creates a loose struct schema that can be used to construct vertex buffers.
8
- * Describes structs with members of both loose and non-loose types.
9
- *
10
- * The order of members matches the passed in properties object.
11
- * Members are not aligned in respect to their `byteAlignment`,
12
- * unless they are explicitly decorated with the custom align attribute
13
- * via `d.align` function.
14
- *
15
- * @example
16
- * const CircleStruct = d.unstruct({ radius: d.f32, pos: d.vec3f }); // packed struct with no padding
17
- *
18
- * @example
19
- * const CircleStruct = d.unstruct({ radius: d.f32, pos: d.align(16, d.vec3f) });
20
- *
21
- * @param properties Record with `string` keys and `TgpuData` or `TgpuLooseData` values,
22
- * each entry describing one struct member.
23
- */
24
- function unstruct(properties) {
25
- const unstructSchema = (instanceProps) => Object.fromEntries(Object.entries(properties).map(([key, schema]) => [key, schemaCallWrapper(schema, instanceProps?.[key])]));
26
- Object.setPrototypeOf(unstructSchema, UnstructImpl);
27
- unstructSchema.propTypes = properties;
28
- return unstructSchema;
8
+ * Creates a loose struct schema that can be used to construct vertex buffers.
9
+ * Describes structs with members of both loose and non-loose types.
10
+ *
11
+ * The order of members matches the passed in properties object.
12
+ * Members are not aligned in respect to their `byteAlignment`,
13
+ * unless they are explicitly decorated with the custom align attribute
14
+ * via `d.align` function.
15
+ *
16
+ * @example
17
+ * const CircleStruct = d.unstruct({ radius: d.f32, pos: d.vec3f }); // packed struct with no padding
18
+ *
19
+ * @example
20
+ * const CircleStruct = d.unstruct({ radius: d.f32, pos: d.align(16, d.vec3f) });
21
+ *
22
+ * @param properties Record with `string` keys and `TgpuData` or `TgpuLooseData` values,
23
+ * each entry describing one struct member.
24
+ */
25
+ export function unstruct(properties) {
26
+ // In the schema call, create and return a deep copy
27
+ // by wrapping all the values in corresponding schema calls.
28
+ const unstructSchema = (instanceProps) => Object.fromEntries(Object.entries(properties).map(([key, schema]) => [
29
+ key,
30
+ schemaCallWrapper(schema, instanceProps?.[key]),
31
+ ]));
32
+ Object.setPrototypeOf(unstructSchema, UnstructImpl);
33
+ unstructSchema.propTypes = properties;
34
+ return unstructSchema;
29
35
  }
36
+ // --------------
37
+ // Implementation
38
+ // --------------
30
39
  const UnstructImpl = {
31
- [$internal]: true,
32
- type: "unstruct",
33
- $name(label) {
34
- setName(this, label);
35
- return this;
36
- },
37
- toString() {
38
- return `unstruct:${getName(this) ?? "<unnamed>"}`;
39
- }
40
+ [$internal]: true,
41
+ type: 'unstruct',
42
+ $name(label) {
43
+ setName(this, label);
44
+ return this;
45
+ },
46
+ toString() {
47
+ return `unstruct:${getName(this) ?? '<unnamed>'}`;
48
+ },
40
49
  };
41
-
42
- //#endregion
43
- export { unstruct };