typegpu 0.11.8 → 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 +37 -38
  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 -0
  42. package/core/function/fnCore.js +148 -92
  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 +18 -20
  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 +90 -93
  85. package/core/resolve/externals.d.ts +25 -7
  86. package/core/resolve/externals.js +79 -62
  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 -55
  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 -454
  101. package/core/root/rootTypes.d.ts +461 -627
  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 -214
  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 -192
  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 -120
  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 +428 -398
  239. package/package.json +9 -3
  240. package/resolutionCtx.d.ts +162 -22
  241. package/resolutionCtx.js +911 -624
  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 -100
  320. package/tgsl/accessStructProp.d.ts +5 -0
  321. package/tgsl/accessStructProp.js +18 -0
  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 +272 -193
  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 -747
  350. package/types.d.ts +287 -221
  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
@@ -1,15 +1,13 @@
1
- import { TgpuNamable } from "../shared/meta.js";
2
- import { $gpuRepr, $inRepr, $invalidSchemaReason, $memIdent, $repr, $reprPartial, $reprPatch, $validVertexSchema } from "../shared/symbols.js";
3
- import { Prettify } from "../shared/utilityTypes.js";
4
- import "./sampler.js";
5
- import "./snippet.js";
6
- import { PackedData } from "./vertexFormatData.js";
7
- import { AnyWgslData, BaseData, TypedArrayFor } from "./wgslTypes.js";
8
- import "./texture.js";
9
- import { Infer, InferGPURecord, InferInput, InferInputRecord, InferPartial, InferPartialRecord, InferPatch, InferPatchRecord, InferRecord, IsValidVertexSchema, MemIdentityRecord } from "../shared/repr.js";
10
-
11
- //#region src/data/dataTypes.d.ts
12
-
1
+ import { type TgpuNamable } from '../shared/meta.ts';
2
+ import type { Infer, InferGPURecord, InferInput, InferInputRecord, InferPatch, InferPatchRecord, InferPartial, InferPartialRecord, InferRecord, IsValidVertexSchema, MemIdentityRecord } from '../shared/repr.ts';
3
+ import type { $gpuRepr, $inRepr, $invalidSchemaReason, $memIdent, $repr, $reprPartial, $reprPatch, $validVertexSchema } from '../shared/symbols.ts';
4
+ import type { Prettify } from '../shared/utilityTypes.ts';
5
+ import type { WgslExternalTexture, WgslStorageTexture, WgslTexture } from './texture.ts';
6
+ import type { Snippet } from './snippet.ts';
7
+ import type { PackedData } from './vertexFormatData.ts';
8
+ import * as wgsl from './wgslTypes.ts';
9
+ import type { WgslComparisonSampler, WgslSampler } from './sampler.ts';
10
+ import type { BaseData } from './wgslTypes.ts';
13
11
  /**
14
12
  * Array schema constructed via `d.disarrayOf` function.
15
13
  *
@@ -18,21 +16,21 @@ import { Infer, InferGPURecord, InferInput, InferInputRecord, InferPartial, Infe
18
16
  * unless they are explicitly decorated with the custom align attribute
19
17
  * via `d.align` function.
20
18
  */
