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.
- 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 +279 -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 +37 -38
- 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 -0
- package/core/function/fnCore.js +148 -92
- 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 +18 -20
- 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/limitsOverflow.d.ts +2 -0
- package/core/pipeline/limitsOverflow.js +13 -10
- 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/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 +90 -93
- package/core/resolve/externals.d.ts +25 -7
- package/core/resolve/externals.js +79 -62
- 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 -55
- 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 -454
- package/core/root/rootTypes.d.ts +461 -627
- 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 +6 -9
- package/data/array.js +48 -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 -214
- 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/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 +6 -0
- package/data/numberOps.js +26 -20
- package/data/numeric.d.ts +21 -12
- package/data/numeric.js +287 -192
- 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 +63 -0
- package/data/vectorOps.js +642 -630
- 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 -120
- 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 +428 -398
- package/package.json +9 -3
- package/resolutionCtx.d.ts +162 -22
- package/resolutionCtx.js +911 -624
- 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 -288
- 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 +143 -146
- package/std/numeric.js +858 -749
- package/std/operators.d.ts +19 -27
- package/std/operators.js +227 -193
- 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 +63 -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 -100
- package/tgsl/accessStructProp.d.ts +5 -0
- package/tgsl/accessStructProp.js +18 -0
- 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 +272 -193
- 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 +1344 -747
- package/types.d.ts +287 -221
- 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/package.js +0 -5
- package/tgsl/shaderGenerator_members.d.ts +0 -33
- package/tgsl/shaderGenerator_members.js +0 -12
package/std/bitcast.d.ts
CHANGED
|
@@ -1,10 +1,193 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
declare const bitcastU32toF32: DualFn<BitcastU32toF32Overload>;
|
|
7
|
-
type BitcastU32toI32Overload =
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
43
|
-
|
|
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);
|