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/std/bitcast.d.ts CHANGED
@@ -1,10 +1,193 @@
1
- import { DualFn } from "../types.js";
2
- import { v2f, v2i, v2u, v3f, v3i, v3u, v4f, v4i, v4u } from "../data/wgslTypes.js";
3
-
4
- //#region src/std/bitcast.d.ts
5
- type BitcastU32toF32Overload = ((value: number) => number) & ((value: v2u) => v2f) & ((value: v3u) => v3f) & ((value: v4u) => v4f);
6
- declare const bitcastU32toF32: DualFn<BitcastU32toF32Overload>;
7
- type BitcastU32toI32Overload = ((value: number) => number) & ((value: v2u) => v2i) & ((value: v3u) => v3i) & ((value: v4u) => v4i);
8
- declare const bitcastU32toI32: DualFn<BitcastU32toI32Overload>;
9
- //#endregion
10
- export { bitcastU32toF32, bitcastU32toI32 };
1
+ import type { AnyWgslData, v2f, v2i, v2u, v3f, v3i, v3u, v4f, v4i, v4u } from '../data/wgslTypes.ts';
2
+ type BitcastU32toF32Overload = <T extends number | v2u | v3u | v4u>(value: T) => T extends v2u ? v2f : T extends v3u ? v3f : T extends v4u ? v4f : number;
3
+ /**
4
+ * @deprecated Use 'std.bitcast' instead.
5
+ */
6
+ export declare const bitcastU32toF32: import("../types.ts").DualFn<BitcastU32toF32Overload>;
7
+ type BitcastU32toI32Overload = <T extends number | v2u | v3u | v4u>(value: T) => T extends v2u ? v2i : T extends v3u ? v3i : T extends v4u ? v4i : number;
8
+ /**
9
+ * @deprecated Use 'std.bitcast' instead.
10
+ */
11
+ export declare const bitcastU32toI32: import("../types.ts").DualFn<BitcastU32toI32Overload>;
12
+ type BitcastF32toU32Overload = <T extends number | v2f | v3f | v4f>(value: T) => T extends v2f ? v2u : T extends v3f ? v3u : T extends v4f ? v4u : number;
13
+ /**
14
+ * @deprecated Use 'std.bitcast' instead.
15
+ */
16
+ export declare const bitcastF32toU32: import("../types.ts").DualFn<BitcastF32toU32Overload>;
17
+ declare const casts: {
18
+ readonly f16: {
19
+ readonly f16: (value: number) => number;
20
+ };
21
+ readonly f32: {
22
+ readonly f32: (value: number) => number;
23
+ readonly i32: (value: number) => number;
24
+ readonly u32: (value: number) => number;
25
+ readonly vec2h: (value: number) => import("../data/wgslTypes.ts").v2h;
26
+ };
27
+ readonly i32: {
28
+ readonly f32: (value: number) => number;
29
+ readonly i32: (value: number) => number;
30
+ readonly u32: (value: number) => number;
31
+ readonly vec2h: (value: number) => import("../data/wgslTypes.ts").v2h;
32
+ };
33
+ readonly u32: {
34
+ readonly f32: (value: number) => number;
35
+ readonly i32: (value: number) => number;
36
+ readonly u32: (value: number) => number;
37
+ readonly vec2h: (value: number) => import("../data/wgslTypes.ts").v2h;
38
+ };
39
+ readonly vec2h: {
40
+ readonly f32: (value: import("../data/wgslTypes.ts").v2h) => number;
41
+ readonly i32: (value: import("../data/wgslTypes.ts").v2h) => number;
42
+ readonly u32: (value: import("../data/wgslTypes.ts").v2h) => number;
43
+ readonly vec2h: (value: import("../data/wgslTypes.ts").v2h) => import("../data/wgslTypes.ts").v2h;
44
+ };
45
+ readonly vec3h: {
46
+ readonly vec3h: (value: import("../data/wgslTypes.ts").v3h) => import("../data/wgslTypes.ts").v3h;
47
+ };
48
+ readonly vec2f: {
49
+ readonly vec2f: (value: v2f) => v2f;
50
+ readonly vec2i: (value: v2f) => v2i;
51
+ readonly vec2u: (value: v2f) => v2u;
52
+ readonly vec4h: (value: v2f) => import("../data/wgslTypes.ts").v4h;
53
+ };
54
+ readonly vec2i: {
55
+ readonly vec2f: (value: v2i) => v2f;
56
+ readonly vec2i: (value: v2i) => v2i;
57
+ readonly vec2u: (value: v2i) => v2u;
58
+ readonly vec4h: (value: v2i) => import("../data/wgslTypes.ts").v4h;
59
+ };
60
+ readonly vec2u: {
61
+ readonly vec2f: (value: v2u) => v2f;
62
+ readonly vec2i: (value: v2u) => v2i;
63
+ readonly vec2u: (value: v2u) => v2u;
64
+ readonly vec4h: (value: v2u) => import("../data/wgslTypes.ts").v4h;
65
+ };
66
+ readonly vec4h: {
67
+ readonly vec2f: (value: import("../data/wgslTypes.ts").v4h) => v2f;
68
+ readonly vec2i: (value: import("../data/wgslTypes.ts").v4h) => v2i;
69
+ readonly vec2u: (value: import("../data/wgslTypes.ts").v4h) => v2u;
70
+ readonly vec4h: (value: import("../data/wgslTypes.ts").v4h) => import("../data/wgslTypes.ts").v4h;
71
+ };
72
+ readonly vec3f: {
73
+ readonly vec3f: (value: v3f) => v3f;
74
+ readonly vec3i: (value: v3f) => v3i;
75
+ readonly vec3u: (value: v3f) => v3u;
76
+ };
77
+ readonly vec3i: {
78
+ readonly vec3f: (value: v3i) => v3f;
79
+ readonly vec3i: (value: v3i) => v3i;
80
+ readonly vec3u: (value: v3i) => v3u;
81
+ };
82
+ readonly vec3u: {
83
+ readonly vec3f: (value: v3u) => v3f;
84
+ readonly vec3i: (value: v3u) => v3i;
85
+ readonly vec3u: (value: v3u) => v3u;
86
+ };
87
+ readonly vec4f: {
88
+ readonly vec4f: (value: v4f) => v4f;
89
+ readonly vec4i: (value: v4f) => v4i;
90
+ readonly vec4u: (value: v4f) => v4u;
91
+ };
92
+ readonly vec4i: {
93
+ readonly vec4f: (value: v4i) => v4f;
94
+ readonly vec4i: (value: v4i) => v4i;
95
+ readonly vec4u: (value: v4i) => v4u;
96
+ };
97
+ readonly vec4u: {
98
+ readonly vec4f: (value: v4u) => v4f;
99
+ readonly vec4i: (value: v4u) => v4i;
100
+ readonly vec4u: (value: v4u) => v4u;
101
+ };
102
+ };
103
+ type SchemaFor<Type extends string> = Extract<AnyWgslData, {
104
+ type: Type;
105
+ }>;
106
+ declare function getBitcast<FromType extends keyof typeof casts, ToType extends keyof (typeof casts)[FromType] & string>(from: SchemaFor<FromType>, to: SchemaFor<ToType>): {
107
+ readonly f16: {
108
+ readonly f16: (value: number) => number;
109
+ };
110
+ readonly f32: {
111
+ readonly f32: (value: number) => number;
112
+ readonly i32: (value: number) => number;
113
+ readonly u32: (value: number) => number;
114
+ readonly vec2h: (value: number) => import("../data/wgslTypes.ts").v2h;
115
+ };
116
+ readonly i32: {
117
+ readonly f32: (value: number) => number;
118
+ readonly i32: (value: number) => number;
119
+ readonly u32: (value: number) => number;
120
+ readonly vec2h: (value: number) => import("../data/wgslTypes.ts").v2h;
121
+ };
122
+ readonly u32: {
123
+ readonly f32: (value: number) => number;
124
+ readonly i32: (value: number) => number;
125
+ readonly u32: (value: number) => number;
126
+ readonly vec2h: (value: number) => import("../data/wgslTypes.ts").v2h;
127
+ };
128
+ readonly vec2h: {
129
+ readonly f32: (value: import("../data/wgslTypes.ts").v2h) => number;
130
+ readonly i32: (value: import("../data/wgslTypes.ts").v2h) => number;
131
+ readonly u32: (value: import("../data/wgslTypes.ts").v2h) => number;
132
+ readonly vec2h: (value: import("../data/wgslTypes.ts").v2h) => import("../data/wgslTypes.ts").v2h;
133
+ };
134
+ readonly vec3h: {
135
+ readonly vec3h: (value: import("../data/wgslTypes.ts").v3h) => import("../data/wgslTypes.ts").v3h;
136
+ };
137
+ readonly vec2f: {
138
+ readonly vec2f: (value: v2f) => v2f;
139
+ readonly vec2i: (value: v2f) => v2i;
140
+ readonly vec2u: (value: v2f) => v2u;
141
+ readonly vec4h: (value: v2f) => import("../data/wgslTypes.ts").v4h;
142
+ };
143
+ readonly vec2i: {
144
+ readonly vec2f: (value: v2i) => v2f;
145
+ readonly vec2i: (value: v2i) => v2i;
146
+ readonly vec2u: (value: v2i) => v2u;
147
+ readonly vec4h: (value: v2i) => import("../data/wgslTypes.ts").v4h;
148
+ };
149
+ readonly vec2u: {
150
+ readonly vec2f: (value: v2u) => v2f;
151
+ readonly vec2i: (value: v2u) => v2i;
152
+ readonly vec2u: (value: v2u) => v2u;
153
+ readonly vec4h: (value: v2u) => import("../data/wgslTypes.ts").v4h;
154
+ };
155
+ readonly vec4h: {
156
+ readonly vec2f: (value: import("../data/wgslTypes.ts").v4h) => v2f;
157
+ readonly vec2i: (value: import("../data/wgslTypes.ts").v4h) => v2i;
158
+ readonly vec2u: (value: import("../data/wgslTypes.ts").v4h) => v2u;
159
+ readonly vec4h: (value: import("../data/wgslTypes.ts").v4h) => import("../data/wgslTypes.ts").v4h;
160
+ };
161
+ readonly vec3f: {
162
+ readonly vec3f: (value: v3f) => v3f;
163
+ readonly vec3i: (value: v3f) => v3i;
164
+ readonly vec3u: (value: v3f) => v3u;
165
+ };
166
+ readonly vec3i: {
167
+ readonly vec3f: (value: v3i) => v3f;
168
+ readonly vec3i: (value: v3i) => v3i;
169
+ readonly vec3u: (value: v3i) => v3u;
170
+ };
171
+ readonly vec3u: {
172
+ readonly vec3f: (value: v3u) => v3f;
173
+ readonly vec3i: (value: v3u) => v3i;
174
+ readonly vec3u: (value: v3u) => v3u;
175
+ };
176
+ readonly vec4f: {
177
+ readonly vec4f: (value: v4f) => v4f;
178
+ readonly vec4i: (value: v4f) => v4i;
179
+ readonly vec4u: (value: v4f) => v4u;
180
+ };
181
+ readonly vec4i: {
182
+ readonly vec4f: (value: v4i) => v4f;
183
+ readonly vec4i: (value: v4i) => v4i;
184
+ readonly vec4u: (value: v4i) => v4u;
185
+ };
186
+ readonly vec4u: {
187
+ readonly vec4f: (value: v4u) => v4f;
188
+ readonly vec4i: (value: v4u) => v4i;
189
+ readonly vec4u: (value: v4u) => v4u;
190
+ };
191
+ }[FromType][(ToType & "bool") | (ToType & "f32") | (ToType & "f16") | (ToType & "i32") | (ToType & "u32") | (ToType & "u16") | (ToType & "vec2f") | (ToType & "vec2h") | (ToType & "vec2i") | (ToType & "vec2u") | (ToType & "vec2<bool>") | (ToType & "vec3f") | (ToType & "vec3h") | (ToType & "vec3i") | (ToType & "vec3u") | (ToType & "vec3<bool>") | (ToType & "vec4f") | (ToType & "vec4h") | (ToType & "vec4i") | (ToType & "vec4u") | (ToType & "vec4<bool>") | (ToType & "mat2x2f") | (ToType & "mat3x3f") | (ToType & "mat4x4f") | (ToType & "struct") | (ToType & "array") | (ToType & "ptr") | (ToType & "atomic") | (ToType & "decorated") | (ToType & "abstractInt") | (ToType & "abstractFloat") | (ToType & "void") | (ToType & ("texture_1d" | "texture_2d" | "texture_multisampled_2d" | "texture_depth_2d" | "texture_depth_multisampled_2d" | "texture_2d_array" | "texture_depth_2d_array" | "texture_cube" | "texture_depth_cube" | "texture_cube_array" | "texture_depth_cube_array" | "texture_3d")) | (ToType & ("texture_storage_1d" | "texture_storage_2d" | "texture_storage_2d_array" | "texture_storage_3d")) | (ToType & "texture_external") | (ToType & "sampler") | (ToType & "sampler_comparison")];
192
+ export declare const bitcast: import("../indexNamedExports.ts").TgpuComptime<typeof getBitcast>;
193
+ export {};
package/std/bitcast.js CHANGED
@@ -1,43 +1,313 @@
1
- import { isVec } from "../data/wgslTypes.js";
2
- import { stitch } from "../core/resolve/stitch.js";
3
- import { unify } from "../tgsl/conversion.js";
4
- import { f32, i32, u32 } from "../data/numeric.js";
5
- import { vec2f, vec2i, vec3f, vec3i, vec4f, vec4i } from "../data/vector.js";
6
1
  import { dualImpl } from "../core/function/dualImpl.js";
