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.
- package/bin.mjs +28 -6
- package/builtin.d.ts +51 -53
- package/builtin.js +30 -34
- package/common/fullScreenTriangle.d.ts +2 -10
- package/common/fullScreenTriangle.js +20 -28
- package/common/index.d.ts +2 -9
- package/common/index.js +3 -12
- package/common/writeSoA.d.ts +11 -12
- package/common/writeSoA.js +88 -76
- package/core/buffer/buffer.d.ts +79 -62
- package/core/buffer/buffer.js +283 -205
- package/core/buffer/bufferBinding.d.ts +71 -0
- package/core/buffer/bufferBinding.js +154 -0
- package/core/buffer/bufferUsage.d.ts +14 -45
- package/core/buffer/bufferUsage.js +1 -171
- package/core/buffer/laidOutBuffer.d.ts +25 -0
- package/core/buffer/laidOutBuffer.js +55 -0
- package/core/commandEncoder/attachments.d.ts +125 -0
- package/core/commandEncoder/attachments.js +29 -0
- package/core/commandEncoder/commandEncoder.d.ts +53 -0
- package/core/commandEncoder/commandEncoder.js +56 -0
- package/core/commandEncoder/computePass.d.ts +58 -0
- package/core/commandEncoder/computePass.js +63 -0
- package/core/commandEncoder/renderPass.d.ts +121 -0
- package/core/commandEncoder/renderPass.js +196 -0
- package/core/constant/tgpuConstant.d.ts +26 -26
- package/core/constant/tgpuConstant.js +76 -65
- package/core/declare/tgpuDeclare.d.ts +3 -6
- package/core/declare/tgpuDeclare.js +36 -36
- package/core/function/autoIO.d.ts +61 -33
- package/core/function/autoIO.js +68 -73
- package/core/function/comptime.d.ts +11 -13
- package/core/function/comptime.js +60 -52
- package/core/function/createCallableSchema.d.ts +16 -0
- package/core/function/createCallableSchema.js +50 -40
- package/core/function/dualImpl.d.ts +44 -0
- package/core/function/dualImpl.js +71 -50
- package/core/function/entryInputRouter.d.ts +26 -0
- package/core/function/entryInputRouter.js +31 -33
- package/core/function/extractArgs.d.ts +38 -0
- package/core/function/extractArgs.js +202 -200
- package/core/function/fnCore.d.ts +44 -5
- package/core/function/fnCore.js +148 -93
- package/core/function/fnTypes.d.ts +31 -29
- package/core/function/fnTypes.js +1 -0
- package/core/function/ioSchema.d.ts +12 -10
- package/core/function/ioSchema.js +65 -47
- package/core/function/shelllessImpl.d.ts +9 -12
- package/core/function/shelllessImpl.js +17 -22
- package/core/function/templateUtils.d.ts +2 -0
- package/core/function/templateUtils.js +9 -8
- package/core/function/tgpuComputeFn.d.ts +26 -28
- package/core/function/tgpuComputeFn.js +47 -48
- package/core/function/tgpuFn.d.ts +34 -37
- package/core/function/tgpuFn.js +179 -153
- package/core/function/tgpuFragmentFn.d.ts +52 -53
- package/core/function/tgpuFragmentFn.js +63 -56
- package/core/function/tgpuVertexFn.d.ts +36 -39
- package/core/function/tgpuVertexFn.js +56 -53
- package/core/pipeline/computePipeline.d.ts +141 -53
- package/core/pipeline/computePipeline.js +291 -225
- package/core/pipeline/connectAttachmentToShader.d.ts +4 -0
- package/core/pipeline/connectAttachmentToShader.js +25 -22
- package/core/pipeline/connectTargetsToShader.d.ts +3 -0
- package/core/pipeline/connectTargetsToShader.js +29 -27
- package/core/pipeline/drawState.d.ts +52 -0
- package/core/pipeline/drawState.js +225 -0
- package/core/pipeline/performanceTracker.d.ts +14 -0
- package/core/pipeline/performanceTracker.js +34 -0
- package/core/pipeline/pipelineUtils.d.ts +18 -0
- package/core/pipeline/pipelineUtils.js +54 -25
- package/core/pipeline/priors.d.ts +1 -0
- package/core/pipeline/priors.js +12 -0
- package/core/pipeline/renderPipeline.d.ts +246 -261
- package/core/pipeline/renderPipeline.js +487 -480
- package/core/pipeline/timeable.d.ts +28 -18
- package/core/pipeline/timeable.js +90 -52
- package/core/pipeline/typeGuards.d.ts +17 -0
- package/core/pipeline/typeGuards.js +52 -22
- package/core/pipeline/webgpuLimitations.d.ts +10 -0
- package/core/pipeline/webgpuLimitations.js +81 -0
- package/core/querySet/querySet.d.ts +26 -21
- package/core/querySet/querySet.js +127 -103
- package/core/rawCodeSnippet/tgpuRawCodeSnippet.d.ts +13 -18
- package/core/rawCodeSnippet/tgpuRawCodeSnippet.js +89 -90
- package/core/resolve/externals.d.ts +25 -8
- package/core/resolve/externals.js +78 -54
- package/core/resolve/namespace.d.ts +22 -25
- package/core/resolve/namespace.js +16 -21
- package/core/resolve/resolvableString.d.ts +7 -0
- package/core/resolve/resolvableString.js +13 -0
- package/core/resolve/resolveData.d.ts +10 -0
- package/core/resolve/resolveData.js +162 -121
- package/core/resolve/stitch.d.ts +8 -0
- package/core/resolve/stitch.js +23 -21
- package/core/resolve/tgpuResolve.d.ts +55 -53
- package/core/resolve/tgpuResolve.js +106 -53
- package/core/root/configurableImpl.d.ts +10 -0
- package/core/root/configurableImpl.js +17 -19
- package/core/root/init.d.ts +76 -38
- package/core/root/init.js +346 -455
- package/core/root/rootTypes.d.ts +461 -636
- package/core/root/rootTypes.js +1 -0
- package/core/sampler/sampler.d.ts +50 -31
- package/core/sampler/sampler.js +120 -113
- package/core/simulate/tgpuSimulate.d.ts +9 -12
- package/core/simulate/tgpuSimulate.js +68 -71
- package/core/slot/accessor.d.ts +36 -13
- package/core/slot/accessor.js +138 -91
- package/core/slot/internalSlots.d.ts +2 -0
- package/core/slot/internalSlots.js +1 -6
- package/core/slot/lazy.d.ts +2 -6
- package/core/slot/lazy.js +71 -39
- package/core/slot/slot.d.ts +2 -6
- package/core/slot/slot.js +45 -38
- package/core/slot/slotTypes.d.ts +78 -80
- package/core/slot/slotTypes.js +11 -16
- package/core/texture/externalTexture.d.ts +20 -11
- package/core/texture/externalTexture.js +46 -46
- package/core/texture/texture.d.ts +152 -97
- package/core/texture/texture.js +407 -314
- package/core/texture/textureFormats.d.ts +42 -23
- package/core/texture/textureFormats.js +104 -75
- package/core/texture/textureProps.d.ts +7 -10
- package/core/texture/textureProps.js +1 -0
- package/core/texture/textureUtils.d.ts +8 -0
- package/core/texture/textureUtils.js +185 -179
- package/core/texture/usageExtension.d.ts +21 -18
- package/core/texture/usageExtension.js +13 -17
- package/core/unroll/tgpuUnroll.d.ts +20 -19
- package/core/unroll/tgpuUnroll.js +82 -91
- package/core/valueProxyUtils.d.ts +3 -0
- package/core/valueProxyUtils.js +52 -41
- package/core/variable/tgpuVariable.d.ts +26 -27
- package/core/variable/tgpuVariable.js +93 -96
- package/core/vertexLayout/connectAttributesToShader.d.ts +9 -0
- package/core/vertexLayout/connectAttributesToShader.js +61 -56
- package/core/vertexLayout/vertexAttribute.d.ts +21 -17
- package/core/vertexLayout/vertexAttribute.js +1 -0
- package/core/vertexLayout/vertexLayout.d.ts +24 -18
- package/core/vertexLayout/vertexLayout.js +130 -99
- package/core/whitespaces.d.ts +2 -0
- package/core/whitespaces.js +16 -0
- package/data/alignIO.d.ts +7 -0
- package/data/alignIO.js +13 -13
- package/data/alignmentOf.d.ts +5 -8
- package/data/alignmentOf.js +90 -75
- package/data/array.d.ts +17 -9
- package/data/array.js +57 -40
- package/data/atomic.d.ts +2 -7
- package/data/atomic.js +26 -23
- package/data/attributes.d.ts +19 -21
- package/data/attributes.js +192 -132
- package/data/autoStruct.d.ts +36 -3
- package/data/autoStruct.js +84 -81
- package/data/compiledIO.d.ts +5 -0
- package/data/compiledIO.js +231 -215
- package/data/dataIO.d.ts +13 -11
- package/data/dataIO.js +643 -589
- package/data/dataTypes.d.ts +83 -65
- package/data/dataTypes.js +66 -68
- package/data/deepEqual.d.ts +2 -7
- package/data/deepEqual.js +80 -55
- package/data/disarray.d.ts +6 -10
- package/data/disarray.js +52 -46
- package/data/float16Conversion.d.ts +4 -0
- package/data/float16Conversion.js +7 -0
- package/data/generalizeFn.d.ts +25 -0
- package/data/generalizeFn.js +89 -0
- package/data/getLongestContiguousPrefix.d.ts +4 -8
- package/data/getLongestContiguousPrefix.js +6 -11
- package/data/index.d.ts +30 -31
- package/data/index.js +39 -172
- package/data/instanceToSchema.d.ts +24 -27
- package/data/instanceToSchema.js +1 -0
- package/data/isContiguous.d.ts +4 -8
- package/data/isContiguous.js +6 -11
- package/data/matrix.d.ts +21 -21
- package/data/matrix.js +513 -505
- package/data/numberOps.d.ts +5 -0
- package/data/numberOps.js +21 -21
- package/data/numeric.d.ts +21 -12
- package/data/numeric.js +287 -197
- package/data/offsetUtils.d.ts +9 -13
- package/data/offsetUtils.js +204 -144
- package/data/offsets.d.ts +8 -0
- package/data/offsets.js +33 -33
- package/data/partialIO.d.ts +13 -8
- package/data/partialIO.js +124 -113
- package/data/ptr.d.ts +12 -12
- package/data/ptr.js +42 -44
- package/data/ref.d.ts +40 -27
- package/data/ref.js +125 -95
- package/data/sampler.d.ts +99 -101
- package/data/sampler.js +17 -21
- package/data/schemaCallWrapper.d.ts +19 -0
- package/data/schemaCallWrapper.js +31 -26
- package/data/schemaMemoryLayout.d.ts +8 -0
- package/data/schemaMemoryLayout.js +213 -185
- package/data/sizeOf.d.ts +4 -8
- package/data/sizeOf.js +6 -11
- package/data/snippet.d.ts +96 -20
- package/data/snippet.js +75 -86
- package/data/struct.d.ts +4 -7
- package/data/struct.js +51 -39
- package/data/texture.d.ts +253 -250
- package/data/texture.js +238 -200
- package/data/unstruct.d.ts +2 -7
- package/data/unstruct.js +43 -37
- package/data/vector.d.ts +33 -21
- package/data/vector.js +234 -221
- package/data/vectorImpl.d.ts +231 -0
- package/data/vectorImpl.js +563 -515
- package/data/vectorOps.d.ts +25 -0
- package/data/vectorOps.js +118 -669
- package/data/vertexFormatData.d.ts +181 -184
- package/data/vertexFormatData.js +104 -106
- package/data/wgslTypes.d.ts +665 -600
- package/data/wgslTypes.js +220 -198
- package/errors.d.ts +50 -24
- package/errors.js +146 -126
- package/execMode.d.ts +16 -0
- package/execMode.js +47 -40
- package/extension.d.ts +13 -8
- package/extension.js +10 -16
- package/getGPUValue.d.ts +1 -0
- package/getGPUValue.js +2 -7
- package/index.d.ts +28 -68
- package/index.js +8 -28
- package/indexNamedExports.d.ts +69 -42
- package/indexNamedExports.js +25 -0
- package/internal.d.ts +16 -0
- package/internal.js +12 -0
- package/mathUtils.d.ts +5 -0
- package/mathUtils.js +7 -11
- package/memo.d.ts +11 -0
- package/memo.js +20 -22
- package/minify.d.ts +5 -0
- package/minify.js +93 -0
- package/nameUtils.d.ts +29 -0
- package/nameUtils.js +427 -394
- package/package.json +5 -1
- package/resolutionCtx.d.ts +162 -22
- package/resolutionCtx.js +911 -629
- package/serial/registry.d.ts +15 -0
- package/serial/registry.js +106 -0
- package/serial/restore.d.ts +49 -0
- package/serial/restore.js +68 -0
- package/serial/schema.d.ts +58 -0
- package/serial/schema.js +209 -0
- package/serial/types.d.ts +5 -0
- package/serial/types.js +1 -0
- package/shared/env.d.ts +9 -0
- package/shared/env.js +9 -12
- package/shared/generators.d.ts +4 -0
- package/shared/generators.js +10 -12
- package/shared/meta.d.ts +29 -14
- package/shared/meta.js +71 -55
- package/shared/normalizeMetadata.d.ts +32 -27
- package/shared/normalizeMetadata.js +23 -36
- package/shared/repr.d.ts +73 -55
- package/shared/repr.js +1 -0
- package/shared/soul.d.ts +17 -0
- package/shared/soul.js +1 -0
- package/shared/stringify.d.ts +2 -0
- package/shared/stringify.js +29 -20
- package/shared/symbols.d.ts +26 -20
- package/shared/symbols.js +79 -79
- package/shared/tseynit.d.ts +2 -0
- package/shared/tseynit.js +160 -75
- package/shared/utilityTypes.d.ts +30 -14
- package/shared/utilityTypes.js +2 -6
- package/shared/vertexFormat.d.ts +41 -43
- package/shared/vertexFormat.js +59 -62
- package/std/array.d.ts +2 -7
- package/std/array.js +18 -23
- package/std/atomic.d.ts +14 -18
- package/std/atomic.js +96 -95
- package/std/bitcast.d.ts +193 -10
- package/std/bitcast.js +309 -39
- package/std/boolean.d.ts +19 -33
- package/std/boolean.js +296 -292
- package/std/copy.d.ts +2 -7
- package/std/copy.js +27 -24
- package/std/derivative.d.ts +11 -15
- package/std/derivative.js +56 -79
- package/std/discard.d.ts +1 -6
- package/std/discard.js +7 -14
- package/std/environment.d.ts +19 -14
- package/std/environment.js +71 -51
- package/std/extensions.d.ts +2 -8
- package/std/extensions.js +10 -11
- package/std/index.d.ts +20 -24
- package/std/index.js +32 -187
- package/std/matrix.d.ts +6 -12
- package/std/matrix.js +60 -69
- package/std/numeric.d.ts +150 -146
- package/std/numeric.js +771 -727
- package/std/operators.d.ts +19 -27
- package/std/operators.js +195 -194
- package/std/packing.d.ts +5 -11
- package/std/packing.js +67 -75
- package/std/range.d.ts +6 -11
- package/std/range.js +48 -36
- package/std/subgroup.d.ts +33 -37
- package/std/subgroup.js +180 -217
- package/std/texture.d.ts +70 -38
- package/std/texture.js +176 -172
- package/taskQueue.d.ts +6 -0
- package/taskQueue.js +30 -0
- package/tgpu.d.ts +16 -0
- package/tgpu.js +17 -44
- package/tgpuBindGroupLayout.d.ts +132 -152
- package/tgpuBindGroupLayout.js +346 -268
- package/tgpuLogger.d.ts +34 -0
- package/tgpuLogger.js +64 -0
- package/tgpuUnstable.d.ts +16 -22
- package/tgpuUnstable.js +13 -35
- package/tgsl/accessIndex.d.ts +2 -0
- package/tgsl/accessIndex.js +76 -33
- package/tgsl/accessProp.d.ts +2 -0
- package/tgsl/accessProp.js +142 -101
- package/tgsl/accessStructProp.d.ts +5 -0
- package/tgsl/accessStructProp.js +13 -15
- package/tgsl/consoleLog/deserializers.d.ts +13 -0
- package/tgsl/consoleLog/deserializers.js +119 -103
- package/tgsl/consoleLog/logGenerator.d.ts +21 -0
- package/tgsl/consoleLog/logGenerator.js +85 -80
- package/tgsl/consoleLog/serializers.d.ts +21 -0
- package/tgsl/consoleLog/serializers.js +119 -100
- package/tgsl/consoleLog/types.d.ts +40 -39
- package/tgsl/consoleLog/types.js +1 -0
- package/tgsl/conversion.d.ts +33 -0
- package/tgsl/conversion.js +271 -216
- package/tgsl/forOfUtils.d.ts +15 -0
- package/tgsl/forOfUtils.js +85 -70
- package/tgsl/generationHelpers.d.ts +22 -39
- package/tgsl/generationHelpers.js +85 -58
- package/tgsl/infixDispatch.d.ts +70 -0
- package/tgsl/infixDispatch.js +48 -46
- package/tgsl/jsPolyfills.d.ts +16 -19
- package/tgsl/jsPolyfills.js +44 -42
- package/tgsl/makeDereferenceable.d.ts +48 -0
- package/tgsl/makeDereferenceable.js +86 -0
- package/tgsl/makeResolvable.d.ts +22 -0
- package/tgsl/makeResolvable.js +33 -0
- package/tgsl/shaderGenerator.d.ts +77 -17
- package/tgsl/shaderGenerator.js +1 -0
- package/tgsl/shellless.d.ts +6 -9
- package/tgsl/shellless.js +73 -43
- package/tgsl/wgslGenerator.d.ts +66 -59
- package/tgsl/wgslGenerator.js +1345 -760
- package/types.d.ts +287 -222
- package/types.js +61 -44
- package/unwrapper.d.ts +31 -26
- package/unwrapper.js +1 -0
- package/wgslExtensions.d.ts +3 -5
- package/wgslExtensions.js +12 -16
- package/_virtual/rolldown_runtime.js +0 -13
- package/core/buffer/bufferShorthand.d.ts +0 -50
- package/core/buffer/bufferShorthand.js +0 -55
- package/core/pipeline/applyPipelineState.js +0 -37
- package/core/pipeline/limitsOverflow.js +0 -13
- package/package.js +0 -5
- package/tgsl/shaderGenerator_members.d.ts +0 -33
- package/tgsl/shaderGenerator_members.js +0 -12
package/data/dataTypes.d.ts
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
import { TgpuNamable } from
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
72
|
-
|
|
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>> = {
|
|
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
|
-
|
|
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
|
|
115
|
-
|
|
116
|
-
declare
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
export
|
|
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
|
-
|
|
12
|
-
|
|
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
|
-
|
|
16
|
-
|
|
15
|
+
export function unptr(data) {
|
|
16
|
+
if (wgsl.isPtr(data)) {
|
|
17
|
+
return data.inner;
|
|
18
|
+
}
|
|
19
|
+
return data;
|
|
17
20
|
}
|
|
18
|
-
const looseTypeLiterals = [
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
57
|
+
export function isLooseDecorated(value) {
|
|
58
|
+
return isMarkedInternal(value) && value?.type === 'loose-decorated';
|
|
61
59
|
}
|
|
62
|
-
function getCustomAlignment(data) {
|
|
63
|
-
|
|
60
|
+
export function getCustomAlignment(data) {
|
|
61
|
+
return data.attribs?.find(wgsl.isAlignAttrib)
|
|
62
|
+
?.params[0];
|
|
64
63
|
}
|
|
65
|
-
function getCustomSize(data) {
|
|
66
|
-
|
|
64
|
+
export function getCustomSize(data) {
|
|
65
|
+
return data.attribs?.find(wgsl.isSizeAttrib)
|
|
66
|
+
?.params[0];
|
|
67
67
|
}
|
|
68
|
-
function getCustomLocation(data) {
|
|
69
|
-
|
|
68
|
+
export function getCustomLocation(data) {
|
|
69
|
+
return data.attribs?.find(wgsl.isLocationAttrib)
|
|
70
|
+
?.params[0];
|
|
70
71
|
}
|
|
71
|
-
function isData(value) {
|
|
72
|
-
|
|
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 };
|
package/data/deepEqual.d.ts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import { AnyData } from
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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 };
|
package/data/disarray.d.ts
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
import { AnyData, Disarray } from
|
|
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
|
-
|
|
8
|
-
|
|
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
|
-
|
|
34
|
-
export {
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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 };
|