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/alignmentOf.js
CHANGED
|
@@ -1,88 +1,103 @@
|
|
|
1
|
-
import { isDecorated, isWgslArray, isWgslStruct } from "./wgslTypes.js";
|
|
2
1
|
import { safeStringify } from "../shared/stringify.js";
|
|
3
|
-
import { getCustomAlignment, isDisarray, isLooseDecorated, isUnstruct } from "./dataTypes.js";
|
|
2
|
+
import { getCustomAlignment, isDisarray, isLooseDecorated, isUnstruct, } from "./dataTypes.js";
|
|
4
3
|
import { packedFormats } from "./vertexFormatData.js";
|
|
5
|
-
|
|
6
|
-
//#region src/data/alignmentOf.ts
|
|
4
|
+
import { isDecorated, isWgslArray, isWgslStruct } from "./wgslTypes.js";
|
|
7
5
|
const knownAlignmentMap = {
|
|
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
|
-
|
|
6
|
+
f32: 4,
|
|
7
|
+
f16: 2,
|
|
8
|
+
i32: 4,
|
|
9
|
+
u32: 4,
|
|
10
|
+
bool: 4,
|
|
11
|
+
u16: 2,
|
|
12
|
+
vec2f: 8,
|
|
13
|
+
vec2h: 4,
|
|
14
|
+
vec2i: 8,
|
|
15
|
+
vec2u: 8,
|
|
16
|
+
'vec2<bool>': 8,
|
|
17
|
+
vec3f: 16,
|
|
18
|
+
vec3h: 8,
|
|
19
|
+
vec3i: 16,
|
|
20
|
+
vec3u: 16,
|
|
21
|
+
'vec3<bool>': 16,
|
|
22
|
+
vec4f: 16,
|
|
23
|
+
vec4h: 8,
|
|
24
|
+
vec4i: 16,
|
|
25
|
+
vec4u: 16,
|
|
26
|
+
'vec4<bool>': 16,
|
|
27
|
+
mat2x2f: 8,
|
|
28
|
+
mat3x3f: 16,
|
|
29
|
+
mat4x4f: 16,
|
|
30
|
+
atomic: 4,
|
|
33
31
|
};
|
|
34
32
|
function computeAlignment(data) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
33
|
+
const dataType = data?.type;
|
|
34
|
+
const knownAlignment = knownAlignmentMap[dataType];
|
|
35
|
+
if (knownAlignment !== undefined) {
|
|
36
|
+
return knownAlignment;
|
|
37
|
+
}
|
|
38
|
+
if (isWgslStruct(data)) {
|
|
39
|
+
return Object.values(data.propTypes)
|
|
40
|
+
.map(alignmentOf)
|
|
41
|
+
.reduce((a, b) => (a > b ? a : b));
|
|
42
|
+
}
|
|
43
|
+
if (isWgslArray(data)) {
|
|
44
|
+
return alignmentOf(data.elementType);
|
|
45
|
+
}
|
|
46
|
+
if (isUnstruct(data)) {
|
|
47
|
+
// A loose struct is aligned to its first property.
|
|
48
|
+
const firstProp = Object.values(data.propTypes)[0];
|
|
49
|
+
return firstProp ? (getCustomAlignment(firstProp) ?? 1) : 1;
|
|
50
|
+
}
|
|
51
|
+
if (isDisarray(data)) {
|
|
52
|
+
return getCustomAlignment(data.elementType) ?? 1;
|
|
53
|
+
}
|
|
54
|
+
if (isDecorated(data) || isLooseDecorated(data)) {
|
|
55
|
+
return getCustomAlignment(data) ?? alignmentOf(data.inner);
|
|
56
|
+
}
|
|
57
|
+
if (packedFormats.has(dataType)) {
|
|
58
|
+
return 1;
|
|
59
|
+
}
|
|
60
|
+
throw new Error(`Cannot determine alignment of data: ${safeStringify(data)}`);
|
|
48
61
|
}
|
|
49
62
|
function computeCustomAlignment(data) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
63
|
+
if (isUnstruct(data)) {
|
|
64
|
+
// A loose struct is aligned to its first property.
|
|
65
|
+
const firstProp = Object.values(data.propTypes)[0];
|
|
66
|
+
return firstProp ? customAlignmentOf(firstProp) : 1;
|
|
67
|
+
}
|
|
68
|
+
if (isDisarray(data)) {
|
|
69
|
+
return customAlignmentOf(data.elementType);
|
|
70
|
+
}
|
|
71
|
+
if (isLooseDecorated(data)) {
|
|
72
|
+
return getCustomAlignment(data) ?? customAlignmentOf(data.inner);
|
|
73
|
+
}
|
|
74
|
+
return getCustomAlignment(data) ?? 1;
|
|
57
75
|
}
|
|
58
76
|
/**
|
|
59
|
-
* Since alignments can be inferred from data types, they are not stored on them.
|
|
60
|
-
* Instead, this weak map acts as an extended property of those data types.
|
|
61
|
-
*/
|
|
62
|
-
const cachedAlignments =
|
|
63
|
-
const cachedCustomAlignments =
|
|
64
|
-
function alignmentOf(data) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
77
|
+
* Since alignments can be inferred from data types, they are not stored on them.
|
|
78
|
+
* Instead, this weak map acts as an extended property of those data types.
|
|
79
|
+
*/
|
|
80
|
+
const cachedAlignments = new WeakMap();
|
|
81
|
+
const cachedCustomAlignments = new WeakMap();
|
|
82
|
+
export function alignmentOf(data) {
|
|
83
|
+
let alignment = cachedAlignments.get(data);
|
|
84
|
+
if (alignment === undefined) {
|
|
85
|
+
alignment = computeAlignment(data);
|
|
86
|
+
cachedAlignments.set(data, alignment);
|
|
87
|
+
}
|
|
88
|
+
return alignment;
|
|
71
89
|
}
|
|
72
|
-
function customAlignmentOf(data) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
90
|
+
export function customAlignmentOf(data) {
|
|
91
|
+
let alignment = cachedCustomAlignments.get(data);
|
|
92
|
+
if (alignment === undefined) {
|
|
93
|
+
alignment = computeCustomAlignment(data);
|
|
94
|
+
cachedCustomAlignments.set(data, alignment);
|
|
95
|
+
}
|
|
96
|
+
return alignment;
|
|
79
97
|
}
|
|
80
98
|
/**
|
|
81
|
-
* Returns the alignment (in bytes) of data represented by the `schema`.
|
|
82
|
-
*/
|
|
83
|
-
function PUBLIC_alignmentOf(schema) {
|
|
84
|
-
|
|
99
|
+
* Returns the alignment (in bytes) of data represented by the `schema`.
|
|
100
|
+
*/
|
|
101
|
+
export function PUBLIC_alignmentOf(schema) {
|
|
102
|
+
return alignmentOf(schema);
|
|
85
103
|
}
|
|
86
|
-
|
|
87
|
-
//#endregion
|
|
88
|
-
export { PUBLIC_alignmentOf, alignmentOf, customAlignmentOf };
|
package/data/array.d.ts
CHANGED
|
@@ -1,15 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
//#region src/data/array.d.ts
|
|
1
|
+
import { type TgpuComptime } from '../core/function/comptime.ts';
|
|
2
|
+
import type { AnyWgslData, Decorated, Location, WgslArray } from './wgslTypes.ts';
|
|
3
|
+
type ForbiddenDecoratedArrayElement<T> = T extends Decorated<infer _, infer Attribs> ? Attribs[number] extends Location ? never : T : never;
|
|
5
4
|
interface WgslArrayConstructor {
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
/**
|
|
6
|
+
* @deprecated Error: Arrays cannot hold decorated types other than @location.
|
|
7
|
+
* Wrap align/size in a struct instead, e.g. d.arrayOf(d.struct({ value: d.align(16, d.u32) }), n).
|
|
8
|
+
*/
|
|
9
|
+
<TElement extends AnyWgslData>(elementType: ForbiddenDecoratedArrayElement<TElement>, elementCount?: number): 'Error: Arrays cannot hold decorated types other than @location. Wrap it in a struct instead, e.g. d.arrayOf(d.struct({ value: d.align(16, d.u32) }), n).';
|
|
10
|
+
<TElement extends AnyWgslData>(elementType: TElement): (elementCount: number) => WgslArray<TElement>;
|
|
11
|
+
<TElement extends AnyWgslData>(elementType: TElement, elementCount: number): WgslArray<TElement>;
|
|
8
12
|
}
|
|
9
13
|
/**
|
|
10
14
|
* Creates an array schema that can be used to construct gpu buffers.
|
|
11
15
|
* Describes arrays with fixed-size length, storing elements of the same type.
|
|
12
16
|
*
|
|
17
|
+
* The only decoration allowed on element types is `d.location`. Decorators like
|
|
18
|
+
* `d.align` and `d.size` cannot be applied directly — wrap them in a struct instead,
|
|
19
|
+
* e.g. `d.arrayOf(d.struct({ value: d.align(16, d.u32) }), n)`.
|
|
20
|
+
*
|
|
13
21
|
* @example
|
|
14
22
|
* const LENGTH = 3;
|
|
15
23
|
* const array = d.arrayOf(d.u32, LENGTH);
|
|
@@ -21,7 +29,7 @@ interface WgslArrayConstructor {
|
|
|
21
29
|
*
|
|
22
30
|
* @param elementType The type of elements in the array.
|
|
23
31
|
* @param elementCount The number of elements in the array.
|
|
32
|
+
* @throws If `elementType` is decorated with anything other than `d.location`.
|
|
24
33
|
*/
|
|
25
|
-
declare const arrayOf: TgpuComptime<WgslArrayConstructor>;
|
|
26
|
-
|
|
27
|
-
export { arrayOf };
|
|
34
|
+
export declare const arrayOf: TgpuComptime<WgslArrayConstructor>;
|
|
35
|
+
export {};
|
package/data/array.js
CHANGED
|
@@ -1,48 +1,65 @@
|
|
|
1
|
+
import { comptime } from "../core/function/comptime.js";
|
|
1
2
|
import { $internal } from "../shared/symbols.js";
|
|
2
3
|
import { schemaCallWrapper } from "./schemaCallWrapper.js";
|
|
3
4
|
import { sizeOf } from "./sizeOf.js";
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
//#region src/data/array.ts
|
|
5
|
+
import { isDecorated, isLocationAttrib } from "./wgslTypes.js";
|
|
7
6
|
/**
|
|
8
|
-
* Creates an array schema that can be used to construct gpu buffers.
|
|
9
|
-
* Describes arrays with fixed-size length, storing elements of the same type.
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* const array = d.arrayOf(d.
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* @
|
|
21
|
-
*
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
7
|
+
* Creates an array schema that can be used to construct gpu buffers.
|
|
8
|
+
* Describes arrays with fixed-size length, storing elements of the same type.
|
|
9
|
+
*
|
|
10
|
+
* The only decoration allowed on element types is `d.location`. Decorators like
|
|
11
|
+
* `d.align` and `d.size` cannot be applied directly — wrap them in a struct instead,
|
|
12
|
+
* e.g. `d.arrayOf(d.struct({ value: d.align(16, d.u32) }), n)`.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* const LENGTH = 3;
|
|
16
|
+
* const array = d.arrayOf(d.u32, LENGTH);
|
|
17
|
+
*
|
|
18
|
+
* If `elementCount` is not specified, a partially applied function is returned.
|
|
19
|
+
* @example
|
|
20
|
+
* const array = d.arrayOf(d.vec3f);
|
|
21
|
+
* // ^? (n: number) => WgslArray<d.Vec3f>
|
|
22
|
+
*
|
|
23
|
+
* @param elementType The type of elements in the array.
|
|
24
|
+
* @param elementCount The number of elements in the array.
|
|
25
|
+
* @throws If `elementType` is decorated with anything other than `d.location`.
|
|
26
|
+
*/
|
|
27
|
+
export const arrayOf = comptime(((elementType, elementCount) => {
|
|
28
|
+
if (isDecorated(elementType) && !elementType.attribs.every(isLocationAttrib)) {
|
|
29
|
+
throw new Error('Arrays cannot hold decorated types other than @location. Wrap it in a struct instead, e.g. d.arrayOf(d.struct({ value: d.align(16, d.u32) }), n).');
|
|
30
|
+
}
|
|
31
|
+
if (elementCount === undefined) {
|
|
32
|
+
return comptime((count) => cpu_arrayOf(elementType, count));
|
|
33
|
+
}
|
|
34
|
+
return cpu_arrayOf(elementType, elementCount);
|
|
35
|
+
})).$name('arrayOf');
|
|
36
|
+
// --------------
|
|
37
|
+
// Implementation
|
|
38
|
+
// --------------
|
|
27
39
|
function cpu_arrayOf(elementType, elementCount) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
40
|
+
// In the schema call, create and return a deep copy
|
|
41
|
+
// by wrapping all the values in `elementType` schema calls.
|
|
42
|
+
const arraySchema = (elements) => {
|
|
43
|
+
if (elements && elements.length !== elementCount) {
|
|
44
|
+
throw new Error(`Array schema of ${elementCount} elements of type ${elementType.type} called with ${elements.length} argument(s).`);
|
|
45
|
+
}
|
|
46
|
+
return Array.from({ length: elementCount }, (_, i) => schemaCallWrapper(elementType, elements?.[i]));
|
|
47
|
+
};
|
|
48
|
+
Object.setPrototypeOf(arraySchema, WgslArrayImpl);
|
|
49
|
+
if (Number.isNaN(sizeOf(elementType))) {
|
|
50
|
+
throw new Error('Cannot nest runtime sized arrays.');
|
|
51
|
+
}
|
|
52
|
+
arraySchema.elementType = elementType;
|
|
53
|
+
if (!Number.isInteger(elementCount) || elementCount < 0) {
|
|
54
|
+
throw new Error(`Cannot create array schema with invalid element count: ${elementCount}.`);
|
|
55
|
+
}
|
|
56
|
+
arraySchema.elementCount = elementCount;
|
|
57
|
+
return arraySchema;
|
|
38
58
|
}
|
|
39
59
|
const WgslArrayImpl = {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
60
|
+
[$internal]: true,
|
|
61
|
+
type: 'array',
|
|
62
|
+
toString() {
|
|
63
|
+
return `arrayOf(${String(this.elementType)}, ${this.elementCount})`;
|
|
64
|
+
},
|
|
45
65
|
};
|
|
46
|
-
|
|
47
|
-
//#endregion
|
|
48
|
-
export { arrayOf };
|
package/data/atomic.d.ts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import { Atomic, I32, U32 } from
|
|
2
|
-
|
|
3
|
-
//#region src/data/atomic.d.ts
|
|
4
|
-
|
|
1
|
+
import type { Atomic, I32, U32 } from './wgslTypes.ts';
|
|
5
2
|
/**
|
|
6
3
|
* Marks a concrete integer scalar type schema (u32 or i32) as a WGSL atomic.
|
|
7
4
|
*
|
|
@@ -11,6 +8,4 @@ import { Atomic, I32, U32 } from "./wgslTypes.js";
|
|
|
11
8
|
*
|
|
12
9
|
* @param data Underlying type schema.
|
|
13
10
|
*/
|
|
14
|
-
declare function atomic<TSchema extends U32 | I32>(data: TSchema): Atomic<TSchema>;
|
|
15
|
-
//#endregion
|
|
16
|
-
export { atomic };
|
|
11
|
+
export declare function atomic<TSchema extends U32 | I32>(data: TSchema): Atomic<TSchema>;
|
package/data/atomic.js
CHANGED
|
@@ -1,26 +1,29 @@
|
|
|
1
1
|
import { $internal } from "../shared/symbols.js";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import { $gpuRepr, $memIdent, $repr, $validStorageSchema, $validUniformSchema, $validVertexSchema, } from "../shared/symbols.js";
|
|
3
|
+
// ----------
|
|
4
|
+
// Public API
|
|
5
|
+
// ----------
|
|
4
6
|
/**
|
|
5
|
-
* Marks a concrete integer scalar type schema (u32 or i32) as a WGSL atomic.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* const atomicU32 = d.atomic(d.u32);
|
|
9
|
-
* const atomicI32 = d.atomic(d.i32);
|
|
10
|
-
*
|
|
11
|
-
* @param data Underlying type schema.
|
|
12
|
-
*/
|
|
13
|
-
function atomic(data) {
|
|
14
|
-
|
|
7
|
+
* Marks a concrete integer scalar type schema (u32 or i32) as a WGSL atomic.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* const atomicU32 = d.atomic(d.u32);
|
|
11
|
+
* const atomicI32 = d.atomic(d.i32);
|
|
12
|
+
*
|
|
13
|
+
* @param data Underlying type schema.
|
|
14
|
+
*/
|
|
15
|
+
export function atomic(data) {
|
|
16
|
+
return new AtomicImpl(data);
|
|
17
|
+
}
|
|
18
|
+
// --------------
|
|
19
|
+
// Implementation
|
|
20
|
+
// --------------
|
|
21
|
+
class AtomicImpl {
|
|
22
|
+
[$internal] = {};
|
|
23
|
+
type = 'atomic';
|
|
24
|
+
inner;
|
|
25
|
+
// ---
|
|
26
|
+
constructor(inner) {
|
|
27
|
+
this.inner = inner;
|
|
28
|
+
}
|
|
15
29
|
}
|
|
16
|
-
var AtomicImpl = class {
|
|
17
|
-
[$internal] = {};
|
|
18
|
-
type = "atomic";
|
|
19
|
-
inner;
|
|
20
|
-
constructor(inner) {
|
|
21
|
-
this.inner = inner;
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
//#endregion
|
|
26
|
-
export { atomic };
|
package/data/attributes.d.ts
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
type
|
|
7
|
-
|
|
8
|
-
type ExtractAttributes<T> = T extends {
|
|
9
|
-
readonly attribs: unknown[];
|
|
1
|
+
import { type AnyData, type AnyLooseData, type IsLooseData, type LooseDecorated, type Undecorate } from './dataTypes.ts';
|
|
2
|
+
import { type Align, type AnyWgslData, type BaseData, type Builtin, type Decorated, type FlatInterpolatableData, type FlatInterpolationType, type Interpolate, type Invariant, type IsWgslData, type Location, type PerspectiveOrLinearInterpolatableData, type PerspectiveOrLinearInterpolationType, type Size, type Vec4f } from './wgslTypes.ts';
|
|
3
|
+
export declare const builtinNames: readonly ["vertex_index", "instance_index", "clip_distances", "position", "front_facing", "frag_depth", "primitive_index", "sample_index", "sample_mask", "fragment", "local_invocation_id", "local_invocation_index", "global_invocation_id", "global_invocation_index", "workgroup_id", "workgroup_index", "num_workgroups", "subgroup_invocation_id", "subgroup_size", "subgroup_id", "num_subgroups"];
|
|
4
|
+
export type BuiltinName = (typeof builtinNames)[number];
|
|
5
|
+
export type AnyAttribute<AllowedBuiltins extends Builtin<BuiltinName> = Builtin<BuiltinName>> = Align<number> | Size<number> | Location | Interpolate | Invariant | AllowedBuiltins;
|
|
6
|
+
export type ExtractAttributes<T> = T extends {
|
|
7
|
+
readonly attribs: unknown[];
|
|
10
8
|
} ? T['attribs'] : [];
|
|
11
9
|
/**
|
|
12
10
|
* Decorates a data-type `TData` with an attribute `TAttrib`.
|
|
@@ -22,9 +20,10 @@ type ExtractAttributes<T> = T extends {
|
|
|
22
20
|
* - else
|
|
23
21
|
* - Wrap `TData` with `Decorated` and a single attribute `[TAttrib]`
|
|
24
22
|
*/
|
|
25
|
-
type Decorate<TData extends BaseData, TAttrib extends AnyAttribute> = IsWgslData<TData> extends true ? Decorated<Undecorate<TData>, [TAttrib, ...ExtractAttributes<TData>]> : IsLooseData<TData> extends true ? LooseDecorated<Undecorate<TData>, [TAttrib, ...ExtractAttributes<TData>]> : never;
|
|
26
|
-
type IsBuiltin<T> = ExtractAttributes<T>[number] extends [] ? false : ExtractAttributes<T>[number] extends Builtin<BuiltinName> ? true : false;
|
|
27
|
-
type HasCustomLocation<T> = ExtractAttributes<T>[number] extends [] ? false : ExtractAttributes<T>[number] extends Location ? true : false;
|
|
23
|
+
export type Decorate<TData extends BaseData, TAttrib extends AnyAttribute> = IsWgslData<TData> extends true ? Decorated<Undecorate<TData>, [TAttrib, ...ExtractAttributes<TData>]> : IsLooseData<TData> extends true ? LooseDecorated<Undecorate<TData>, [TAttrib, ...ExtractAttributes<TData>]> : never;
|
|
24
|
+
export type IsBuiltin<T> = ExtractAttributes<T>[number] extends [] ? false : ExtractAttributes<T>[number] extends Builtin<BuiltinName> ? true : false;
|
|
25
|
+
export type HasCustomLocation<T> = ExtractAttributes<T>[number] extends [] ? false : ExtractAttributes<T>[number] extends Location ? true : false;
|
|
26
|
+
export declare function attribute(data: BaseData, attrib: AnyAttribute): Decorated | LooseDecorated;
|
|
28
27
|
/**
|
|
29
28
|
* Gives the wrapped data-type a custom byte alignment. Useful in order to
|
|
30
29
|
* fulfill uniform alignment requirements.
|
|
@@ -39,7 +38,7 @@ type HasCustomLocation<T> = ExtractAttributes<T>[number] extends [] ? false : Ex
|
|
|
39
38
|
* @param alignment The multiple of bytes this data should align itself to.
|
|
40
39
|
* @param data The data-type to align.
|
|
41
40
|
*/
|
|
42
|
-
declare function align<TAlign extends number, TData extends AnyData>(alignment: TAlign, data: TData): Decorate<TData, Align<TAlign>>;
|
|
41
|
+
export declare function align<TAlign extends number, TData extends AnyData>(alignment: TAlign, data: TData): Decorate<TData, Align<TAlign>>;
|
|
43
42
|
/**
|
|
44
43
|
* Adds padding bytes after the wrapped data-type, until the whole value takes up `size` bytes.
|
|
45
44
|
*
|
|
@@ -52,7 +51,7 @@ declare function align<TAlign extends number, TData extends AnyData>(alignment:
|
|
|
52
51
|
* @param size The amount of bytes that should be reserved for this data-type.
|
|
53
52
|
* @param data The data-type to wrap.
|
|
54
53
|
*/
|
|
55
|
-
declare function size<TSize extends number, TData extends AnyData>(size: TSize, data: TData): Decorate<TData, Size<TSize>>;
|
|
54
|
+
export declare function size<TSize extends number, TData extends AnyData>(size: TSize, data: TData): Decorate<TData, Size<TSize>>;
|
|
56
55
|
/**
|
|
57
56
|
* Assigns an explicit numeric location to a struct member or a parameter that has this type.
|
|
58
57
|
*
|
|
@@ -66,7 +65,7 @@ declare function size<TSize extends number, TData extends AnyData>(size: TSize,
|
|
|
66
65
|
* @param location The explicit numeric location.
|
|
67
66
|
* @param data The data-type to wrap.
|
|
68
67
|
*/
|
|
69
|
-
declare function location<TLocation extends number, TData extends BaseData>(location: TLocation, data: TData): Decorate<TData, Location<TLocation>>;
|
|
68
|
+
export declare function location<TLocation extends number, TData extends BaseData>(location: TLocation, data: TData): Decorate<TData, Location<TLocation>>;
|
|
70
69
|
/**
|
|
71
70
|
* Specifies how user-defined vertex shader output (fragment shader input)
|
|
72
71
|
* must be interpolated.
|
|
@@ -82,7 +81,7 @@ declare function location<TLocation extends number, TData extends BaseData>(loca
|
|
|
82
81
|
* @param interpolationType How data should be interpolated.
|
|
83
82
|
* @param data The data-type to wrap.
|
|
84
83
|
*/
|
|
85
|
-
declare function interpolate<TInterpolation extends PerspectiveOrLinearInterpolationType, TData extends PerspectiveOrLinearInterpolatableData>(interpolationType: TInterpolation, data: TData): Decorate<TData, Interpolate<TInterpolation>>;
|
|
84
|
+
export declare function interpolate<TInterpolation extends PerspectiveOrLinearInterpolationType, TData extends PerspectiveOrLinearInterpolatableData>(interpolationType: TInterpolation, data: TData): Decorate<TData, Interpolate<TInterpolation>>;
|
|
86
85
|
/**
|
|
87
86
|
* Specifies how user-defined vertex shader output (fragment shader input)
|
|
88
87
|
* must be interpolated.
|
|
@@ -100,7 +99,7 @@ declare function interpolate<TInterpolation extends PerspectiveOrLinearInterpola
|
|
|
100
99
|
* @param interpolationType How data should be interpolated.
|
|
101
100
|
* @param data The data-type to wrap.
|
|
102
101
|
*/
|
|
103
|
-
declare function interpolate<TInterpolation extends FlatInterpolationType, TData extends FlatInterpolatableData>(interpolationType: TInterpolation, data: TData): Decorate<TData, Interpolate<TInterpolation>>;
|
|
102
|
+
export declare function interpolate<TInterpolation extends FlatInterpolationType, TData extends FlatInterpolatableData>(interpolationType: TInterpolation, data: TData): Decorate<TData, Interpolate<TInterpolation>>;
|
|
104
103
|
/**
|
|
105
104
|
* Marks a position built-in output value as invariant in vertex shaders.
|
|
106
105
|
* If the data and control flow match for two position outputs in different
|
|
@@ -115,7 +114,6 @@ declare function interpolate<TInterpolation extends FlatInterpolationType, TData
|
|
|
115
114
|
*
|
|
116
115
|
* @param data The position built-in data-type to mark as invariant.
|
|
117
116
|
*/
|
|
118
|
-
declare function invariant(data: Decorated<Vec4f, [Builtin<'position'>]>): Decorated<Vec4f, [Builtin<'position'>, Invariant]>;
|
|
119
|
-
declare function isBuiltin(value: unknown): value is Decorated<AnyWgslData, AnyAttribute[]> | LooseDecorated<AnyLooseData, AnyAttribute[]>;
|
|
120
|
-
|
|
121
|
-
export { AnyAttribute, Decorate, HasCustomLocation, IsBuiltin, align, interpolate, invariant, isBuiltin, location, size };
|
|
117
|
+
export declare function invariant(data: Decorated<Vec4f, [Builtin<'position'>]>): Decorated<Vec4f, [Builtin<'position'>, Invariant]>;
|
|
118
|
+
export declare function isBuiltin(value: unknown): value is Decorated<AnyWgslData, AnyAttribute[]> | LooseDecorated<AnyLooseData, AnyAttribute[]>;
|
|
119
|
+
export declare function getAttributesString<T extends BaseData>(field: T): string;
|