typegpu 0.11.9 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +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/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 +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 +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 -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/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 -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 +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 -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 -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 -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 +1344 -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/package.js +0 -5
- package/tgsl/shaderGenerator_members.d.ts +0 -33
- package/tgsl/shaderGenerator_members.js +0 -12
|
@@ -1,200 +1,228 @@
|
|
|
1
|
-
import { isDecorated, isWgslArray, isWgslStruct } from "./wgslTypes.js";
|
|
2
|
-
import { getCustomSize, isDisarray, isLooseDecorated, isUnstruct, undecorate } from "./dataTypes.js";
|
|
3
|
-
import { alignmentOf, customAlignmentOf } from "./alignmentOf.js";
|
|
4
1
|
import { roundUp } from "../mathUtils.js";
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
import { alignmentOf, customAlignmentOf } from "./alignmentOf.js";
|
|
3
|
+
import { getCustomSize, isDisarray, isLooseDecorated, isUnstruct, undecorate, } from "./dataTypes.js";
|
|
4
|
+
import { isDecorated, isWgslArray, isWgslStruct } from "./wgslTypes.js";
|
|
7
5
|
const knownSizesMap = {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
6
|
+
bool: 4,
|
|
7
|
+
f32: 4,
|
|
8
|
+
f16: 2,
|
|
9
|
+
i32: 4,
|
|
10
|
+
u32: 4,
|
|
11
|
+
u16: 2,
|
|
12
|
+
vec2f: 8,
|
|
13
|
+
vec2h: 4,
|
|
14
|
+
vec2i: 8,
|
|
15
|
+
vec2u: 8,
|
|
16
|
+
'vec2<bool>': 8,
|
|
17
|
+
vec3f: 12,
|
|
18
|
+
vec3h: 6,
|
|
19
|
+
vec3i: 12,
|
|
20
|
+
vec3u: 12,
|
|
21
|
+
'vec3<bool>': 12,
|
|
22
|
+
vec4f: 16,
|
|
23
|
+
vec4h: 8,
|
|
24
|
+
vec4i: 16,
|
|
25
|
+
vec4u: 16,
|
|
26
|
+
'vec4<bool>': 16,
|
|
27
|
+
mat2x2f: 16,
|
|
28
|
+
mat3x3f: 48,
|
|
29
|
+
mat4x4f: 64,
|
|
30
|
+
uint8: 1,
|
|
31
|
+
uint8x2: 2,
|
|
32
|
+
uint8x4: 4,
|
|
33
|
+
sint8: 1,
|
|
34
|
+
sint8x2: 2,
|
|
35
|
+
sint8x4: 4,
|
|
36
|
+
unorm8: 1,
|
|
37
|
+
unorm8x2: 2,
|
|
38
|
+
unorm8x4: 4,
|
|
39
|
+
snorm8: 1,
|
|
40
|
+
snorm8x2: 2,
|
|
41
|
+
snorm8x4: 4,
|
|
42
|
+
uint16: 2,
|
|
43
|
+
uint16x2: 4,
|
|
44
|
+
uint16x4: 8,
|
|
45
|
+
sint16: 2,
|
|
46
|
+
sint16x2: 4,
|
|
47
|
+
sint16x4: 8,
|
|
48
|
+
unorm16: 2,
|
|
49
|
+
unorm16x2: 4,
|
|
50
|
+
unorm16x4: 8,
|
|
51
|
+
snorm16: 2,
|
|
52
|
+
snorm16x2: 4,
|
|
53
|
+
snorm16x4: 8,
|
|
54
|
+
float16: 2,
|
|
55
|
+
float16x2: 4,
|
|
56
|
+
float16x4: 8,
|
|
57
|
+
float32: 4,
|
|
58
|
+
float32x2: 8,
|
|
59
|
+
float32x3: 12,
|
|
60
|
+
float32x4: 16,
|
|
61
|
+
uint32: 4,
|
|
62
|
+
uint32x2: 8,
|
|
63
|
+
uint32x3: 12,
|
|
64
|
+
uint32x4: 16,
|
|
65
|
+
sint32: 4,
|
|
66
|
+
sint32x2: 8,
|
|
67
|
+
sint32x3: 12,
|
|
68
|
+
sint32x4: 16,
|
|
69
|
+
'unorm10-10-10-2': 4,
|
|
70
|
+
'unorm8x4-bgra': 4,
|
|
71
|
+
atomic: 4,
|
|
74
72
|
};
|
|
75
73
|
function computeMLOfStruct(struct) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
74
|
+
let size = 0;
|
|
75
|
+
let longestContiguousPrefix = 0;
|
|
76
|
+
let isContiguous = true;
|
|
77
|
+
let prefixEnd = false;
|
|
78
|
+
for (const property of Object.values(struct.propTypes)) {
|
|
79
|
+
if (Number.isNaN(size)) {
|
|
80
|
+
throw new Error('Only the last property of a struct can be unbounded');
|
|
81
|
+
}
|
|
82
|
+
const prevSize = size;
|
|
83
|
+
size = roundUp(size, alignmentOf(property));
|
|
84
|
+
const hasPadding = prevSize !== size;
|
|
85
|
+
const propLayout = computeMemoryLayout(property);
|
|
86
|
+
size += propLayout.size;
|
|
87
|
+
if (Number.isNaN(size) && property.type !== 'array') {
|
|
88
|
+
throw new Error('Cannot nest unbounded struct within another struct');
|
|
89
|
+
}
|
|
90
|
+
if (prefixEnd) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (!hasPadding && propLayout.isContiguous) {
|
|
94
|
+
longestContiguousPrefix += propLayout.size;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
prefixEnd = true;
|
|
98
|
+
isContiguous = false;
|
|
99
|
+
if (!hasPadding) {
|
|
100
|
+
longestContiguousPrefix += propLayout.longestContiguousPrefix;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const trueSize = roundUp(size, alignmentOf(struct));
|
|
105
|
+
return {
|
|
106
|
+
isContiguous: size === trueSize && isContiguous,
|
|
107
|
+
size: trueSize,
|
|
108
|
+
longestContiguousPrefix,
|
|
109
|
+
};
|
|
102
110
|
}
|
|
103
111
|
function computeMLOfUnstruct(data) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
112
|
+
let size = 0;
|
|
113
|
+
let longestContiguousPrefix = 0;
|
|
114
|
+
let isContiguous = true;
|
|
115
|
+
let prefixEnd = false;
|
|
116
|
+
for (const property of Object.values(data.propTypes)) {
|
|
117
|
+
const alignment = customAlignmentOf(property);
|
|
118
|
+
const prevSize = size;
|
|
119
|
+
size = roundUp(size, alignment);
|
|
120
|
+
const hasPadding = prevSize !== size;
|
|
121
|
+
if (hasPadding) {
|
|
122
|
+
isContiguous = false;
|
|
123
|
+
}
|
|
124
|
+
const propLayout = computeMemoryLayout(property);
|
|
125
|
+
size += propLayout.size;
|
|
126
|
+
if (prefixEnd) {
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
if (!hasPadding && propLayout.isContiguous) {
|
|
130
|
+
longestContiguousPrefix += propLayout.size;
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
prefixEnd = true;
|
|
134
|
+
isContiguous = false;
|
|
135
|
+
if (!hasPadding) {
|
|
136
|
+
longestContiguousPrefix += propLayout.longestContiguousPrefix;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
isContiguous: isContiguous,
|
|
142
|
+
size,
|
|
143
|
+
longestContiguousPrefix,
|
|
144
|
+
};
|
|
129
145
|
}
|
|
130
146
|
function computeMLOfWgslArray(data) {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
147
|
+
const elementType = data.elementType;
|
|
148
|
+
const elementMemoryLayout = computeMemoryLayout(elementType);
|
|
149
|
+
const elementSize = elementMemoryLayout.size;
|
|
150
|
+
const stride = roundUp(elementSize, alignmentOf(elementType));
|
|
151
|
+
const hasPadding = stride > elementSize;
|
|
152
|
+
const isContiguous = !hasPadding && elementMemoryLayout.isContiguous;
|
|
153
|
+
const size = data.elementCount === 0 ? Number.NaN : data.elementCount * stride;
|
|
154
|
+
let longestContiguousPrefix;
|
|
155
|
+
if (isContiguous) {
|
|
156
|
+
longestContiguousPrefix = size;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
longestContiguousPrefix = elementMemoryLayout.longestContiguousPrefix;
|
|
160
|
+
}
|
|
161
|
+
return { size, isContiguous, longestContiguousPrefix };
|
|
145
162
|
}
|
|
146
163
|
function computeMLOfDisarray(data) {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
164
|
+
const elementType = data.elementType;
|
|
165
|
+
const elementMemoryLayout = computeMemoryLayout(elementType);
|
|
166
|
+
const elementSize = elementMemoryLayout.size;
|
|
167
|
+
const stride = roundUp(elementSize, customAlignmentOf(elementType));
|
|
168
|
+
const hasPadding = stride > elementSize;
|
|
169
|
+
const isContiguous = !hasPadding && elementMemoryLayout.isContiguous;
|
|
170
|
+
const size = data.elementCount * stride;
|
|
171
|
+
let longestContiguousPrefix;
|
|
172
|
+
if (isContiguous) {
|
|
173
|
+
longestContiguousPrefix = size;
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
longestContiguousPrefix = elementMemoryLayout.longestContiguousPrefix;
|
|
177
|
+
}
|
|
178
|
+
return { size, isContiguous, longestContiguousPrefix };
|
|
161
179
|
}
|
|
162
180
|
function computeMemoryLayout(data) {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
181
|
+
const knownSize = knownSizesMap[data.type];
|
|
182
|
+
if (knownSize !== undefined) {
|
|
183
|
+
return {
|
|
184
|
+
isContiguous: data.type !== 'mat3x3f',
|
|
185
|
+
size: knownSize,
|
|
186
|
+
longestContiguousPrefix: data.type === 'mat3x3f' ? 12 : knownSize,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
if (isWgslStruct(data)) {
|
|
190
|
+
return computeMLOfStruct(data);
|
|
191
|
+
}
|
|
192
|
+
if (isUnstruct(data)) {
|
|
193
|
+
return computeMLOfUnstruct(data);
|
|
194
|
+
}
|
|
195
|
+
if (isWgslArray(data)) {
|
|
196
|
+
return computeMLOfWgslArray(data);
|
|
197
|
+
}
|
|
198
|
+
if (isDisarray(data)) {
|
|
199
|
+
return computeMLOfDisarray(data);
|
|
200
|
+
}
|
|
201
|
+
if (isDecorated(data) || isLooseDecorated(data)) {
|
|
202
|
+
const size = getCustomSize(data);
|
|
203
|
+
const undecoratedLayout = computeMemoryLayout(undecorate(data));
|
|
204
|
+
if (size) {
|
|
205
|
+
const isContiguous = size === undecoratedLayout.size && undecoratedLayout.isContiguous;
|
|
206
|
+
return {
|
|
207
|
+
isContiguous,
|
|
208
|
+
size,
|
|
209
|
+
longestContiguousPrefix: undecoratedLayout.longestContiguousPrefix,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
return computeMemoryLayout(data.inner);
|
|
213
|
+
}
|
|
214
|
+
throw new Error(`Cannot determine memory layout of data: ${data}`);
|
|
184
215
|
}
|
|
185
216
|
/**
|
|
186
|
-
* Since memory layout can be inferred from data types, they are not stored on them.
|
|
187
|
-
* Instead, this weak map acts as an extended property of those data types.
|
|
188
|
-
*/
|
|
189
|
-
const cachedLayouts =
|
|
190
|
-
function getLayoutInfo(schema, key) {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
217
|
+
* Since memory layout can be inferred from data types, they are not stored on them.
|
|
218
|
+
* Instead, this weak map acts as an extended property of those data types.
|
|
219
|
+
*/
|
|
220
|
+
const cachedLayouts = new WeakMap();
|
|
221
|
+
export function getLayoutInfo(schema, key) {
|
|
222
|
+
let layout = cachedLayouts.get(schema);
|
|
223
|
+
if (layout === undefined) {
|
|
224
|
+
layout = computeMemoryLayout(schema);
|
|
225
|
+
cachedLayouts.set(schema, layout);
|
|
226
|
+
}
|
|
227
|
+
return layout[key];
|
|
197
228
|
}
|
|
198
|
-
|
|
199
|
-
//#endregion
|
|
200
|
-
export { getLayoutInfo };
|
package/data/sizeOf.d.ts
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
//#region src/data/sizeOf.d.ts
|
|
5
|
-
|
|
1
|
+
import type { AnyData } from './dataTypes.ts';
|
|
2
|
+
import type { BaseData } from './wgslTypes.ts';
|
|
3
|
+
export declare function sizeOf(schema: BaseData): number;
|
|
6
4
|
/**
|
|
7
5
|
* Returns the size (in bytes) of data represented by the `schema`.
|
|
8
6
|
*/
|
|
9
|
-
declare function PUBLIC_sizeOf(schema: AnyData): number;
|
|
10
|
-
//#endregion
|
|
11
|
-
export { PUBLIC_sizeOf };
|
|
7
|
+
export declare function PUBLIC_sizeOf(schema: AnyData): number;
|
package/data/sizeOf.js
CHANGED
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
import { getLayoutInfo } from "./schemaMemoryLayout.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
function sizeOf(schema) {
|
|
5
|
-
return getLayoutInfo(schema, "size");
|
|
2
|
+
export function sizeOf(schema) {
|
|
3
|
+
return getLayoutInfo(schema, 'size');
|
|
6
4
|
}
|
|
7
5
|
/**
|
|
8
|
-
* Returns the size (in bytes) of data represented by the `schema`.
|
|
9
|
-
*/
|
|
10
|
-
function PUBLIC_sizeOf(schema) {
|
|
11
|
-
|
|
6
|
+
* Returns the size (in bytes) of data represented by the `schema`.
|
|
7
|
+
*/
|
|
8
|
+
export function PUBLIC_sizeOf(schema) {
|
|
9
|
+
return sizeOf(schema);
|
|
12
10
|
}
|
|
13
|
-
|
|
14
|
-
//#endregion
|
|
15
|
-
export { PUBLIC_sizeOf, sizeOf };
|
package/data/snippet.d.ts
CHANGED
|
@@ -1,22 +1,98 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
import type { UnknownData } from './dataTypes.ts';
|
|
2
|
+
import { type BaseData } from './wgslTypes.ts';
|
|
3
|
+
export type Origin = 'uniform' | 'readonly' | 'mutable' | 'workgroup' | 'private' | 'handle' | 'function' | 'local-def' | 'constant-immutable-def' | 'runtime-immutable-def' | 'argument' | 'runtime' | 'constant';
|
|
4
|
+
/**
|
|
5
|
+
* What happens to a snippet's origin when it's deep copied in JS, and left as is in WGSL?
|
|
6
|
+
* e.g. `vec3f(vec3f(0, 1, 2))`
|
|
7
|
+
*/
|
|
8
|
+
export declare function fallthroughCopyOrigin(origin: Origin): Origin;
|
|
9
|
+
/**
|
|
10
|
+
* Whether a snippet aliases a value that lives outside the current expression.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* function foo(a: number) {
|
|
15
|
+
* const color = d.vec3f(1, 2, 3);
|
|
16
|
+
* return color * a;
|
|
17
|
+
* }
|
|
18
|
+
*
|
|
19
|
+
* // References:
|
|
20
|
+
* // - color
|
|
21
|
+
* // - a
|
|
22
|
+
* //
|
|
23
|
+
* // Not references:
|
|
24
|
+
* // - d.vec3f(1, 2, 3)
|
|
25
|
+
* // - color * a
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function isAlias(snippet: Snippet): boolean;
|
|
29
|
+
export declare const originToPtrParams: {
|
|
30
|
+
readonly uniform: {
|
|
31
|
+
readonly space: "uniform";
|
|
32
|
+
readonly access: "read";
|
|
33
|
+
};
|
|
34
|
+
readonly readonly: {
|
|
35
|
+
readonly space: "storage";
|
|
36
|
+
readonly access: "read";
|
|
37
|
+
};
|
|
38
|
+
readonly mutable: {
|
|
39
|
+
readonly space: "storage";
|
|
40
|
+
readonly access: "read-write";
|
|
41
|
+
};
|
|
42
|
+
readonly workgroup: {
|
|
43
|
+
readonly space: "workgroup";
|
|
44
|
+
readonly access: "read-write";
|
|
45
|
+
};
|
|
46
|
+
readonly private: {
|
|
47
|
+
readonly space: "private";
|
|
48
|
+
readonly access: "read-write";
|
|
49
|
+
};
|
|
50
|
+
readonly function: {
|
|
51
|
+
readonly space: "function";
|
|
52
|
+
readonly access: "read-write";
|
|
53
|
+
};
|
|
54
|
+
readonly 'local-def': {
|
|
55
|
+
readonly space: "function";
|
|
56
|
+
readonly access: "read-write";
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
export type OriginToPtrParams = typeof originToPtrParams;
|
|
60
|
+
export interface Snippet {
|
|
61
|
+
readonly value: unknown;
|
|
62
|
+
/**
|
|
63
|
+
* The type that `value` is assignable to (not necessary exactly inferred as).
|
|
64
|
+
* E.g. `1.1` is assignable to `f32`, but `1.1` itself is an abstract float
|
|
65
|
+
*/
|
|
66
|
+
readonly dataType: BaseData | UnknownData;
|
|
67
|
+
readonly origin: Origin;
|
|
68
|
+
/**
|
|
69
|
+
* A snippet has possible side effects either if we're sure that it has side
|
|
70
|
+
* effects, or if our systems are unable to reliably determine that it
|
|
71
|
+
* doesn't have side effects.
|
|
72
|
+
*
|
|
73
|
+
* A snippet has side-effects if executing the WGSL code within and not using
|
|
74
|
+
* the return value is not equivalent to just not executing the WGSL code at
|
|
75
|
+
* all, with a margin of executing a few more instructions. For example, code
|
|
76
|
+
* that mutates memory, or synchronizes threads, has side effects.
|
|
77
|
+
*/
|
|
78
|
+
readonly possibleSideEffects: boolean;
|
|
15
79
|
}
|
|
16
|
-
interface ResolvedSnippet extends Snippet {
|
|
17
|
-
|
|
18
|
-
|
|
80
|
+
export interface ResolvedSnippet extends Snippet {
|
|
81
|
+
readonly value: string;
|
|
82
|
+
readonly dataType: BaseData;
|
|
19
83
|
}
|
|
20
|
-
type MapValueToSnippet<T> = {
|
|
21
|
-
|
|
22
|
-
|
|
84
|
+
export type MapValueToSnippet<T> = {
|
|
85
|
+
[K in keyof T]: Snippet;
|
|
86
|
+
};
|
|
87
|
+
export declare function isSnippet(value: unknown): value is Snippet;
|
|
88
|
+
export declare function isSnippetNumeric(snippet: Snippet): boolean;
|
|
89
|
+
export declare function snip(value: string, dataType: BaseData, origin: Origin, possibleSideEffects?: boolean): ResolvedSnippet;
|
|
90
|
+
export declare function snip(value: unknown, dataType: BaseData | UnknownData, origin: Origin, possibleSideEffects?: boolean): Snippet;
|
|
91
|
+
export declare function withDataType(dataType: BaseData | UnknownData, snippet: ResolvedSnippet): ResolvedSnippet;
|
|
92
|
+
export declare function withDataType(dataType: BaseData | UnknownData, snippet: Snippet): Snippet;
|
|
93
|
+
export declare function withValue(value: string, snippet: Snippet): ResolvedSnippet;
|
|
94
|
+
export declare function withValue(value: unknown, snippet: Snippet): Snippet;
|
|
95
|
+
export declare function withSideEffects(possibleSideEffects: boolean, snippet: ResolvedSnippet): ResolvedSnippet;
|
|
96
|
+
export declare function withSideEffects(possibleSideEffects: boolean, snippet: Snippet): Snippet;
|
|
97
|
+
export declare function noSideEffects(snippet: ResolvedSnippet): ResolvedSnippet;
|
|
98
|
+
export declare function noSideEffects(snippet: Snippet): Snippet;
|