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/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);