7
- import { bitcastU32toF32Impl, bitcastU32toI32Impl } from "../data/numberOps.js";
2
+ import { bitcastF32toU32Impl, bitcastU32toF32Impl, bitcastU32toI32Impl, } from "../data/numberOps.js";
3
+ import { f16, f32, fromHalfBits, i32, toHalfBits, u32 } from "../data/numeric.js";
4
+ import { isVec } from "../data/wgslTypes.js";
5
+ import { vec2f, vec2h, vec2i, vec2u, vec3f, vec3h, vec3i, vec3u, vec4f, vec4h, vec4i, vec4u, } from "../data/vector.js";
8
6
  import { VectorOps } from "../data/vectorOps.js";
9
-
10
- //#region src/std/bitcast.ts
11
- const bitcastU32toF32 = dualImpl({
12
- name: "bitcastU32toF32",
13
- normalImpl: ((value) => {
14
- if (typeof value === "number") return bitcastU32toF32Impl(value);
15
- return VectorOps.bitcastU32toF32[value.kind](value);
16
- }),
17
- codegenImpl: (_ctx, [n]) => stitch`bitcast<f32>(${n})`,
18
- signature: (...arg) => {
19
- const uargs = unify(arg, [u32]) ?? arg;
20
- return {
21
- argTypes: uargs,
22
- returnType: isVec(uargs[0]) ? uargs[0].type === "vec2u" ? vec2f : uargs[0].type === "vec3u" ? vec3f : vec4f : f32
23
- };
24
- }
7
+ import { unifyStrict } from "../tgsl/conversion.js";
8
+ import { SignatureNotSupportedError } from "../errors.js";
9
+ import { getName } from "../shared/meta.js";
10
+ import { comptime } from "../core/function/comptime.js";
11
+ import { coerceToSnippet } from "../tgsl/generationHelpers.js";
12
+ const u32AllowedSchemas = [u32, vec2u, vec3u, vec4u];
13
+ // TODO(#2731): Remove deprecated bitcasts. Remember about cpu implementations.
14
+ /**
15
+ * @deprecated Use 'std.bitcast' instead.
16
+ */
17
+ export const bitcastU32toF32 = dualImpl({
18
+ name: 'bitcastU32toF32',
19
+ normalImpl: ((value) => {
20
+ if (typeof value === 'number') {
21
+ return bitcastU32toF32Impl(value);
22
+ }
23
+ return VectorOps.bitcastU32toF32[value.kind](value);
24
+ }),
25
+ codegenImpl: (ctx, [n], returnType) => {
26
+ return ctx.gen.emitCall('bitcast', [coerceToSnippet(returnType)], [n]);
27
+ },
28
+ signature: (...arg) => {
29
+ const uargs = unifyStrict(arg, u32AllowedSchemas);
30
+ if (!uargs) {
31
+ throw new SignatureNotSupportedError(arg, u32AllowedSchemas);
32
+ }
33
+ return {
34
+ argTypes: uargs,
35
+ returnType: isVec(uargs[0])
36
+ ? uargs[0].type === 'vec2u'
37
+ ? vec2f
38
+ : uargs[0].type === 'vec3u'
39
+ ? vec3f
40
+ : vec4f
41
+ : f32,
42
+ };
43
+ },
44
+ sideEffects: false,
45
+ });
46
+ /**
47
+ * @deprecated Use 'std.bitcast' instead.
48
+ */
49
+ export const bitcastU32toI32 = dualImpl({
50
+ name: 'bitcastU32toI32',
51
+ normalImpl: ((value) => {
52
+ if (typeof value === 'number') {
53
+ return bitcastU32toI32Impl(value);
54
+ }
55
+ return VectorOps.bitcastU32toI32[value.kind](value);
56
+ }),
57
+ codegenImpl: (ctx, [n], returnType) => {
58
+ return ctx.gen.emitCall('bitcast', [coerceToSnippet(returnType)], [n]);
59
+ },
60
+ signature: (...arg) => {
61
+ const uargs = unifyStrict(arg, u32AllowedSchemas);
62
+ if (!uargs) {
63
+ throw new SignatureNotSupportedError(arg, u32AllowedSchemas);
64
+ }
65
+ return {
66
+ argTypes: uargs,
67
+ returnType: isVec(uargs[0])
68
+ ? uargs[0].type === 'vec2u'
69
+ ? vec2i
70
+ : uargs[0].type === 'vec3u'
71
+ ? vec3i
72
+ : vec4i
73
+ : i32,
74
+ };
75
+ },
76
+ sideEffects: false,
25
77
  });
26
- const bitcastU32toI32 = dualImpl({
27
- name: "bitcastU32toI32",
28
- normalImpl: ((value) => {
29
- if (typeof value === "number") return bitcastU32toI32Impl(value);
30
- return VectorOps.bitcastU32toI32[value.kind](value);
31
- }),
32
- codegenImpl: (_ctx, [n]) => stitch`bitcast<i32>(${n})`,
33
- signature: (...arg) => {
34
- const uargs = unify(arg, [u32]) ?? arg;
35
- return {
36
- argTypes: uargs,
37
- returnType: isVec(uargs[0]) ? uargs[0].type === "vec2u" ? vec2i : uargs[0].type === "vec3u" ? vec3i : vec4i : i32
38
- };
39
- }
78
+ const f32AllowedSchemas = [f32, vec2f, vec3f, vec4f];
79
+ /**
80
+ * @deprecated Use 'std.bitcast' instead.
81
+ */
82
+ export const bitcastF32toU32 = dualImpl({
83
+ name: 'bitcastF32toU32',
84
+ normalImpl: ((value) => {
85
+ if (typeof value === 'number') {
86
+ return bitcastF32toU32Impl(value);
87
+ }
88
+ return VectorOps.bitcastF32toU32[value.kind](value);
89
+ }),
90
+ codegenImpl: (ctx, [n], returnType) => {
91
+ return ctx.gen.emitCall('bitcast', [coerceToSnippet(returnType)], [n]);
92
+ },
93
+ signature: (...arg) => {
94
+ const uargs = unifyStrict(arg, f32AllowedSchemas);
95
+ if (!uargs) {
96
+ throw new SignatureNotSupportedError(arg, f32AllowedSchemas);
97
+ }
98
+ return {
99
+ argTypes: uargs,
100
+ returnType: isVec(uargs[0])
101
+ ? uargs[0].type === 'vec2f'
102
+ ? vec2u
103
+ : uargs[0].type === 'vec3f'
104
+ ? vec3u
105
+ : vec4u
106
+ : u32,
107
+ };
108
+ },
109
+ sideEffects: false,
40
110
  });
41
-
42
- //#endregion
43
- export { bitcastU32toF32, bitcastU32toI32 };
111
+ const bitcastAllowedSchemas = [
112
+ /* 2 bytes */
113
+ f16,
114
+ /* 4 bytes */
115
+ f32,
116
+ i32,
117
+ u32,
118
+ vec2h,
119
+ /* 6 bytes */
120
+ vec3h,
121
+ /* 8 bytes */
122
+ vec2f,
123
+ vec2i,
124
+ vec2u,
125
+ vec4h,
126
+ /* 12 bytes */
127
+ vec3f,
128
+ vec3i,
129
+ vec3u,
130
+ /* 16 bytes */
131
+ vec4f,
132
+ vec4i,
133
+ vec4u,
134
+ ];
135
+ const buffer = new ArrayBuffer(16);
136
+ const bufViews = {
137
+ f32: new Float32Array(buffer),
138
+ u32: new Uint32Array(buffer),
139
+ i32: new Int32Array(buffer),
140
+ u16: new Uint16Array(buffer),
141
+ };
142
+ function writeToBuffer(item, target) {
143
+ if (typeof item === 'number') {
144
+ target[0] = item;
145
+ }
146
+ else {
147
+ for (let i = 0; i < item.length; i++) {
148
+ target[i] = item[i];
149
+ }
150
+ }
151
+ }
152
+ function writeFloat16ToBuffer(item, target) {
153
+ if (typeof item === 'number') {
154
+ target[0] = toHalfBits(item);
155
+ }
156
+ else {
157
+ for (let i = 0; i < item.length; i++) {
158
+ target[i] = toHalfBits(item[i]);
159
+ }
160
+ }
161
+ }
162
+ function readFromBuffer(buf, schema) {
163
+ const length = 'componentCount' in schema ? schema.componentCount : 1;
164
+ const items = [];
165
+ for (let i = 0; i < length; i++) {
166
+ items.push(buf[i]);
167
+ }
168
+ return schema(...items);
169
+ }
170
+ function readFloat16FromBuffer(buf, schema) {
171
+ const length = 'componentCount' in schema ? schema.componentCount : 1;
172
+ const items = [];
173
+ for (let i = 0; i < length; i++) {
174
+ items.push(fromHalfBits(buf[i]));
175
+ }
176
+ return schema(...items);
177
+ }
178
+ const getCpuBitcast = (inType, outType) => {
179
+ const writeToPrimitive = 'primitive' in inType ? inType.primitive : inType;
180
+ const readFromPrimitive = 'primitive' in outType ? outType.primitive : outType;
181
+ return (value) => {
182
+ if (writeToPrimitive.type === 'f16') {
183
+ writeFloat16ToBuffer(value, bufViews['u16']);
184
+ }
185
+ else {
186
+ writeToBuffer(value, bufViews[writeToPrimitive.type]);
187
+ }
188
+ if (readFromPrimitive.type === 'f16') {
189
+ return readFloat16FromBuffer(bufViews['u16'], outType);
190
+ }
191
+ return readFromBuffer(bufViews[readFromPrimitive.type], outType);
192
+ };
193
+ };
194
+ function bitcastFor(inType, outType) {
195
+ return dualImpl({
196
+ name: 'bitcast',
197
+ normalImpl: getCpuBitcast(inType, outType),
198
+ codegenImpl: (ctx, [n]) => ctx.gen.emitCall('bitcast', [coerceToSnippet(outType)], [n]),
199
+ signature: (arg) => {
200
+ const uarg = unifyStrict([arg], [inType]);
201
+ if (!uarg) {
202
+ throw new SignatureNotSupportedError([arg], [inType]);
203
+ }
204
+ return {
205
+ argTypes: uarg,
206
+ returnType: outType,
207
+ };
208
+ },
209
+ sideEffects: false,
210
+ });
211
+ }
212
+ const casts = {
213
+ /* 2 bytes */
214
+ f16: {
215
+ f16: bitcastFor(f16, f16),
216
+ },
217
+ /* 4 bytes */
218
+ f32: {
219
+ f32: bitcastFor(f32, f32),
220
+ i32: bitcastFor(f32, i32),
221
+ u32: bitcastFor(f32, u32),
222
+ vec2h: bitcastFor(f32, vec2h),
223
+ },
224
+ i32: {
225
+ f32: bitcastFor(i32, f32),
226
+ i32: bitcastFor(i32, i32),
227
+ u32: bitcastFor(i32, u32),
228
+ vec2h: bitcastFor(i32, vec2h),
229
+ },
230
+ u32: {
231
+ f32: bitcastFor(u32, f32),
232
+ i32: bitcastFor(u32, i32),
233
+ u32: bitcastFor(u32, u32),
234
+ vec2h: bitcastFor(u32, vec2h),
235
+ },
236
+ vec2h: {
237
+ f32: bitcastFor(vec2h, f32),
238
+ i32: bitcastFor(vec2h, i32),
239
+ u32: bitcastFor(vec2h, u32),
240
+ vec2h: bitcastFor(vec2h, vec2h),
241
+ },
242
+ /* 6 bytes */
243
+ vec3h: {
244
+ vec3h: bitcastFor(vec3h, vec3h),
245
+ },
246
+ /* 8 bytes */
247
+ vec2f: {
248
+ vec2f: bitcastFor(vec2f, vec2f),
249
+ vec2i: bitcastFor(vec2f, vec2i),
250
+ vec2u: bitcastFor(vec2f, vec2u),
251
+ vec4h: bitcastFor(vec2f, vec4h),
252
+ },
253
+ vec2i: {
254
+ vec2f: bitcastFor(vec2i, vec2f),
255
+ vec2i: bitcastFor(vec2i, vec2i),
256
+ vec2u: bitcastFor(vec2i, vec2u),
257
+ vec4h: bitcastFor(vec2i, vec4h),
258
+ },
259
+ vec2u: {
260
+ vec2f: bitcastFor(vec2u, vec2f),
261
+ vec2i: bitcastFor(vec2u, vec2i),
262
+ vec2u: bitcastFor(vec2u, vec2u),
263
+ vec4h: bitcastFor(vec2u, vec4h),
264
+ },
265
+ vec4h: {
266
+ vec2f: bitcastFor(vec4h, vec2f),
267
+ vec2i: bitcastFor(vec4h, vec2i),
268
+ vec2u: bitcastFor(vec4h, vec2u),
269
+ vec4h: bitcastFor(vec4h, vec4h),
270
+ },
271
+ /* 12 bytes */
272
+ vec3f: {
273
+ vec3f: bitcastFor(vec3f, vec3f),
274
+ vec3i: bitcastFor(vec3f, vec3i),
275
+ vec3u: bitcastFor(vec3f, vec3u),
276
+ },
277
+ vec3i: {
278
+ vec3f: bitcastFor(vec3i, vec3f),
279
+ vec3i: bitcastFor(vec3i, vec3i),
280
+ vec3u: bitcastFor(vec3i, vec3u),
281
+ },
282
+ vec3u: {
283
+ vec3f: bitcastFor(vec3u, vec3f),
284
+ vec3i: bitcastFor(vec3u, vec3i),
285
+ vec3u: bitcastFor(vec3u, vec3u),
286
+ },
287
+ /* 16 bytes */
288
+ vec4f: {
289
+ vec4f: bitcastFor(vec4f, vec4f),
290
+ vec4i: bitcastFor(vec4f, vec4i),
291
+ vec4u: bitcastFor(vec4f, vec4u),
292
+ },
293
+ vec4i: {
294
+ vec4f: bitcastFor(vec4i, vec4f),
295
+ vec4i: bitcastFor(vec4i, vec4i),
296
+ vec4u: bitcastFor(vec4i, vec4u),
297
+ },
298
+ vec4u: {
299
+ vec4f: bitcastFor(vec4u, vec4f),
300
+ vec4i: bitcastFor(vec4u, vec4i),
301
+ vec4u: bitcastFor(vec4u, vec4u),
302
+ },
303
+ };
304
+ function getBitcast(from, to) {
305
+ if ('type' in from && from.type in casts) {
306
+ const intermediate = casts[from.type];
307
+ if ('type' in to && to.type in intermediate) {
308
+ return intermediate[to.type];
309
+ }
310
+ }
311
+ throw new Error(`Incorrect bitcast from ${getName(from)} to ${getName(to)}.`);
312
+ }
313
+ export const bitcast = comptime(getBitcast);