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/data/snippet.js
CHANGED
|
@@ -1,99 +1,88 @@
|
|
|
1
|
+
import { undecorate } from "./dataTypes.js";
|
|
1
2
|
import { DEV } from "../shared/env.js";
|
|
2
3
|
import { isNumericSchema } from "./wgslTypes.js";
|
|
3
|
-
import { undecorate } from "./dataTypes.js";
|
|
4
|
-
|
|
5
|
-
//#region src/data/snippet.ts
|
|
6
4
|
/**
|
|
7
|
-
* What happens to a snippet's origin when it's deep copied in JS, and left as is in WGSL?
|
|
8
|
-
* e.g. `vec3f(vec3f(0, 1, 2))`
|
|
9
|
-
*/
|
|
10
|
-
function fallthroughCopyOrigin(origin) {
|
|
11
|
-
|
|
12
|
-
|
|
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 function fallthroughCopyOrigin(origin) {
|
|
9
|
+
if (origin === 'runtime' || // runtime values stay runtime
|
|
10
|
+
origin === 'constant' // constant values stay constant
|
|
11
|
+
) {
|
|
12
|
+
// The origin is kept as-is
|
|
13
|
+
return origin;
|
|
14
|
+
}
|
|
15
|
+
// All other origins become runtime
|
|
16
|
+
return 'runtime';
|
|
13
17
|
}
|
|
14
18
|
/**
|
|
15
|
-
* Whether a snippet aliases a value that lives outside the current expression.
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```ts
|
|
19
|
-
* function foo(a: number) {
|
|
20
|
-
* const color = d.vec3f(1, 2, 3);
|
|
21
|
-
* return color * a;
|
|
22
|
-
* }
|
|
23
|
-
*
|
|
24
|
-
* // References:
|
|
25
|
-
* // - color
|
|
26
|
-
* // - a
|
|
27
|
-
* //
|
|
28
|
-
* // Not references:
|
|
29
|
-
* // - d.vec3f(1, 2, 3)
|
|
30
|
-
* // - color * a
|
|
31
|
-
* ```
|
|
32
|
-
*/
|
|
33
|
-
function isAlias(snippet) {
|
|
34
|
-
|
|
19
|
+
* Whether a snippet aliases a value that lives outside the current expression.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* function foo(a: number) {
|
|
24
|
+
* const color = d.vec3f(1, 2, 3);
|
|
25
|
+
* return color * a;
|
|
26
|
+
* }
|
|
27
|
+
*
|
|
28
|
+
* // References:
|
|
29
|
+
* // - color
|
|
30
|
+
* // - a
|
|
31
|
+
* //
|
|
32
|
+
* // Not references:
|
|
33
|
+
* // - d.vec3f(1, 2, 3)
|
|
34
|
+
* // - color * a
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export function isAlias(snippet) {
|
|
38
|
+
return !(snippet.origin === 'runtime' || snippet.origin === 'constant');
|
|
35
39
|
}
|
|
36
|
-
const originToPtrParams = {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
mutable: {
|
|
46
|
-
space: "storage",
|
|
47
|
-
access: "read-write"
|
|
48
|
-
},
|
|
49
|
-
workgroup: {
|
|
50
|
-
space: "workgroup",
|
|
51
|
-
access: "read-write"
|
|
52
|
-
},
|
|
53
|
-
private: {
|
|
54
|
-
space: "private",
|
|
55
|
-
access: "read-write"
|
|
56
|
-
},
|
|
57
|
-
function: {
|
|
58
|
-
space: "function",
|
|
59
|
-
access: "read-write"
|
|
60
|
-
},
|
|
61
|
-
"local-def": {
|
|
62
|
-
space: "function",
|
|
63
|
-
access: "read-write"
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
var SnippetImpl = class {
|
|
67
|
-
value;
|
|
68
|
-
dataType;
|
|
69
|
-
origin;
|
|
70
|
-
possibleSideEffects;
|
|
71
|
-
constructor(value, dataType, origin, possibleSideEffects) {
|
|
72
|
-
this.value = value;
|
|
73
|
-
this.dataType = dataType;
|
|
74
|
-
this.origin = origin;
|
|
75
|
-
this.possibleSideEffects = possibleSideEffects;
|
|
76
|
-
}
|
|
40
|
+
export const originToPtrParams = {
|
|
41
|
+
uniform: { space: 'uniform', access: 'read' },
|
|
42
|
+
readonly: { space: 'storage', access: 'read' },
|
|
43
|
+
mutable: { space: 'storage', access: 'read-write' },
|
|
44
|
+
workgroup: { space: 'workgroup', access: 'read-write' },
|
|
45
|
+
private: { space: 'private', access: 'read-write' },
|
|
46
|
+
function: { space: 'function', access: 'read-write' },
|
|
47
|
+
// Local declarations are also in the `function` address space
|
|
48
|
+
'local-def': { space: 'function', access: 'read-write' },
|
|
77
49
|
};
|
|
78
|
-
|
|
79
|
-
|
|
50
|
+
class SnippetImpl {
|
|
51
|
+
value;
|
|
52
|
+
dataType;
|
|
53
|
+
origin;
|
|
54
|
+
possibleSideEffects;
|
|
55
|
+
constructor(value, dataType, origin, possibleSideEffects) {
|
|
56
|
+
this.value = value;
|
|
57
|
+
this.dataType = dataType;
|
|
58
|
+
this.origin = origin;
|
|
59
|
+
this.possibleSideEffects = possibleSideEffects;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export function isSnippet(value) {
|
|
63
|
+
return value instanceof SnippetImpl;
|
|
64
|
+
}
|
|
65
|
+
export function isSnippetNumeric(snippet) {
|
|
66
|
+
return isNumericSchema(snippet.dataType);
|
|
80
67
|
}
|
|
81
|
-
function
|
|
82
|
-
|
|
68
|
+
export function snip(value, dataType, origin, possibleSideEffects = true) {
|
|
69
|
+
if (DEV && isSnippet(value)) {
|
|
70
|
+
// An early error, but not worth checking every time in production
|
|
71
|
+
throw new Error('Cannot nest snippets');
|
|
72
|
+
}
|
|
73
|
+
return new SnippetImpl(value,
|
|
74
|
+
// We don't care about attributes in snippet land, so we discard that information.
|
|
75
|
+
undecorate(dataType), origin, possibleSideEffects);
|
|
83
76
|
}
|
|
84
|
-
function
|
|
85
|
-
|
|
86
|
-
return new SnippetImpl(value, undecorate(dataType), origin, possibleSideEffects);
|
|
77
|
+
export function withDataType(dataType, snippet) {
|
|
78
|
+
return new SnippetImpl(snippet.value, dataType, snippet.origin, snippet.possibleSideEffects);
|
|
87
79
|
}
|
|
88
|
-
function
|
|
89
|
-
|
|
80
|
+
export function withValue(value, snippet) {
|
|
81
|
+
return new SnippetImpl(value, snippet.dataType, snippet.origin, snippet.possibleSideEffects);
|
|
90
82
|
}
|
|
91
|
-
function withSideEffects(possibleSideEffects, snippet) {
|
|
92
|
-
|
|
83
|
+
export function withSideEffects(possibleSideEffects, snippet) {
|
|
84
|
+
return new SnippetImpl(snippet.value, snippet.dataType, snippet.origin, possibleSideEffects);
|
|
93
85
|
}
|
|
94
|
-
function noSideEffects(snippet) {
|
|
95
|
-
|
|
86
|
+
export function noSideEffects(snippet) {
|
|
87
|
+
return withSideEffects(/* possibleSideEffects */ false, snippet);
|
|
96
88
|
}
|
|
97
|
-
|
|
98
|
-
//#endregion
|
|
99
|
-
export { fallthroughCopyOrigin, isAlias, isSnippet, isSnippetNumeric, noSideEffects, originToPtrParams, snip, withDataType };
|
package/data/struct.d.ts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import { AnyWgslData, WgslStruct } from
|
|
2
|
-
|
|
3
|
-
//#region src/data/struct.d.ts
|
|
4
|
-
|
|
1
|
+
import type { AnyWgslData, BaseData, WgslStruct } from './wgslTypes.ts';
|
|
5
2
|
/**
|
|
6
3
|
* Creates a struct schema that can be used to construct GPU buffers.
|
|
7
4
|
* Ensures proper alignment and padding of properties (as opposed to a `d.unstruct` schema).
|
|
@@ -13,6 +10,6 @@ import { AnyWgslData, WgslStruct } from "./wgslTypes.js";
|
|
|
13
10
|
* @param props Record with `string` keys and `TgpuData` values,
|
|
14
11
|
* each entry describing one struct member.
|
|
15
12
|
*/
|
|
16
|
-
declare function struct<TProps extends Record<string, AnyWgslData>>(props: TProps): WgslStruct<TProps>;
|
|
17
|
-
|
|
18
|
-
export
|
|
13
|
+
export declare function struct<TProps extends Record<string, AnyWgslData>>(props: TProps): WgslStruct<TProps>;
|
|
14
|
+
export declare function abstruct<TProps extends Record<string, AnyWgslData>>(props: TProps): WgslStruct<TProps>;
|
|
15
|
+
export declare function INTERNAL_createStruct<TProps extends Record<string, BaseData>>(props: TProps, isAbstruct: boolean): WgslStruct<TProps>;
|
package/data/struct.js
CHANGED
|
@@ -1,47 +1,59 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { validateProp } from "../nameUtils.js";
|
|
2
2
|
import { getName, setName } from "../shared/meta.js";
|
|
3
|
+
import { $internal } from "../shared/symbols.js";
|
|
3
4
|
import { schemaCallWrapper } from "./schemaCallWrapper.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
// ----------
|
|
6
|
+
// Public API
|
|
7
|
+
// ----------
|
|
7
8
|
/**
|
|
8
|
-
* Creates a struct schema that can be used to construct GPU buffers.
|
|
9
|
-
* Ensures proper alignment and padding of properties (as opposed to a `d.unstruct` schema).
|
|
10
|
-
* The order of members matches the passed in properties object.
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* const CircleStruct = d.struct({ radius: d.f32, pos: d.vec3f });
|
|
14
|
-
*
|
|
15
|
-
* @param props Record with `string` keys and `TgpuData` values,
|
|
16
|
-
* each entry describing one struct member.
|
|
17
|
-
*/
|
|
18
|
-
function struct(props) {
|
|
19
|
-
|
|
9
|
+
* Creates a struct schema that can be used to construct GPU buffers.
|
|
10
|
+
* Ensures proper alignment and padding of properties (as opposed to a `d.unstruct` schema).
|
|
11
|
+
* The order of members matches the passed in properties object.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* const CircleStruct = d.struct({ radius: d.f32, pos: d.vec3f });
|
|
15
|
+
*
|
|
16
|
+
* @param props Record with `string` keys and `TgpuData` values,
|
|
17
|
+
* each entry describing one struct member.
|
|
18
|
+
*/
|
|
19
|
+
export function struct(props) {
|
|
20
|
+
return INTERNAL_createStruct(props, false);
|
|
20
21
|
}
|
|
21
|
-
function abstruct(props) {
|
|
22
|
-
|
|
22
|
+
export function abstruct(props) {
|
|
23
|
+
return INTERNAL_createStruct(props, true);
|
|
23
24
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
25
|
+
// --------------
|
|
26
|
+
// Implementation
|
|
27
|
+
// --------------
|
|
28
|
+
export function INTERNAL_createStruct(props, isAbstruct) {
|
|
29
|
+
Object.keys(props).forEach((key) => {
|
|
30
|
+
const result = validateProp(key);
|
|
31
|
+
if (!result.success) {
|
|
32
|
+
throw new Error(`Invalid property key '${key}'${result.error ? `: ${result.error}` : ''}`);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
// In the schema call, create and return a deep copy
|
|
36
|
+
// by wrapping all the values in corresponding schema calls.
|
|
37
|
+
const structSchema = (instanceProps) => Object.fromEntries(Object.entries(props).map(([key, schema]) => [
|
|
38
|
+
key,
|
|
39
|
+
schemaCallWrapper(schema, instanceProps?.[key]),
|
|
40
|
+
]));
|
|
41
|
+
Object.setPrototypeOf(structSchema, WgslStructImpl);
|
|
42
|
+
structSchema.propTypes = props;
|
|
43
|
+
Object.defineProperty(structSchema, $internal, {
|
|
44
|
+
value: {
|
|
45
|
+
isAbstruct,
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
return structSchema;
|
|
34
49
|
}
|
|
35
50
|
const WgslStructImpl = {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
51
|
+
type: 'struct',
|
|
52
|
+
$name(label) {
|
|
53
|
+
setName(this, label);
|
|
54
|
+
return this;
|
|
55
|
+
},
|
|
56
|
+
toString() {
|
|
57
|
+
return `struct:${getName(this) ?? '<unnamed>'}`;
|
|
58
|
+
},
|
|
44
59
|
};
|
|
45
|
-
|
|
46
|
-
//#endregion
|
|
47
|
-
export { INTERNAL_createStruct, abstruct, struct };
|