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