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,70 +1,81 @@
|
|
|
1
|
-
import { $gpuValueOf, $internal, $ownSnippet, $resolve } from "../../shared/symbols.js";
|
|
2
|
-
import { getName, setName } from "../../shared/meta.js";
|
|
3
1
|
import { isData } from "../../data/dataTypes.js";
|
|
4
2
|
import { snip } from "../../data/snippet.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
3
|
+
import {} from "../../data/wgslTypes.js";
|
|
4
|
+
import { makeDereferenceable } from "../../tgsl/makeDereferenceable.js";
|
|
5
|
+
import { makeResolvable } from "../../tgsl/makeResolvable.js";
|
|
6
|
+
import { getName, setName } from "../../shared/meta.js";
|
|
7
|
+
import { $gpuValueOf, $internal, $soul } from "../../shared/symbols.js";
|
|
8
|
+
export function constant(dataType, value) {
|
|
9
|
+
if (!isData(dataType)) {
|
|
10
|
+
if (!Array.isArray(value)) {
|
|
11
|
+
throw new Error(`Expected an array value for a partially-applied array schema, but received: ${typeof value}.`);
|
|
12
|
+
}
|
|
13
|
+
return new TgpuConstImpl(dataType(value.length), value);
|
|
14
|
+
}
|
|
15
|
+
return new TgpuConstImpl(dataType, value);
|
|
15
16
|
}
|
|
17
|
+
// --------------
|
|
18
|
+
// Implementation
|
|
19
|
+
// --------------
|
|
16
20
|
function deepFreeze(object) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
// Retrieve the property names defined on object
|
|
22
|
+
const propNames = Reflect.ownKeys(object);
|
|
23
|
+
// Freeze properties before freezing self
|
|
24
|
+
for (const name of propNames) {
|
|
25
|
+
// oxlint-disable-next-line typescript/no-explicit-any -- chill TypeScript
|
|
26
|
+
const value = object[name];
|
|
27
|
+
if ((value && typeof value === 'object') || typeof value === 'function') {
|
|
28
|
+
deepFreeze(value);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return Object.freeze(object);
|
|
32
|
+
}
|
|
33
|
+
class TgpuConstImpl {
|
|
34
|
+
[$soul];
|
|
35
|
+
static {
|
|
36
|
+
TgpuConstImpl.prototype[$internal] = {};
|
|
37
|
+
TgpuConstImpl.prototype.resourceType = 'const';
|
|
38
|
+
makeDereferenceable(makeResolvable(TgpuConstImpl.prototype, {
|
|
39
|
+
asString() {
|
|
40
|
+
return `const:${getName(this) ?? '<unnamed>'}`;
|
|
41
|
+
},
|
|
42
|
+
resolve(ctx) {
|
|
43
|
+
const id = ctx.makeUniqueIdentifier(getName(this), 'global');
|
|
44
|
+
return ctx.gen.declareGlobalConst({
|
|
45
|
+
id,
|
|
46
|
+
dataType: this.dataType,
|
|
47
|
+
init: snip(this[$soul].value, this.dataType, 'constant'),
|
|
48
|
+
});
|
|
49
|
+
},
|
|
50
|
+
}), {
|
|
51
|
+
codegenMode: {
|
|
52
|
+
getBaseSnippet(trackingProxy) {
|
|
53
|
+
return snip(trackingProxy, this.dataType, 'constant-immutable-def',
|
|
54
|
+
/* possibleSideEffects */ false);
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
normalMode: {
|
|
58
|
+
get() {
|
|
59
|
+
return this[$soul].value;
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
constructor(dataType, value) {
|
|
65
|
+
this[$soul] = {
|
|
66
|
+
type: 'const',
|
|
67
|
+
dataType,
|
|
68
|
+
value: value && typeof value === 'object'
|
|
69
|
+
? deepFreeze(value)
|
|
70
|
+
: value,
|
|
71
|
+
label: undefined,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
get dataType() {
|
|
75
|
+
return this[$soul].dataType;
|
|
76
|
+
}
|
|
77
|
+
$name(label) {
|
|
78
|
+
setName(this, label);
|
|
79
|
+
return this;
|
|
80
|
+
}
|
|
23
81
|
}
|
|
24
|
-
var TgpuConstImpl = class {
|
|
25
|
-
[$internal] = {};
|
|
26
|
-
resourceType;
|
|
27
|
-
dataType;
|
|
28
|
-
#value;
|
|
29
|
-
constructor(dataType, value) {
|
|
30
|
-
this.resourceType = "const";
|
|
31
|
-
this.dataType = dataType;
|
|
32
|
-
this.#value = value && typeof value === "object" ? deepFreeze(value) : value;
|
|
33
|
-
}
|
|
34
|
-
$name(label) {
|
|
35
|
-
setName(this, label);
|
|
36
|
-
return this;
|
|
37
|
-
}
|
|
38
|
-
[$resolve](ctx) {
|
|
39
|
-
const id = ctx.makeUniqueIdentifier(getName(this), "global");
|
|
40
|
-
return ctx.gen.declareGlobalConst({
|
|
41
|
-
id,
|
|
42
|
-
dataType: this.dataType,
|
|
43
|
-
init: snip(this.#value, this.dataType, "constant")
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
toString() {
|
|
47
|
-
return `const:${getName(this) ?? "<unnamed>"}`;
|
|
48
|
-
}
|
|
49
|
-
get [$gpuValueOf]() {
|
|
50
|
-
const dataType = this.dataType;
|
|
51
|
-
return new Proxy({
|
|
52
|
-
[$internal]: true,
|
|
53
|
-
get [$ownSnippet]() {
|
|
54
|
-
return snip(this, dataType, "constant-immutable-def");
|
|
55
|
-
},
|
|
56
|
-
[$resolve]: (ctx) => ctx.resolve(this),
|
|
57
|
-
toString: () => `const:${getName(this) ?? "<unnamed>"}.$`
|
|
58
|
-
}, valueProxyHandler);
|
|
59
|
-
}
|
|
60
|
-
get $() {
|
|
61
|
-
if (inCodegenMode()) return this[$gpuValueOf];
|
|
62
|
-
return this.#value;
|
|
63
|
-
}
|
|
64
|
-
get value() {
|
|
65
|
-
return this.$;
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
//#endregion
|
|
70
|
-
export { constant };
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
//#region src/core/declare/tgpuDeclare.d.ts
|
|
2
1
|
/**
|
|
3
2
|
* Extra declaration that shall be included in final WGSL code,
|
|
4
3
|
* when resolving objects that use it.
|
|
5
4
|
*/
|
|
6
|
-
interface TgpuDeclare {
|
|
7
|
-
|
|
5
|
+
export interface TgpuDeclare {
|
|
6
|
+
$uses(dependencyMap: Record<string, unknown>): this;
|
|
8
7
|
}
|
|
9
8
|
/**
|
|
10
9
|
* Allows defining extra declarations that shall be included in the final WGSL code,
|
|
@@ -13,6 +12,4 @@ interface TgpuDeclare {
|
|
|
13
12
|
* Using this API is generally discouraged, as it shouldn't be necessary in any common scenario.
|
|
14
13
|
* It was developed to ensure full compatibility of TypeGPU programs with current and future versions of WGSL.
|
|
15
14
|
*/
|
|
16
|
-
declare function declare(declaration: string): TgpuDeclare;
|
|
17
|
-
//#endregion
|
|
18
|
-
export { TgpuDeclare, declare };
|
|
15
|
+
export declare function declare(declaration: string): TgpuDeclare;
|
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
import { $internal, $resolve } from "../../shared/symbols.js";
|
|
2
|
-
import { Void } from "../../data/wgslTypes.js";
|
|
3
1
|
import { snip } from "../../data/snippet.js";
|
|
2
|
+
import { Void } from "../../data/wgslTypes.js";
|
|
3
|
+
import { $internal, $resolve } from "../../shared/symbols.js";
|
|
4
4
|
import { replaceExternalsInWgsl } from "../resolve/externals.js";
|
|
5
|
-
|
|
6
|
-
//#region src/core/declare/tgpuDeclare.ts
|
|
7
5
|
/**
|
|
8
|
-
* Allows defining extra declarations that shall be included in the final WGSL code,
|
|
9
|
-
* when resolving objects that use them.
|
|
10
|
-
*
|
|
11
|
-
* Using this API is generally discouraged, as it shouldn't be necessary in any common scenario.
|
|
12
|
-
* It was developed to ensure full compatibility of TypeGPU programs with current and future versions of WGSL.
|
|
13
|
-
*/
|
|
14
|
-
function declare(declaration) {
|
|
15
|
-
|
|
6
|
+
* Allows defining extra declarations that shall be included in the final WGSL code,
|
|
7
|
+
* when resolving objects that use them.
|
|
8
|
+
*
|
|
9
|
+
* Using this API is generally discouraged, as it shouldn't be necessary in any common scenario.
|
|
10
|
+
* It was developed to ensure full compatibility of TypeGPU programs with current and future versions of WGSL.
|
|
11
|
+
*/
|
|
12
|
+
export function declare(declaration) {
|
|
13
|
+
return new TgpuDeclareImpl(declaration);
|
|
14
|
+
}
|
|
15
|
+
// --------------
|
|
16
|
+
// Implementation
|
|
17
|
+
// --------------
|
|
18
|
+
class TgpuDeclareImpl {
|
|
19
|
+
[$internal] = true;
|
|
20
|
+
#externals;
|
|
21
|
+
#declaration;
|
|
22
|
+
constructor(declaration) {
|
|
23
|
+
this.#declaration = declaration;
|
|
24
|
+
}
|
|
25
|
+
$uses(dependencyMap) {
|
|
26
|
+
if (this.#externals !== undefined) {
|
|
27
|
+
throw new Error("Cannot call '$uses' multiple times. If you wish to override dependencies, use slots or accessors instead.");
|
|
28
|
+
}
|
|
29
|
+
this.#externals = dependencyMap;
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
[$resolve](ctx) {
|
|
33
|
+
const replacedDeclaration = replaceExternalsInWgsl(ctx, this.#externals ?? {}, this.#declaration);
|
|
34
|
+
ctx.addDeclaration(replacedDeclaration);
|
|
35
|
+
return snip('', Void, /* origin */ 'constant');
|
|
36
|
+
}
|
|
37
|
+
toString() {
|
|
38
|
+
return `declare: ${this.#declaration}`;
|
|
39
|
+
}
|
|
16
40
|
}
|
|
17
|
-
var TgpuDeclareImpl = class {
|
|
18
|
-
[$internal] = true;
|
|
19
|
-
#externals;
|
|
20
|
-
#declaration;
|
|
21
|
-
constructor(declaration) {
|
|
22
|
-
this.#declaration = declaration;
|
|
23
|
-
}
|
|
24
|
-
$uses(dependencyMap) {
|
|
25
|
-
if (this.#externals !== void 0) throw new Error("Cannot call '$uses' multiple times. If you wish to override dependencies, use slots or accessors instead.");
|
|
26
|
-
this.#externals = dependencyMap;
|
|
27
|
-
return this;
|
|
28
|
-
}
|
|
29
|
-
[$resolve](ctx) {
|
|
30
|
-
const replacedDeclaration = replaceExternalsInWgsl(ctx, this.#externals ?? {}, this.#declaration);
|
|
31
|
-
ctx.addDeclaration(replacedDeclaration);
|
|
32
|
-
return snip("", Void, "constant");
|
|
33
|
-
}
|
|
34
|
-
toString() {
|
|
35
|
-
return `declare: ${this.#declaration}`;
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
//#endregion
|
|
40
|
-
export { declare };
|
|
@@ -1,41 +1,69 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
type AnyAutoCustoms = Record<string, InferGPU<BaseIOData>>;
|
|
1
|
+
import { type OmitBuiltins } from '../../builtin.ts';
|
|
2
|
+
import { AutoStruct } from '../../data/autoStruct.ts';
|
|
3
|
+
import type { ResolvedSnippet } from '../../data/snippet.ts';
|
|
4
|
+
import type { FormatToWGSLType } from '../../data/vertexFormatData.ts';
|
|
5
|
+
import type { BaseData, v4f } from '../../data/wgslTypes.ts';
|
|
6
|
+
import type { InferGPU, InferGPURecord, InferRecord } from '../../shared/repr.ts';
|
|
7
|
+
import { $internal, $resolve } from '../../shared/symbols.ts';
|
|
8
|
+
import type { Assume, RemoveIndexSignature } from '../../shared/utilityTypes.ts';
|
|
9
|
+
import type { TgpuVertexAttrib } from '../../shared/vertexFormat.ts';
|
|
10
|
+
import type { ResolutionCtx, SelfResolvable } from '../../types.ts';
|
|
11
|
+
import type { BaseIOData } from './fnTypes.ts';
|
|
12
|
+
export type AnyAutoCustoms = Record<string, InferGPU<BaseIOData>>;
|
|
14
13
|
declare const builtinVertexIn: {
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
readonly $vertexIndex: import("../../builtin.ts").BuiltinVertexIndex;
|
|
15
|
+
readonly $instanceIndex: import("../../builtin.ts").BuiltinInstanceIndex;
|
|
17
16
|
};
|
|
18
|
-
type AutoVertexIn<T extends AnyAutoCustoms> = RemoveIndexSignature<T> & InferRecord<typeof builtinVertexIn>;
|
|
19
|
-
type _AutoVertexIn<T> = AutoVertexIn<{
|
|
17
|
+
export type AutoVertexIn<T extends AnyAutoCustoms> = RemoveIndexSignature<T> & InferRecord<typeof builtinVertexIn>;
|
|
18
|
+
export type _AutoVertexIn<T> = AutoVertexIn<{
|
|
19
|
+
[Key in keyof T]: T[Key] extends TgpuVertexAttrib ? InferGPU<FormatToWGSLType<T[Key]['format']>> : Assume<T[Key], InferGPU<BaseIOData>>;
|
|
20
|
+
}>;
|
|
20
21
|
declare const builtinVertexOut: {
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
readonly $clipDistances: import("../../builtin.ts").BuiltinClipDistances;
|
|
23
|
+
readonly $position: import("../../builtin.ts").BuiltinPosition;
|
|
23
24
|
};
|
|
24
|
-
type AutoVertexOut<T extends AnyAutoCustoms> = OmitBuiltins<T> & Partial<InferGPURecord<typeof builtinVertexOut>>;
|
|
25
|
+
export type AutoVertexOut<T extends AnyAutoCustoms> = OmitBuiltins<T> & Partial<InferGPURecord<typeof builtinVertexOut>>;
|
|
25
26
|
declare const builtinFragmentIn: {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
readonly $position: import("../../builtin.ts").BuiltinPosition;
|
|
28
|
+
readonly $frontFacing: import("../../builtin.ts").BuiltinFrontFacing;
|
|
29
|
+
readonly $primitiveIndex: import("../../builtin.ts").BuiltinPrimitiveIndex;
|
|
30
|
+
readonly $sampleIndex: import("../../builtin.ts").BuiltinSampleIndex;
|
|
31
|
+
readonly $sampleMask: import("../../builtin.ts").BuiltinSampleMask;
|
|
32
|
+
readonly $subgroupInvocationId: import("../../builtin.ts").BuiltinSubgroupInvocationId;
|
|
33
|
+
readonly $subgroupSize: import("../../builtin.ts").BuiltinSubgroupSize;
|
|
33
34
|
};
|
|
34
|
-
type AutoFragmentIn<T extends AnyAutoCustoms> = RemoveIndexSignature<T> & InferRecord<typeof builtinFragmentIn>;
|
|
35
|
+
export type AutoFragmentIn<T extends AnyAutoCustoms> = RemoveIndexSignature<T> & InferRecord<typeof builtinFragmentIn>;
|
|
35
36
|
declare const builtinFragmentOut: {
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
readonly $fragDepth: import("../../builtin.ts").BuiltinFragDepth;
|
|
38
|
+
readonly $sampleMask: import("../../builtin.ts").BuiltinSampleMask;
|
|
38
39
|
};
|
|
39
|
-
type AutoFragmentOut<T extends undefined | v4f | AnyAutoCustoms> = T extends undefined | v4f ? T : T & Partial<InferGPURecord<typeof builtinFragmentOut>>;
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
export type AutoFragmentOut<T extends undefined | v4f | AnyAutoCustoms> = T extends undefined | v4f ? T : T & Partial<InferGPURecord<typeof builtinFragmentOut>>;
|
|
41
|
+
type AutoFragmentFnImpl = (input: AutoFragmentIn<Record<string, never>>) => AutoFragmentOut<undefined | v4f | AnyAutoCustoms>;
|
|
42
|
+
/**
|
|
43
|
+
* Only used internally. Meant to be recreated on every resolution.
|
|
44
|
+
*/
|
|
45
|
+
export declare class AutoFragmentFn implements SelfResolvable {
|
|
46
|
+
#private;
|
|
47
|
+
[$internal]: true;
|
|
48
|
+
resourceType: 'auto-fragment-fn';
|
|
49
|
+
autoIn: AutoStruct;
|
|
50
|
+
autoOut: AutoStruct;
|
|
51
|
+
constructor(impl: AutoFragmentFnImpl, varyings: Record<string, BaseData>, locations?: Record<string, number>);
|
|
52
|
+
toString(): string;
|
|
53
|
+
[$resolve](ctx: ResolutionCtx): ResolvedSnippet;
|
|
54
|
+
}
|
|
55
|
+
type AutoVertexFnImpl = (input: AutoVertexIn<Record<string, never>>) => AutoVertexOut<AnyAutoCustoms>;
|
|
56
|
+
/**
|
|
57
|
+
* Only used internally. Meant to be recreated on every resolution.
|
|
58
|
+
*/
|
|
59
|
+
export declare class AutoVertexFn implements SelfResolvable {
|
|
60
|
+
#private;
|
|
61
|
+
[$internal]: true;
|
|
62
|
+
resourceType: 'auto-vertex-fn';
|
|
63
|
+
autoIn: AutoStruct;
|
|
64
|
+
autoOut: AutoStruct;
|
|
65
|
+
constructor(impl: AutoVertexFnImpl, attribs: Record<string, BaseData>, locations?: Record<string, number>);
|
|
66
|
+
toString(): string;
|
|
67
|
+
[$resolve](ctx: ResolutionCtx): ResolvedSnippet;
|
|
68
|
+
}
|
|
69
|
+
export {};
|
package/core/function/autoIO.js
CHANGED
|
@@ -1,87 +1,82 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { getName, setName } from "../../shared/meta.js";
|
|
3
|
-
import { vec4f } from "../../data/vector.js";
|
|
1
|
+
import { builtin } from "../../builtin.js";
|
|
4
2
|
import { AutoStruct } from "../../data/autoStruct.js";
|
|
5
|
-
import {
|
|
3
|
+
import { vec4f } from "../../data/vector.js";
|
|
4
|
+
import { getName, setName } from "../../shared/meta.js";
|
|
5
|
+
import { $internal, $resolve } from "../../shared/symbols.js";
|
|
6
6
|
import { shaderStageSlot } from "../slot/internalSlots.js";
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
//#region src/core/function/autoIO.ts
|
|
7
|
+
import { createFnCore } from "./fnCore.js";
|
|
10
8
|
const builtinVertexIn = {
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
$vertexIndex: builtin.vertexIndex,
|
|
10
|
+
$instanceIndex: builtin.instanceIndex,
|
|
13
11
|
};
|
|
14
12
|
const builtinVertexOut = {
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
$clipDistances: builtin.clipDistances,
|
|
14
|
+
$position: builtin.position,
|
|
17
15
|
};
|
|
18
16
|
const builtinFragmentIn = {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
17
|
+
$position: builtin.position,
|
|
18
|
+
$frontFacing: builtin.frontFacing,
|
|
19
|
+
$primitiveIndex: builtin.primitiveIndex,
|
|
20
|
+
$sampleIndex: builtin.sampleIndex,
|
|
21
|
+
$sampleMask: builtin.sampleMask,
|
|
22
|
+
$subgroupInvocationId: builtin.subgroupInvocationId,
|
|
23
|
+
$subgroupSize: builtin.subgroupSize,
|
|
26
24
|
};
|
|
27
25
|
const builtinFragmentOut = {
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
$fragDepth: builtin.fragDepth,
|
|
27
|
+
$sampleMask: builtin.sampleMask,
|
|
30
28
|
};
|
|
31
29
|
/**
|
|
32
|
-
* Only used internally. Meant to be recreated on every resolution.
|
|
33
|
-
*/
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
30
|
+
* Only used internally. Meant to be recreated on every resolution.
|
|
31
|
+
*/
|
|
32
|
+
export class AutoFragmentFn {
|
|
33
|
+
#core;
|
|
34
|
+
autoIn;
|
|
35
|
+
autoOut;
|
|
36
|
+
constructor(impl, varyings, locations) {
|
|
37
|
+
// If the implementation is not named, we can fallback to "fragmentFn"
|
|
38
|
+
if (!getName(impl)) {
|
|
39
|
+
setName(impl, 'fragmentFn');
|
|
40
|
+
}
|
|
41
|
+
this.#core = createFnCore(impl, 'fragment');
|
|
42
|
+
this.autoIn = new AutoStruct({ ...builtinFragmentIn, ...varyings }, undefined, locations);
|
|
43
|
+
setName(this.autoIn, 'FragmentIn');
|
|
44
|
+
this.autoOut = new AutoStruct(builtinFragmentOut, vec4f);
|
|
45
|
+
setName(this.autoOut, 'FragmentOut');
|
|
46
|
+
}
|
|
47
|
+
toString() {
|
|
48
|
+
return 'autoFragmentFn';
|
|
49
|
+
}
|
|
50
|
+
[$resolve](ctx) {
|
|
51
|
+
return ctx.withSlots([[shaderStageSlot, 'fragment']], () => this.#core.resolve(ctx, [this.autoIn], this.autoOut));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
56
54
|
AutoFragmentFn.prototype[$internal] = true;
|
|
57
|
-
AutoFragmentFn.prototype.resourceType =
|
|
55
|
+
AutoFragmentFn.prototype.resourceType = 'auto-fragment-fn';
|
|
58
56
|
/**
|
|
59
|
-
* Only used internally. Meant to be recreated on every resolution.
|
|
60
|
-
*/
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
57
|
+
* Only used internally. Meant to be recreated on every resolution.
|
|
58
|
+
*/
|
|
59
|
+
export class AutoVertexFn {
|
|
60
|
+
#core;
|
|
61
|
+
autoIn;
|
|
62
|
+
autoOut;
|
|
63
|
+
constructor(impl, attribs, locations) {
|
|
64
|
+
// If the implementation is not named, we can fallback to "vertexFn"
|
|
65
|
+
if (!getName(impl)) {
|
|
66
|
+
setName(impl, 'vertexFn');
|
|
67
|
+
}
|
|
68
|
+
this.#core = createFnCore(impl, 'vertex');
|
|
69
|
+
this.autoIn = new AutoStruct({ ...builtinVertexIn, ...attribs }, undefined, locations);
|
|
70
|
+
setName(this.autoIn, 'VertexIn');
|
|
71
|
+
this.autoOut = new AutoStruct(builtinVertexOut, undefined);
|
|
72
|
+
setName(this.autoOut, 'VertexOut');
|
|
73
|
+
}
|
|
74
|
+
toString() {
|
|
75
|
+
return 'autoVertexFn';
|
|
76
|
+
}
|
|
77
|
+
[$resolve](ctx) {
|
|
78
|
+
return ctx.withSlots([[shaderStageSlot, 'vertex']], () => this.#core.resolve(ctx, [this.autoIn], this.autoOut));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
83
81
|
AutoVertexFn.prototype[$internal] = true;
|
|
84
|
-
AutoVertexFn.prototype.resourceType =
|
|
85
|
-
|
|
86
|
-
//#endregion
|
|
87
|
-
export { AutoFragmentFn, AutoVertexFn };
|
|
82
|
+
AutoVertexFn.prototype.resourceType = 'auto-vertex-fn';
|
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import { TgpuNamable } from
|
|
2
|
-
import { $getNameForward, $internal } from
|
|
3
|
-
import { DualFn } from
|
|
4
|
-
|
|
5
|
-
//#region src/core/function/comptime.d.ts
|
|
1
|
+
import { type TgpuNamable } from '../../shared/meta.ts';
|
|
2
|
+
import { $getNameForward, $internal } from '../../shared/symbols.ts';
|
|
3
|
+
import { type DualFn } from '../../types.ts';
|
|
6
4
|
type AnyFn = (...args: never[]) => unknown;
|
|
7
|
-
type TgpuComptime<T extends AnyFn = AnyFn> = DualFn<T> & TgpuNamable & {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
export type TgpuComptime<T extends AnyFn = AnyFn> = DualFn<T> & TgpuNamable & {
|
|
6
|
+
[$getNameForward]: unknown;
|
|
7
|
+
[$internal]: {
|
|
8
|
+
isComptime: true;
|
|
9
|
+
};
|
|
12
10
|
};
|
|
11
|
+
export declare function isComptimeFn(value: unknown): value is TgpuComptime;
|
|
13
12
|
/**
|
|
14
13
|
* Creates a version of `func` that can called safely in a TypeGPU function to
|
|
15
14
|
* precompute and inject a value into the final shader code.
|
|
@@ -34,6 +33,5 @@ type TgpuComptime<T extends AnyFn = AnyFn> = DualFn<T> & TgpuNamable & {
|
|
|
34
33
|
* };
|
|
35
34
|
* ```
|
|
36
35
|
*/
|
|
37
|
-
declare function comptime<T extends (...args: never[]) => unknown>(func: T): TgpuComptime<T>;
|
|
38
|
-
|
|
39
|
-
export { TgpuComptime, comptime };
|
|
36
|
+
export declare function comptime<T extends (...args: never[]) => unknown>(func: T): TgpuComptime<T>;
|
|
37
|
+
export {};
|