21
- interface Disarray<out TElement extends BaseData = BaseData> extends BaseData {
22
- <T extends TElement>(elements: Infer<T>[]): Infer<T>[];
23
- (): Infer<TElement>[];
24
- readonly type: 'disarray';
25
- readonly elementCount: number;
26
- readonly elementType: TElement;
27
- readonly [$repr]: Infer<TElement>[];
28
- readonly [$inRepr]: readonly InferInput<TElement>[] | TypedArrayFor<TElement>;
29
- readonly [$reprPartial]: {
30
- idx: number;
31
- value: InferPartial<TElement>;
32
- }[] | undefined;
33
- readonly [$reprPatch]: Record<number, InferPatch<TElement>> | InferInput<TElement>[] | TypedArrayFor<TElement> | undefined;
34
- readonly [$validVertexSchema]: IsValidVertexSchema<TElement>;
35
- readonly [$invalidSchemaReason]: 'Disarrays are not host-shareable, use arrays instead';
19
+ export interface Disarray<out TElement extends wgsl.BaseData = wgsl.BaseData> extends wgsl.BaseData {
20
+ <T extends TElement>(elements: Infer<T>[]): Infer<T>[];
21
+ (): Infer<TElement>[];
22
+ readonly type: 'disarray';
23
+ readonly elementCount: number;
24
+ readonly elementType: TElement;
25
+ readonly [$repr]: Infer<TElement>[];
26
+ readonly [$inRepr]: readonly InferInput<TElement>[] | wgsl.TypedArrayFor<TElement>;
27
+ readonly [$reprPartial]: {
28
+ idx: number;
29
+ value: InferPartial<TElement>;
30
+ }[] | undefined;
31
+ readonly [$reprPatch]: Record<number, InferPatch<TElement>> | InferInput<TElement>[] | wgsl.TypedArrayFor<TElement> | undefined;
32
+ readonly [$validVertexSchema]: IsValidVertexSchema<TElement>;
33
+ readonly [$invalidSchemaReason]: 'Disarrays are not host-shareable, use arrays instead';
36
34
  }
37
35
  /**
38
36
  * Struct schema constructed via `d.unstruct` function.
@@ -42,46 +40,59 @@ interface Disarray<out TElement extends BaseData = BaseData> extends BaseData {
42
40
  * unless they are explicitly decorated with the custom align attribute
43
41
  * via `d.align` function.
44
42
  */
45
- interface Unstruct<out TProps extends Record<string, BaseData> = Record<string, BaseData>> extends BaseData, TgpuNamable {
46
- (props: Prettify<InferRecord<TProps>>): Prettify<InferRecord<TProps>>;
47
- (): Prettify<InferRecord<TProps>>;
48
- readonly type: 'unstruct';
49
- readonly propTypes: TProps;
50
- readonly [$repr]: Prettify<InferRecord<TProps>>;
51
- readonly [$inRepr]: Prettify<InferInputRecord<TProps>>;
52
- readonly [$gpuRepr]: Prettify<InferGPURecord<TProps>>;
53
- readonly [$memIdent]: Unstruct<Prettify<MemIdentityRecord<TProps>>>;
54
- readonly [$reprPartial]: Prettify<Partial<InferPartialRecord<TProps>>> | undefined;
55
- readonly [$reprPatch]: Prettify<Partial<InferPatchRecord<TProps>>> | undefined;
56
- readonly [$validVertexSchema]: { [K in keyof TProps]: IsValidVertexSchema<TProps[K]> }[keyof TProps] extends true ? true : false;
57
- readonly [$invalidSchemaReason]: 'Unstructs are not host-shareable, use structs instead';
43
+ export interface Unstruct<out TProps extends Record<string, wgsl.BaseData> = Record<string, wgsl.BaseData>> extends wgsl.BaseData, TgpuNamable {
44
+ (props: Prettify<InferRecord<TProps>>): Prettify<InferRecord<TProps>>;
45
+ (): Prettify<InferRecord<TProps>>;
46
+ readonly type: 'unstruct';
47
+ readonly propTypes: TProps;
48
+ readonly [$repr]: Prettify<InferRecord<TProps>>;
49
+ readonly [$inRepr]: Prettify<InferInputRecord<TProps>>;
50
+ readonly [$gpuRepr]: Prettify<InferGPURecord<TProps>>;
51
+ readonly [$memIdent]: Unstruct<Prettify<MemIdentityRecord<TProps>>>;
52
+ readonly [$reprPartial]: Prettify<Partial<InferPartialRecord<TProps>>> | undefined;
53
+ readonly [$reprPatch]: Prettify<Partial<InferPatchRecord<TProps>>> | undefined;
54
+ readonly [$validVertexSchema]: {
55
+ [K in keyof TProps]: IsValidVertexSchema<TProps[K]>;
56
+ }[keyof TProps] extends true ? true : false;
57
+ readonly [$invalidSchemaReason]: 'Unstructs are not host-shareable, use structs instead';
58
58
  }
59
- interface LooseDecorated<out TInner$1 extends BaseData = BaseData, out TAttribs extends unknown[] = unknown[]> extends BaseData {
60
- readonly type: 'loose-decorated';
61
- readonly inner: TInner$1;
62
- readonly attribs: TAttribs;
63
- readonly [$repr]: Infer<TInner$1>;
64
- readonly [$invalidSchemaReason]: 'Loosely decorated schemas are not host-shareable';
65
- readonly [$validVertexSchema]: IsValidVertexSchema<TInner$1>;
59
+ /** @deprecated Just use `Unstruct` without any type parameters */
60
+ export type AnyUnstruct = Unstruct;
61
+ export interface LooseDecorated<out TInner extends wgsl.BaseData = wgsl.BaseData, out TAttribs extends unknown[] = unknown[]> extends wgsl.BaseData {
62
+ readonly type: 'loose-decorated';
63
+ readonly inner: TInner;
64
+ readonly attribs: TAttribs;
65
+ readonly [$repr]: Infer<TInner>;
66
+ readonly [$invalidSchemaReason]: 'Loosely decorated schemas are not host-shareable';
67
+ readonly [$validVertexSchema]: IsValidVertexSchema<TInner>;
66
68
  }
67
69
  /**
68
70
  * Type utility to extract the inner type from decorated types.
69
71
  */
70
- type Undecorate<T> = T extends {
71
- readonly type: 'decorated' | 'loose-decorated';
72
- readonly inner: infer TInner;
72
+ export type Undecorate<T> = T extends {
73
+ readonly type: 'decorated' | 'loose-decorated';
74
+ readonly inner: infer TInner;
73
75
  } ? TInner : T;
74
76
  /**
75
77
  * Type utility to undecorate all values in a record.
76
78
  */
77
- type UndecorateRecord<T extends Record<string, unknown>> = { [Key in keyof T]: Undecorate<T[Key]> };
79
+ export type UndecorateRecord<T extends Record<string, unknown>> = {
80
+ [Key in keyof T]: Undecorate<T[Key]>;
81
+ };
82
+ /**
83
+ * Runtime function to extract the inner data type from decorated types.
84
+ * If the data is not decorated, returns the data as-is.
85
+ */
86
+ export declare function undecorate(data: BaseData): BaseData;
87
+ export declare function unptr(data: BaseData): BaseData;
88
+ export declare function unptr(data: BaseData | UnknownData): BaseData | UnknownData;
78
89
  declare const looseTypeLiterals: readonly ["unstruct", "disarray", "loose-decorated", "uint8", "uint8x2", "uint8x4", "sint8", "sint8x2", "sint8x4", "unorm8", "unorm8x2", "unorm8x4", "snorm8", "snorm8x2", "snorm8x4", "uint16", "uint16x2", "uint16x4", "sint16", "sint16x2", "sint16x4", "unorm16", "unorm16x2", "unorm16x4", "snorm16", "snorm16x2", "snorm16x4", "float16", "float16x2", "float16x4", "float32", "float32x2", "float32x3", "float32x4", "uint32", "uint32x2", "uint32x3", "uint32x4", "sint32", "sint32x2", "sint32x3", "sint32x4", "unorm10-10-10-2", "unorm8x4-bgra"];
79
- type LooseTypeLiteral = (typeof looseTypeLiterals)[number];
80
- type IsLooseData<T> = T extends {
81
- readonly type: LooseTypeLiteral;
90
+ export type LooseTypeLiteral = (typeof looseTypeLiterals)[number];
91
+ export type IsLooseData<T> = T extends {
92
+ readonly type: LooseTypeLiteral;
82
93
  } ? true : false;
83
- type AnyLooseData = Disarray | Unstruct | LooseDecorated | PackedData;
84
- declare function isLooseData(data: unknown): data is AnyLooseData;
94
+ export type AnyLooseData = Disarray | Unstruct | LooseDecorated | PackedData;
95
+ export declare function isLooseData(data: unknown): data is AnyLooseData;
85
96
  /**
86
97
  * Checks whether the passed in value is a disarray schema,
87
98
  * as opposed to, e.g., a regular array schema.
@@ -95,7 +106,7 @@ declare function isLooseData(data: unknown): data is AnyLooseData;
95
106
  * isDisarray(d.disarrayOf(d.u32, 4)) // true
96
107
  * isDisarray(d.vec3f) // false
97
108
  */
98
- declare function isDisarray(schema: unknown): schema is Disarray;
109
+ export declare function isDisarray(schema: unknown): schema is Disarray;
99
110
  /**
100
111
  * Checks whether passed in value is a unstruct schema,
101
112
  * as opposed to, e.g., a struct schema.
@@ -109,11 +120,18 @@ declare function isDisarray(schema: unknown): schema is Disarray;
109
120
  * isUnstruct(d.unstruct({ a: d.u32 })) // true
110
121
  * isUnstruct(d.vec3f) // false
111
122
  */
112
- declare function isUnstruct(schema: unknown): schema is Unstruct;
113
- declare function isLooseDecorated(value: unknown): value is LooseDecorated;
114
- declare function isData(value: unknown): value is AnyData;
115
- type AnyData = AnyWgslData | AnyLooseData;
116
- declare const UnknownData: unique symbol;
117
- type UnknownData = typeof UnknownData;
118
- //#endregion
119
- export { AnyData, AnyLooseData, Disarray, IsLooseData, LooseDecorated, Undecorate, UndecorateRecord, UnknownData, Unstruct, isData, isDisarray, isLooseData, isLooseDecorated, isUnstruct };
123
+ export declare function isUnstruct(schema: unknown): schema is Unstruct;
124
+ export declare function isLooseDecorated(value: unknown): value is LooseDecorated;
125
+ export declare function getCustomAlignment(data: wgsl.BaseData): number | undefined;
126
+ export declare function getCustomSize(data: wgsl.BaseData): number | undefined;
127
+ export declare function getCustomLocation(data: wgsl.BaseData): number | undefined;
128
+ export declare function isData(value: unknown): value is AnyData;
129
+ export type AnyData = wgsl.AnyWgslData | AnyLooseData;
130
+ export type AnyConcreteData = Exclude<AnyData, wgsl.AbstractInt | wgsl.AbstractFloat | wgsl.Void | WgslTexture | WgslStorageTexture | WgslExternalTexture | WgslSampler | WgslComparisonSampler>;
131
+ export declare const UnknownData: unique symbol;
132
+ export type UnknownData = typeof UnknownData;
133
+ export declare class MatrixColumnsAccess {
134
+ readonly matrix: Snippet;
135
+ constructor(matrix: Snippet);
136
+ }
137
+ export {};
package/data/dataTypes.js CHANGED
@@ -1,83 +1,81 @@
1
+ import {} from "../shared/meta.js";
1
2
  import { isMarkedInternal } from "../shared/symbols.js";
2
- import { isAlignAttrib, isDecorated, isLocationAttrib, isPtr, isSizeAttrib, isWgslData } from "./wgslTypes.js";
3
3
  import { vertexFormats } from "../shared/vertexFormat.js";
4
-
5
- //#region src/data/dataTypes.ts
4
+ import * as wgsl from "./wgslTypes.js";
6
5
  /**
7
- * Runtime function to extract the inner data type from decorated types.
8
- * If the data is not decorated, returns the data as-is.
9
- */
10
- function undecorate(data) {
11
- if (isDecorated(data) || isLooseDecorated(data)) return data.inner;
12
- return data;
6
+ * Runtime function to extract the inner data type from decorated types.
7
+ * If the data is not decorated, returns the data as-is.
8
+ */
9
+ export function undecorate(data) {
10
+ if (wgsl.isDecorated(data) || isLooseDecorated(data)) {
11
+ return data.inner;
12
+ }
13
+ return data;
13
14
  }
14
- function unptr(data) {
15
- if (isPtr(data)) return data.inner;
16
- return data;
15
+ export function unptr(data) {
16
+ if (wgsl.isPtr(data)) {
17
+ return data.inner;
18
+ }
19
+ return data;
17
20
  }
18
- const looseTypeLiterals = [
19
- "unstruct",
20
- "disarray",
21
- "loose-decorated",
22
- ...vertexFormats
23
- ];
24
- function isLooseData(data) {
25
- return isMarkedInternal(data) && looseTypeLiterals.includes(data?.type);
21
+ const looseTypeLiterals = ['unstruct', 'disarray', 'loose-decorated', ...vertexFormats];
22
+ export function isLooseData(data) {
23
+ return isMarkedInternal(data) && looseTypeLiterals.includes(data?.type);
26
24
  }
27
25
  /**
28
- * Checks whether the passed in value is a disarray schema,
29
- * as opposed to, e.g., a regular array schema.
30
- *
31
- * Array schemas can be used to describe uniform and storage buffers,
32
- * whereas disarray schemas cannot. Disarrays are useful for
33
- * defining vertex buffers instead.
34
- *
35
- * @example
36
- * isDisarray(d.arrayOf(d.u32, 4)) // false
37
- * isDisarray(d.disarrayOf(d.u32, 4)) // true
38
- * isDisarray(d.vec3f) // false
39
- */
40
- function isDisarray(schema) {
41
- return isMarkedInternal(schema) && schema?.type === "disarray";
26
+ * Checks whether the passed in value is a disarray schema,
27
+ * as opposed to, e.g., a regular array schema.
28
+ *
29
+ * Array schemas can be used to describe uniform and storage buffers,
30
+ * whereas disarray schemas cannot. Disarrays are useful for
31
+ * defining vertex buffers instead.
32
+ *
33
+ * @example
34
+ * isDisarray(d.arrayOf(d.u32, 4)) // false
35
+ * isDisarray(d.disarrayOf(d.u32, 4)) // true
36
+ * isDisarray(d.vec3f) // false
37
+ */
38
+ export function isDisarray(schema) {
39
+ return isMarkedInternal(schema) && schema?.type === 'disarray';
42
40
  }
43
41
  /**
44
- * Checks whether passed in value is a unstruct schema,
45
- * as opposed to, e.g., a struct schema.
46
- *
47
- * Struct schemas can be used to describe uniform and storage buffers,
48
- * whereas unstruct schemas cannot. Unstructs are useful for
49
- * defining vertex buffers instead.
50
- *
51
- * @example
52
- * isUnstruct(d.struct({ a: d.u32 })) // false
53
- * isUnstruct(d.unstruct({ a: d.u32 })) // true
54
- * isUnstruct(d.vec3f) // false
55
- */
56
- function isUnstruct(schema) {
57
- return isMarkedInternal(schema) && schema?.type === "unstruct";
42
+ * Checks whether passed in value is a unstruct schema,
43
+ * as opposed to, e.g., a struct schema.
44
+ *
45
+ * Struct schemas can be used to describe uniform and storage buffers,
46
+ * whereas unstruct schemas cannot. Unstructs are useful for
47
+ * defining vertex buffers instead.
48
+ *
49
+ * @example
50
+ * isUnstruct(d.struct({ a: d.u32 })) // false
51
+ * isUnstruct(d.unstruct({ a: d.u32 })) // true
52
+ * isUnstruct(d.vec3f) // false
53
+ */
54
+ export function isUnstruct(schema) {
55
+ return isMarkedInternal(schema) && schema?.type === 'unstruct';
58
56
  }
59
- function isLooseDecorated(value) {
60
- return isMarkedInternal(value) && value?.type === "loose-decorated";
57
+ export function isLooseDecorated(value) {
58
+ return isMarkedInternal(value) && value?.type === 'loose-decorated';
61
59
  }
62
- function getCustomAlignment(data) {
63
- return data.attribs?.find(isAlignAttrib)?.params[0];
60
+ export function getCustomAlignment(data) {
61
+ return data.attribs?.find(wgsl.isAlignAttrib)
62
+ ?.params[0];
64
63
  }
65
- function getCustomSize(data) {
66
- return data.attribs?.find(isSizeAttrib)?.params[0];
64
+ export function getCustomSize(data) {
65
+ return data.attribs?.find(wgsl.isSizeAttrib)
66
+ ?.params[0];
67
67
  }
68
- function getCustomLocation(data) {
69
- return data.attribs?.find(isLocationAttrib)?.params[0];
68
+ export function getCustomLocation(data) {
69
+ return data.attribs?.find(wgsl.isLocationAttrib)
70
+ ?.params[0];
70
71
  }
71
- function isData(value) {
72
- return isWgslData(value) || isLooseData(value);
72
+ export function isData(value) {
73
+ return wgsl.isWgslData(value) || isLooseData(value);
74
+ }
75
+ export const UnknownData = Symbol('UNKNOWN');
76
+ export class MatrixColumnsAccess {
77
+ matrix;
78
+ constructor(matrix) {
79
+ this.matrix = matrix;
80
+ }
73
81
  }
74
- const UnknownData = Symbol("UNKNOWN");
75
- var MatrixColumnsAccess = class {
76
- matrix;
77
- constructor(matrix) {
78
- this.matrix = matrix;
79
- }
80
- };
81
-
82
- //#endregion
83
- export { MatrixColumnsAccess, UnknownData, getCustomAlignment, getCustomLocation, getCustomSize, isData, isDisarray, isLooseData, isLooseDecorated, isUnstruct, undecorate, unptr };
@@ -1,7 +1,4 @@
1
- import { AnyData } from "./dataTypes.js";
2
-
3
- //#region src/data/deepEqual.d.ts
4
-
1
+ import type { AnyData } from './dataTypes.ts';
5
2
  /**
6
3
  * Performs a deep comparison of two TypeGPU data schemas.
7
4
  *
@@ -21,6 +18,4 @@ import { AnyData } from "./dataTypes.js";
21
18
  * console.log(deepEqual(schema1, schema3)); // false
22
19
  * ```
23
20
  */
24
- declare function deepEqual(a: AnyData, b: AnyData): boolean;
25
- //#endregion
26
- export { deepEqual };
21
+ export declare function deepEqual(a: AnyData, b: AnyData): boolean;
package/data/deepEqual.js CHANGED
@@ -1,58 +1,83 @@
1
- import { isAtomic, isDecorated, isPtr, isWgslArray, isWgslStruct } from "./wgslTypes.js";
2
1
  import { isDisarray, isLooseDecorated, isUnstruct } from "./dataTypes.js";
3
-
4
- //#region src/data/deepEqual.ts
2
+ import { isAtomic, isDecorated, isPtr, isWgslArray, isWgslStruct } from "./wgslTypes.js";
5
3
  /**
6
- * Performs a deep comparison of two TypeGPU data schemas.
7
- *
8
- * @param a The first data schema to compare.
9
- * @param b The second data schema to compare.
10
- * @returns `true` if the schemas are deeply equal, `false` otherwise.
11
- *
12
- * @example
13
- * ```ts
14
- * import { vec3f, struct, deepEqual } from 'typegpu/data';
15
- *
16
- * const schema1 = struct({ a: vec3f });
17
- * const schema2 = struct({ a: vec3f });
18
- * const schema3 = struct({ b: vec3f });
19
- *
20
- * console.log(deepEqual(schema1, schema2)); // true
21
- * console.log(deepEqual(schema1, schema3)); // false
22
- * ```
23
- */
24
- function deepEqual(a, b) {
25
- if (a === b) return true;
26
- if (a.type !== b.type) return false;
27
- if (isWgslStruct(a) && isWgslStruct(b) || isUnstruct(a) && isUnstruct(b)) {
28
- const aProps = a.propTypes;
29
- const bProps = b.propTypes;
30
- const aKeys = Object.keys(aProps);
31
- const bKeys = Object.keys(bProps);
32
- if (aKeys.length !== bKeys.length) return false;
33
- for (let i = 0; i < aKeys.length; i++) {
34
- const keyA = aKeys[i];
35
- const keyB = bKeys[i];
36
- if (keyA !== keyB || !keyA || !keyB || !deepEqual(aProps[keyA], bProps[keyB])) return false;
37
- }
38
- return true;
39
- }
40
- if (isWgslArray(a) && isWgslArray(b) || isDisarray(a) && isDisarray(b)) return a.elementCount === b.elementCount && deepEqual(a.elementType, b.elementType);
41
- if (isPtr(a) && isPtr(b)) return a.addressSpace === b.addressSpace && a.access === b.access && deepEqual(a.inner, b.inner);
42
- if (isAtomic(a) && isAtomic(b)) return deepEqual(a.inner, b.inner);
43
- if (isDecorated(a) && isDecorated(b) || isLooseDecorated(a) && isLooseDecorated(b)) {
44
- if (!deepEqual(a.inner, b.inner)) return false;
45
- if (a.attribs.length !== b.attribs.length) return false;
46
- const getAttrKey = (attr) => {
47
- const anyAttr = attr;
48
- return `${anyAttr.type}(${(anyAttr.params ?? []).join(",")})`;
49
- };
50
- const attrsA = a.attribs.map(getAttrKey);
51
- const attrsB = b.attribs.map(getAttrKey);
52
- for (let i = 0; i < attrsA.length; i++) if (attrsA[i] !== attrsB[i]) return false;
53
- }
54
- return true;
4
+ * Performs a deep comparison of two TypeGPU data schemas.
5
+ *
6
+ * @param a The first data schema to compare.
7
+ * @param b The second data schema to compare.
8
+ * @returns `true` if the schemas are deeply equal, `false` otherwise.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { vec3f, struct, deepEqual } from 'typegpu/data';
13
+ *
14
+ * const schema1 = struct({ a: vec3f });
15
+ * const schema2 = struct({ a: vec3f });
16
+ * const schema3 = struct({ b: vec3f });
17
+ *
18
+ * console.log(deepEqual(schema1, schema2)); // true
19
+ * console.log(deepEqual(schema1, schema3)); // false
20
+ * ```
21
+ */
22
+ export function deepEqual(a, b) {
23
+ if (a === b) {
24
+ return true;
25
+ }
26
+ if (a.type !== b.type) {
27
+ return false;
28
+ }
29
+ if ((isWgslStruct(a) && isWgslStruct(b)) || (isUnstruct(a) && isUnstruct(b))) {
30
+ const aProps = a.propTypes;
31
+ const bProps = b.propTypes;
32
+ const aKeys = Object.keys(aProps);
33
+ const bKeys = Object.keys(bProps);
34
+ if (aKeys.length !== bKeys.length) {
35
+ return false;
36
+ }
37
+ for (let i = 0; i < aKeys.length; i++) {
38
+ const keyA = aKeys[i];
39
+ const keyB = bKeys[i];
40
+ if (keyA !== keyB ||
41
+ !keyA ||
42
+ !keyB ||
43
+ !deepEqual(aProps[keyA], bProps[keyB])) {
44
+ return false;
45
+ }
46
+ }
47
+ return true;
48
+ }
49
+ if ((isWgslArray(a) && isWgslArray(b)) || (isDisarray(a) && isDisarray(b))) {
50
+ return (a.elementCount === b.elementCount &&
51
+ deepEqual(a.elementType, b.elementType));
52
+ }
53
+ if (isPtr(a) && isPtr(b)) {
54
+ return (a.addressSpace === b.addressSpace &&
55
+ a.access === b.access &&
56
+ deepEqual(a.inner, b.inner));
57
+ }
58
+ if (isAtomic(a) && isAtomic(b)) {
59
+ return deepEqual(a.inner, b.inner);
60
+ }
61
+ if ((isDecorated(a) && isDecorated(b)) || (isLooseDecorated(a) && isLooseDecorated(b))) {
62
+ if (!deepEqual(a.inner, b.inner)) {
63
+ return false;
64
+ }
65
+ if (a.attribs.length !== b.attribs.length) {
66
+ return false;
67
+ }
68
+ // Create comparable string representations for each attribute
69
+ const getAttrKey = (attr) => {
70
+ const anyAttr = attr;
71
+ return `${anyAttr.type}(${(anyAttr.params ?? []).join(',')})`;
72
+ };
73
+ const attrsA = a.attribs.map(getAttrKey);
74
+ const attrsB = b.attribs.map(getAttrKey);
75
+ for (let i = 0; i < attrsA.length; i++) {
76
+ if (attrsA[i] !== attrsB[i]) {
77
+ return false;
78
+ }
79
+ }
80
+ }
81
+ // All other types have been checked for equality at the start
82
+ return true;
55
83
  }
56
-
57
- //#endregion
58
- export { deepEqual };
@@ -1,11 +1,7 @@
1
- import { AnyData, Disarray } from "./dataTypes.js";
2
- import { TgpuComptime } from "../core/function/comptime.js";
3
- import "../indexNamedExports.js";
4
-
5
- //#region src/data/disarray.d.ts
1
+ import type { AnyData, Disarray } from './dataTypes.ts';
6
2
  interface DisarrayConstructor {
7
- <TElement extends AnyData>(elementType: TElement): (elementCount: number) => Disarray<TElement>;
8
- <TElement extends AnyData>(elementType: TElement, elementCount: number): Disarray<TElement>;
3
+ <TElement extends AnyData>(elementType: TElement): (elementCount: number) => Disarray<TElement>;
4
+ <TElement extends AnyData>(elementType: TElement, elementCount: number): Disarray<TElement>;
9
5
  }
10
6
  /**
11
7
  * Creates an array schema that can be used to construct vertex buffers.
@@ -29,6 +25,6 @@ interface DisarrayConstructor {
29
25
  * @param elementType The type of elements in the array.
30
26
  * @param elementCount The number of elements in the array.
31
27
  */
32
- declare const disarrayOf: TgpuComptime<DisarrayConstructor>;
33
- //#endregion
34
- export { disarrayOf };
28
+ export declare const disarrayOf: import("../indexNamedExports.ts").TgpuComptime<DisarrayConstructor>;
29
+ export declare function cpu_disarrayOf<TElement extends AnyData>(elementType: TElement, elementCount: number): Disarray<TElement>;
30
+ export {};
package/data/disarray.js CHANGED
@@ -1,52 +1,58 @@
1
+ import { comptime } from "../core/function/comptime.js";
1
2
  import { $internal } from "../shared/symbols.js";
2
3
  import { schemaCallWrapper } from "./schemaCallWrapper.js";
3
- import { comptime } from "../core/function/comptime.js";
4
-
5
- //#region src/data/disarray.ts
6
4
  /**
7
- * Creates an array schema that can be used to construct vertex buffers.
8
- * Describes arrays with fixed-size length, storing elements of the same type.
9
- *
10
- * Elements in the schema are not aligned in respect to their `byteAlignment`,
11
- * unless they are explicitly decorated with the custom align attribute
12
- * via `d.align` function.
13
- *
14
- * @example
15
- * const disarray = d.disarrayOf(d.vec3f, 3); // packed array of vec3f
16
- *
17
- * @example
18
- * const disarray = d.disarrayOf(d.align(16, d.vec3f), 3);
19
- *
20
- * If `elementCount` is not specified, a partially applied function is returned.
21
- * @example
22
- * const disarray = d.disarrayOf(d.vec3f);
23
- * // ^? (n: number) => Disarray<d.Vec3f>
24
- *
25
- * @param elementType The type of elements in the array.
26
- * @param elementCount The number of elements in the array.
27
- */
28
- const disarrayOf = comptime(((elementType, elementCount) => {
29
- if (elementCount === void 0) return (count) => cpu_disarrayOf(elementType, count);
30
- return cpu_disarrayOf(elementType, elementCount);
31
- })).$name("disarrayOf");
32
- function cpu_disarrayOf(elementType, elementCount) {
33
- const disarraySchema = (elements) => {
34
- if (elements && elements.length !== elementCount) throw new Error(`Disarray schema of ${elementCount} elements of type ${elementType.type} called with ${elements.length} argument(s).`);
35
- return Array.from({ length: elementCount }, (_, i) => schemaCallWrapper(elementType, elements?.[i]));
36
- };
37
- Object.setPrototypeOf(disarraySchema, DisarrayImpl);
38
- disarraySchema.elementType = elementType;
39
- if (!Number.isInteger(elementCount) || elementCount < 0) throw new Error(`Cannot create disarray schema with invalid element count: ${elementCount}.`);
40
- disarraySchema.elementCount = elementCount;
41
- return disarraySchema;
5
+ * Creates an array schema that can be used to construct vertex buffers.
6
+ * Describes arrays with fixed-size length, storing elements of the same type.
7
+ *
8
+ * Elements in the schema are not aligned in respect to their `byteAlignment`,
9
+ * unless they are explicitly decorated with the custom align attribute
10
+ * via `d.align` function.
11
+ *
12
+ * @example
13
+ * const disarray = d.disarrayOf(d.vec3f, 3); // packed array of vec3f
14
+ *
15
+ * @example
16
+ * const disarray = d.disarrayOf(d.align(16, d.vec3f), 3);
17
+ *
18
+ * If `elementCount` is not specified, a partially applied function is returned.
19
+ * @example
20
+ * const disarray = d.disarrayOf(d.vec3f);
21
+ * // ^? (n: number) => Disarray<d.Vec3f>
22
+ *
23
+ * @param elementType The type of elements in the array.
24
+ * @param elementCount The number of elements in the array.
25
+ */
26
+ export const disarrayOf = comptime(((elementType, elementCount) => {
27
+ if (elementCount === undefined) {
28
+ return (count) => cpu_disarrayOf(elementType, count);
29
+ }
30
+ return cpu_disarrayOf(elementType, elementCount);
31
+ })).$name('disarrayOf');
32
+ export function cpu_disarrayOf(elementType, elementCount) {
33
+ // In the schema call, create and return a deep copy
34
+ // by wrapping all the values in `elementType` schema calls.
35
+ const disarraySchema = (elements) => {
36
+ if (elements && elements.length !== elementCount) {
37
+ throw new Error(`Disarray schema of ${elementCount} elements of type ${elementType.type} called with ${elements.length} argument(s).`);
38
+ }
39
+ return Array.from({ length: elementCount }, (_, i) => schemaCallWrapper(elementType, elements?.[i]));
40
+ };
41
+ Object.setPrototypeOf(disarraySchema, DisarrayImpl);
42
+ disarraySchema.elementType = elementType;
43
+ if (!Number.isInteger(elementCount) || elementCount < 0) {
44
+ throw new Error(`Cannot create disarray schema with invalid element count: ${elementCount}.`);
45
+ }
46
+ disarraySchema.elementCount = elementCount;
47
+ return disarraySchema;
42
48
  }
49
+ // --------------
50
+ // Implementation
51
+ // --------------
43
52
  const DisarrayImpl = {
44
- [$internal]: true,
45
- type: "disarray",
46
- toString() {
47
- return `disarrayOf(${this.elementType}, ${this.elementCount})`;
48
- }
53
+ [$internal]: true,
54
+ type: 'disarray',
55
+ toString() {
56
+ return `disarrayOf(${this.elementType}, ${this.elementCount})`;
57
+ },
49
58
  };
50
-
51
- //#endregion
52
- export { disarrayOf };
@@ -0,0 +1,4 @@
1
+ import type { ISerialInput } from 'typed-binary';
2
+ import type { ISerialOutput } from 'typed-binary';
3
+ export declare function writeFloat16(output: ISerialOutput, value: number): void;
4
+ export declare function readFloat16(input: ISerialInput): number;
@@ -0,0 +1,7 @@
1
+ import { fromHalfBits, toHalfBits } from "./numeric.js";
2
+ export function writeFloat16(output, value) {
3
+ output.writeUint16(toHalfBits(value));
4
+ }
5
+ export function readFloat16(input) {
6
+ return fromHalfBits(input.readUint16());
7
+ }