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
|
@@ -1,205 +1,207 @@
|
|
|
1
|
-
|
|
1
|
+
import { blankSpaces, lineBreaks } from "../whitespaces.js";
|
|
2
2
|
/**
|
|
3
|
-
* Extracts info about arguments of a given WGSL function string.
|
|
4
|
-
* @example
|
|
5
|
-
* const code = `
|
|
6
|
-
* fn add(a: i32, @location(0) b: i32, c) -> i32 {
|
|
7
|
-
* return a + b + c;
|
|
8
|
-
* }`;
|
|
9
|
-
*
|
|
10
|
-
* extractArgs(code);
|
|
11
|
-
* // {
|
|
12
|
-
* // args: [
|
|
13
|
-
* // { identifier: 'a', attributes: [], type: 'i32' },
|
|
14
|
-
* // { identifier: 'b', attributes: ['@location(0)'], type: 'i32' },
|
|
15
|
-
* // { identifier: 'c', attributes: [], type: undefined }
|
|
16
|
-
* // ],
|
|
17
|
-
* // ret: { type: 'i32', attributes: [] },
|
|
18
|
-
* // range: { begin: 11, end: 51 }
|
|
19
|
-
* // }
|
|
20
|
-
*/
|
|
21
|
-
function extractArgs(rawCode) {
|
|
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
|
-
end: range[1]
|
|
69
|
-
}
|
|
70
|
-
};
|
|
3
|
+
* Extracts info about arguments of a given WGSL function string.
|
|
4
|
+
* @example
|
|
5
|
+
* const code = `
|
|
6
|
+
* fn add(a: i32, @location(0) b: i32, c) -> i32 {
|
|
7
|
+
* return a + b + c;
|
|
8
|
+
* }`;
|
|
9
|
+
*
|
|
10
|
+
* extractArgs(code);
|
|
11
|
+
* // {
|
|
12
|
+
* // args: [
|
|
13
|
+
* // { identifier: 'a', attributes: [], type: 'i32' },
|
|
14
|
+
* // { identifier: 'b', attributes: ['@location(0)'], type: 'i32' },
|
|
15
|
+
* // { identifier: 'c', attributes: [], type: undefined }
|
|
16
|
+
* // ],
|
|
17
|
+
* // ret: { type: 'i32', attributes: [] },
|
|
18
|
+
* // range: { begin: 11, end: 51 }
|
|
19
|
+
* // }
|
|
20
|
+
*/
|
|
21
|
+
export function extractArgs(rawCode) {
|
|
22
|
+
const { strippedCode, argRange: range } = strip(rawCode);
|
|
23
|
+
const code = new ParsableString(strippedCode);
|
|
24
|
+
code.consume('(');
|
|
25
|
+
const args = [];
|
|
26
|
+
while (!code.isAt(')')) {
|
|
27
|
+
// In each loop iteration, process all the attributes, the identifier and the potential type of a single argument.
|
|
28
|
+
const attributes = [];
|
|
29
|
+
while (code.isAt('@')) {
|
|
30
|
+
code.parseUntil(closingParenthesis, parentheses);
|
|
31
|
+
code.consume(')');
|
|
32
|
+
attributes.push(code.lastParsed);
|
|
33
|
+
}
|
|
34
|
+
code.parseUntil(identifierEndSymbols);
|
|
35
|
+
const identifier = code.lastParsed;
|
|
36
|
+
let maybeType;
|
|
37
|
+
if (code.isAt(':')) {
|
|
38
|
+
code.consume(':');
|
|
39
|
+
code.parseUntil(typeEndSymbols, angleBrackets);
|
|
40
|
+
maybeType = code.lastParsed;
|
|
41
|
+
}
|
|
42
|
+
args.push({
|
|
43
|
+
identifier,
|
|
44
|
+
attributes,
|
|
45
|
+
type: maybeType,
|
|
46
|
+
});
|
|
47
|
+
if (code.isAt(',')) {
|
|
48
|
+
code.consume(',');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
code.consume(')');
|
|
52
|
+
let maybeRet;
|
|
53
|
+
if (code.isAt('->')) {
|
|
54
|
+
code.consume('->');
|
|
55
|
+
const attributes = [];
|
|
56
|
+
while (code.isAt('@')) {
|
|
57
|
+
code.parseUntil(closingParenthesis, parentheses);
|
|
58
|
+
code.consume(')');
|
|
59
|
+
attributes.push(code.lastParsed);
|
|
60
|
+
}
|
|
61
|
+
maybeRet = { type: code.str.slice(code.pos), attributes };
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
args,
|
|
65
|
+
ret: maybeRet,
|
|
66
|
+
range: { begin: range[0], end: range[1] },
|
|
67
|
+
};
|
|
71
68
|
}
|
|
72
69
|
/**
|
|
73
|
-
* Strips comments, whitespaces, the name and the body of the function.
|
|
74
|
-
* @example
|
|
75
|
-
* const code = `
|
|
76
|
-
* fn add( a, // first argument
|
|
77
|
-
* @location(0) b : i32 ) -> i32 {
|
|
78
|
-
* return a + b; // returns the sum
|
|
79
|
-
* }`;
|
|
80
|
-
*
|
|
81
|
-
* strip(code); // "(a,@location(0)b:i32)->i32"
|
|
82
|
-
*/
|
|
70
|
+
* Strips comments, whitespaces, the name and the body of the function.
|
|
71
|
+
* @example
|
|
72
|
+
* const code = `
|
|
73
|
+
* fn add( a, // first argument
|
|
74
|
+
* @location(0) b : i32 ) -> i32 {
|
|
75
|
+
* return a + b; // returns the sum
|
|
76
|
+
* }`;
|
|
77
|
+
*
|
|
78
|
+
* strip(code); // "(a,@location(0)b:i32)->i32"
|
|
79
|
+
*/
|
|
83
80
|
function strip(rawCode) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
81
|
+
const code = new ParsableString(rawCode);
|
|
82
|
+
let strippedCode = '';
|
|
83
|
+
let argsStart;
|
|
84
|
+
while (!code.isFinished()) {
|
|
85
|
+
// parse character by character while ignoring comments and blankspaces until you find a `{`.
|
|
86
|
+
// skip any blankspace
|
|
87
|
+
if (code.isAt(blankSpaces)) {
|
|
88
|
+
code.advanceBy(1); // the blankspace character
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
// skip line comments
|
|
92
|
+
if (code.isAt('//')) {
|
|
93
|
+
code.consume('//');
|
|
94
|
+
code.parseUntil(lineBreaks);
|
|
95
|
+
code.advanceBy(1); // the line break
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
// skip block comments
|
|
99
|
+
if (code.isAt('/*')) {
|
|
100
|
+
code.parseUntil(openingCommentBlock, commentBlocks);
|
|
101
|
+
code.consume('*/');
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
if (code.isAt('{')) {
|
|
105
|
+
return {
|
|
106
|
+
strippedCode,
|
|
107
|
+
argRange: [argsStart, code.pos],
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
if (code.isAt('(') && argsStart === undefined) {
|
|
111
|
+
argsStart = code.pos;
|
|
112
|
+
}
|
|
113
|
+
if (argsStart !== undefined) {
|
|
114
|
+
strippedCode += code.str[code.pos];
|
|
115
|
+
}
|
|
116
|
+
code.advanceBy(1); // parsed character
|
|
117
|
+
}
|
|
118
|
+
throw new Error('Invalid wgsl code!');
|
|
112
119
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
]);
|
|
198
|
-
const
|
|
199
|
-
const
|
|
200
|
-
const
|
|
201
|
-
const angleBrackets = ["<", ">"];
|
|
202
|
-
const commentBlocks = ["/*", "*/"];
|
|
203
|
-
|
|
204
|
-
//#endregion
|
|
205
|
-
export { extractArgs };
|
|
120
|
+
class ParsableString {
|
|
121
|
+
str;
|
|
122
|
+
#parseStartPos;
|
|
123
|
+
#pos;
|
|
124
|
+
constructor(str) {
|
|
125
|
+
this.str = str;
|
|
126
|
+
this.#pos = 0;
|
|
127
|
+
}
|
|
128
|
+
get pos() {
|
|
129
|
+
return this.#pos;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* This property is equivalent to the substring of `this.str`
|
|
133
|
+
* from the position of the last `parseUntil` call, to the current position.
|
|
134
|
+
*/
|
|
135
|
+
get lastParsed() {
|
|
136
|
+
if (this.#parseStartPos === undefined) {
|
|
137
|
+
throw new Error('Parse was not called yet!');
|
|
138
|
+
}
|
|
139
|
+
return this.str.slice(this.#parseStartPos, this.pos);
|
|
140
|
+
}
|
|
141
|
+
isFinished() {
|
|
142
|
+
return this.#pos >= this.str.length;
|
|
143
|
+
}
|
|
144
|
+
isAt(substr) {
|
|
145
|
+
if (typeof substr === 'string') {
|
|
146
|
+
for (let i = 0; i < substr.length; i++) {
|
|
147
|
+
if (this.str[this.#pos + i] !== substr[i]) {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
for (const elem of substr) {
|
|
154
|
+
if (this.isAt(elem)) {
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* @param toFind a set of strings either of which satisfy the search.
|
|
162
|
+
* @param brackets a pair of brackets that has to be closed for result to be valid. This includes the found character(s).
|
|
163
|
+
* @example
|
|
164
|
+
* // internal state:
|
|
165
|
+
* // '(@attribute(0) identifier: type)'
|
|
166
|
+
* // ^
|
|
167
|
+
* this.parse(new Set(')'), ['(', ')']);
|
|
168
|
+
* // internal state:
|
|
169
|
+
* // '(@attribute(0) identifier: type)'
|
|
170
|
+
* // ^
|
|
171
|
+
*/
|
|
172
|
+
parseUntil(toFind, brackets) {
|
|
173
|
+
this.#parseStartPos = this.#pos;
|
|
174
|
+
let openedBrackets = 0;
|
|
175
|
+
while (this.#pos < this.str.length) {
|
|
176
|
+
if (brackets && this.isAt(brackets[0])) {
|
|
177
|
+
openedBrackets += 1;
|
|
178
|
+
}
|
|
179
|
+
if (brackets && this.isAt(brackets[1])) {
|
|
180
|
+
openedBrackets -= 1;
|
|
181
|
+
}
|
|
182
|
+
if (openedBrackets === 0) {
|
|
183
|
+
if (this.isAt(toFind)) {
|
|
184
|
+
return this.#pos;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
this.#pos += 1;
|
|
188
|
+
}
|
|
189
|
+
throw new Error('Reached the end of the string without finding a match!');
|
|
190
|
+
}
|
|
191
|
+
advanceBy(steps) {
|
|
192
|
+
this.#pos += steps;
|
|
193
|
+
}
|
|
194
|
+
consume(str) {
|
|
195
|
+
if (!this.isAt(str)) {
|
|
196
|
+
throw new Error(`Expected '${str}' at position ${this.#pos}, but found '${this.str.slice(this.#pos, this.#pos + str.length)}'`);
|
|
197
|
+
}
|
|
198
|
+
this.advanceBy(str.length);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
const closingParenthesis = new Set([')']);
|
|
202
|
+
const identifierEndSymbols = new Set([':', ',', ')']);
|
|
203
|
+
const typeEndSymbols = new Set([',', ')']);
|
|
204
|
+
const openingCommentBlock = new Set(['*/']);
|
|
205
|
+
const parentheses = ['(', ')'];
|
|
206
|
+
const angleBrackets = ['<', '>'];
|
|
207
|
+
const commentBlocks = ['/*', '*/'];
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type ResolvedSnippet } from '../../data/snippet.ts';
|
|
2
|
+
import { type BaseData } from '../../data/wgslTypes.ts';
|
|
3
|
+
import type { ResolutionCtx, ShaderStage } from '../../types.ts';
|
|
4
|
+
import { type ExternalMap } from '../resolve/externals.ts';
|
|
5
|
+
import type { Implementation, SeparatedEntryArgs } from './fnTypes.ts';
|
|
6
|
+
export type FnExternals = {
|
|
7
|
+
/**
|
|
8
|
+
* Externals provided by calling `$uses()`.
|
|
9
|
+
*/
|
|
10
|
+
userProvided?: ExternalMap;
|
|
11
|
+
/**
|
|
12
|
+
* Externals provided by unplugin-typegpu via function metadata.
|
|
13
|
+
*/
|
|
14
|
+
pluginProvided?: ExternalMap;
|
|
15
|
+
/**
|
|
16
|
+
* Function arguments, for example `{ S: Schema }` in `tgpu.fn([Schema])('(arg: S) => {}')`,
|
|
17
|
+
* or { in: { position: 'position' } } in `fragmentFn({ in: { position: d.builtin.position }, out: d.vec4f, })('...')`
|
|
18
|
+
*/
|
|
19
|
+
args?: ExternalMap;
|
|
20
|
+
/**
|
|
21
|
+
* Function return type, for example `{ Out: ... }` in both rawWgsl entrypoint functions and `vertexFnShell(in, Out)`.
|
|
22
|
+
*/
|
|
23
|
+
out?: ExternalMap;
|
|
24
|
+
};
|
|
25
|
+
export interface FnCore {
|
|
26
|
+
setExternals: (key: keyof FnExternals, newExternal: ExternalMap) => void;
|
|
27
|
+
resolve(ctx: ResolutionCtx,
|
|
28
|
+
/**
|
|
29
|
+
* The argument types can be AutoStruct if they're determined based on usage
|
|
30
|
+
* (like in auto-entry functions).
|
|
31
|
+
*/
|
|
32
|
+
argTypes: BaseData[],
|
|
33
|
+
/**
|
|
34
|
+
* The return type of the function. If undefined, the type should be inferred
|
|
35
|
+
* from the implementation (relevant for shellless functions).
|
|
36
|
+
*/
|
|
37
|
+
returnType: BaseData | undefined,
|
|
38
|
+
/**
|
|
39
|
+
* For entry functions: positional args and optional data struct.
|
|
40
|
+
* When provided, takes precedence over `argTypes` for WGSL header generation.
|
|
41
|
+
*/
|
|
42
|
+
entryInput?: SeparatedEntryArgs): ResolvedSnippet;
|
|
43
|
+
}
|
|
44
|
+
export declare function createFnCore(implementation: Implementation, functionType: 'normal' | ShaderStage, workgroupSize?: number[]): FnCore;
|