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/core/slot/accessor.js
CHANGED
|
@@ -1,97 +1,144 @@
|
|
|
1
|
-
import { $getNameForward, $gpuValueOf, $internal, $ownSnippet, $resolve } from "../../shared/symbols.js";
|
|
2
|
-
import { getName, hasTinyestMetadata, setName } from "../../shared/meta.js";
|
|
3
1
|
import { isData } from "../../data/dataTypes.js";
|
|
4
|
-
import { isSnippet, snip } from "../../data/snippet.js";
|
|
5
|
-
import { NormalState, getOwnSnippet } from "../../types.js";
|
|
6
|
-
import { getResolutionCtx, inCodegenMode } from "../../execMode.js";
|
|
7
2
|
import { schemaCallWrapper } from "../../data/schemaCallWrapper.js";
|
|
8
|
-
import {
|
|
3
|
+
import { isSnippet, snip } from "../../data/snippet.js";
|
|
4
|
+
import { getResolutionCtx } from "../../execMode.js";
|
|
5
|
+
import { makeDereferenceable } from "../../tgsl/makeDereferenceable.js";
|
|
6
|
+
import { makeResolvable } from "../../tgsl/makeResolvable.js";
|
|
7
|
+
import { getName, hasTinyestMetadata, setName } from "../../shared/meta.js";
|
|
8
|
+
import { $getNameForward, $gpuCallable, $gpuValueOf, $internal, $resolve, $soul, } from "../../shared/symbols.js";
|
|
9
|
+
import { getOwnSnippet, isGPUCallable, NormalState } from "../../types.js";
|
|
9
10
|
import { isTgpuFn } from "../function/tgpuFn.js";
|
|
11
|
+
import { getGpuValueRecursively } from "../valueProxyUtils.js";
|
|
10
12
|
import { slot } from "./slot.js";
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
export function accessor(schemaOrConstructor, defaultValue) {
|
|
14
|
+
return new TgpuAccessorImpl(schemaOrConstructor, defaultValue);
|
|
15
|
+
}
|
|
16
|
+
export function mutableAccessor(schemaOrConstructor, defaultValue) {
|
|
17
|
+
return new TgpuMutableAccessorImpl(schemaOrConstructor, defaultValue);
|
|
18
|
+
}
|
|
19
|
+
// --------------
|
|
20
|
+
// Implementation
|
|
21
|
+
// --------------
|
|
22
|
+
/**
|
|
23
|
+
* @returns A snippet representing the accessor.
|
|
24
|
+
*/
|
|
25
|
+
function createAccessorSnippet(accessor) {
|
|
26
|
+
// oxlint-disable-next-line typescript/no-non-null-assertion -- it's there
|
|
27
|
+
const ctx = getResolutionCtx();
|
|
28
|
+
let value = getGpuValueRecursively(ctx.unwrap(accessor.slot));
|
|
29
|
+
while (typeof value === 'function' &&
|
|
30
|
+
!isTgpuFn(value) &&
|
|
31
|
+
!isGPUCallable(value) &&
|
|
32
|
+
!hasTinyestMetadata(value)) {
|
|
33
|
+
// Not a GPU function, so has to be a resource accessor (ran in codegen mode) or comptime
|
|
34
|
+
value = value();
|
|
35
|
+
if (isSnippet(value)) {
|
|
36
|
+
value = value.value;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const ownSnippet = getOwnSnippet(value);
|
|
40
|
+
if (ownSnippet) {
|
|
41
|
+
return ownSnippet;
|
|
42
|
+
}
|
|
43
|
+
if (isGPUCallable(value)) {
|
|
44
|
+
return value[$gpuCallable].call(ctx, []);
|
|
45
|
+
}
|
|
46
|
+
if (isTgpuFn(value) || hasTinyestMetadata(value)) {
|
|
47
|
+
const fn = ctx.resolve(value);
|
|
48
|
+
return ctx.withResetIndentLevel(() => snip(`${fn.value}()`, accessor.schema, /* origin */ 'runtime', fn.possibleSideEffects));
|
|
49
|
+
}
|
|
50
|
+
ctx.pushMode(new NormalState());
|
|
51
|
+
try {
|
|
52
|
+
// Doing a deep copy each time so that we don't have to deal with refs
|
|
53
|
+
const cloned = schemaCallWrapper(accessor.schema, value);
|
|
54
|
+
return snip(cloned, accessor.schema, 'constant', /* possibleSideEffects */ false);
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
ctx.popMode('normal');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
class AccessorBase {
|
|
61
|
+
[$getNameForward];
|
|
62
|
+
[$soul];
|
|
63
|
+
slot;
|
|
64
|
+
static {
|
|
65
|
+
AccessorBase.prototype[$internal] = true;
|
|
66
|
+
makeResolvable(AccessorBase.prototype, {
|
|
67
|
+
asString() {
|
|
68
|
+
return `${this.resourceType}:${getName(this) ?? '<unnamed>'}`;
|
|
69
|
+
},
|
|
70
|
+
resolve(ctx) {
|
|
71
|
+
return ctx.resolveSnippet(createAccessorSnippet(this));
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
constructor(type, schemaOrConstructor, defaultValue = undefined) {
|
|
76
|
+
this[$soul] = {
|
|
77
|
+
type,
|
|
78
|
+
schema: isData(schemaOrConstructor)
|
|
79
|
+
? schemaOrConstructor
|
|
80
|
+
: schemaOrConstructor(0),
|
|
81
|
+
defaultValue,
|
|
82
|
+
label: undefined,
|
|
83
|
+
};
|
|
84
|
+
// NOTE: in certain setups, unplugin can run on package typegpu, so we have to avoid auto-naming triggering here
|
|
85
|
+
this.slot = (() => slot(defaultValue))();
|
|
86
|
+
this[$getNameForward] = this.slot;
|
|
87
|
+
}
|
|
88
|
+
get schema() {
|
|
89
|
+
return this[$soul].schema;
|
|
90
|
+
}
|
|
91
|
+
get defaultValue() {
|
|
92
|
+
return this[$soul].defaultValue;
|
|
93
|
+
}
|
|
94
|
+
$name(label) {
|
|
95
|
+
setName(this, label);
|
|
96
|
+
// Passing the name down to the default callback, if it has no name yet
|
|
97
|
+
if (this.defaultValue &&
|
|
98
|
+
typeof this.defaultValue === 'function' &&
|
|
99
|
+
!getName(this.defaultValue)) {
|
|
100
|
+
setName(this.defaultValue, label);
|
|
101
|
+
}
|
|
102
|
+
return this;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
export class TgpuAccessorImpl extends AccessorBase {
|
|
106
|
+
static {
|
|
107
|
+
TgpuAccessorImpl.prototype.resourceType = 'accessor';
|
|
108
|
+
makeDereferenceable(TgpuAccessorImpl.prototype, {
|
|
109
|
+
codegenMode: {
|
|
110
|
+
get() {
|
|
111
|
+
return createAccessorSnippet(this);
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
normalMode: {
|
|
115
|
+
get() {
|
|
116
|
+
throw new Error('`tgpu.accessor` relies on GPU resources and cannot be accessed outside of a compute dispatch or draw call. Use `tgpu.slot` for non-WGSL values instead.');
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
constructor(schemaOrConstructor, defaultValue = undefined) {
|
|
122
|
+
super('accessor', schemaOrConstructor, defaultValue);
|
|
123
|
+
}
|
|
15
124
|
}
|
|
16
|
-
|
|
17
|
-
|
|
125
|
+
export class TgpuMutableAccessorImpl extends AccessorBase {
|
|
126
|
+
static {
|
|
127
|
+
TgpuMutableAccessorImpl.prototype.resourceType = 'mutable-accessor';
|
|
128
|
+
makeDereferenceable(TgpuMutableAccessorImpl.prototype, {
|
|
129
|
+
codegenMode: {
|
|
130
|
+
get() {
|
|
131
|
+
return createAccessorSnippet(this);
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
normalMode: {
|
|
135
|
+
get() {
|
|
136
|
+
throw new Error('`tgpu.mutableAccessor` relies on GPU resources and cannot be accessed outside of a compute dispatch or draw call. Use `tgpu.slot` for non-WGSL values instead.');
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
constructor(schemaOrConstructor, defaultValue = undefined) {
|
|
142
|
+
super('mutable-accessor', schemaOrConstructor, defaultValue);
|
|
143
|
+
}
|
|
18
144
|
}
|
|
19
|
-
var AccessorBase = class {
|
|
20
|
-
[$internal] = true;
|
|
21
|
-
[$getNameForward];
|
|
22
|
-
slot;
|
|
23
|
-
schema;
|
|
24
|
-
defaultValue;
|
|
25
|
-
constructor(schemaOrConstructor, defaultValue = void 0) {
|
|
26
|
-
this.schema = isData(schemaOrConstructor) ? schemaOrConstructor : schemaOrConstructor(0);
|
|
27
|
-
this.defaultValue = defaultValue;
|
|
28
|
-
this.slot = (() => slot(defaultValue))();
|
|
29
|
-
this[$getNameForward] = this.slot;
|
|
30
|
-
}
|
|
31
|
-
get [$gpuValueOf]() {
|
|
32
|
-
return new Proxy({
|
|
33
|
-
[$internal]: true,
|
|
34
|
-
[$ownSnippet]: this.#createSnippet(),
|
|
35
|
-
[$resolve]: (ctx) => ctx.resolve(this),
|
|
36
|
-
toString: () => `${this.resourceType}:${getName(this) ?? "<unnamed>"}.$`
|
|
37
|
-
}, valueProxyHandler);
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* @returns A snippet representing the accessor.
|
|
41
|
-
*/
|
|
42
|
-
#createSnippet() {
|
|
43
|
-
const ctx = getResolutionCtx();
|
|
44
|
-
let value = getGpuValueRecursively(ctx.unwrap(this.slot));
|
|
45
|
-
while (typeof value === "function" && !isTgpuFn(value) && !hasTinyestMetadata(value)) {
|
|
46
|
-
value = value();
|
|
47
|
-
if (isSnippet(value)) value = value.value;
|
|
48
|
-
}
|
|
49
|
-
const ownSnippet = getOwnSnippet(value);
|
|
50
|
-
if (ownSnippet) return ownSnippet;
|
|
51
|
-
if (isTgpuFn(value) || hasTinyestMetadata(value)) return ctx.withResetIndentLevel(() => snip(`${ctx.resolve(value).value}()`, this.schema, "runtime"));
|
|
52
|
-
ctx.pushMode(new NormalState());
|
|
53
|
-
try {
|
|
54
|
-
return snip(schemaCallWrapper(this.schema, value), this.schema, "constant", false);
|
|
55
|
-
} finally {
|
|
56
|
-
ctx.popMode("normal");
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
$name(label) {
|
|
60
|
-
setName(this, label);
|
|
61
|
-
if (this.defaultValue && typeof this.defaultValue === "function" && !getName(this.defaultValue)) setName(this.defaultValue, label);
|
|
62
|
-
return this;
|
|
63
|
-
}
|
|
64
|
-
toString() {
|
|
65
|
-
return `${this.resourceType}:${getName(this) ?? "<unnamed>"}`;
|
|
66
|
-
}
|
|
67
|
-
get value() {
|
|
68
|
-
return this.$;
|
|
69
|
-
}
|
|
70
|
-
[$resolve](ctx) {
|
|
71
|
-
const snippet = this.#createSnippet();
|
|
72
|
-
return snip(ctx.resolve(snippet.value, snippet.dataType).value, snippet.dataType, snippet.origin);
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
var TgpuAccessorImpl = class extends AccessorBase {
|
|
76
|
-
resourceType = "accessor";
|
|
77
|
-
constructor(schemaOrConstructor, defaultValue = void 0) {
|
|
78
|
-
super(schemaOrConstructor, defaultValue);
|
|
79
|
-
}
|
|
80
|
-
get $() {
|
|
81
|
-
if (inCodegenMode()) return this[$gpuValueOf];
|
|
82
|
-
throw new Error("`tgpu.accessor` relies on GPU resources and cannot be accessed outside of a compute dispatch or draw call. Use `tgpu.slot` for non-WGSL values instead.");
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
var TgpuMutableAccessorImpl = class extends AccessorBase {
|
|
86
|
-
resourceType = "mutable-accessor";
|
|
87
|
-
constructor(schemaOrConstructor, defaultValue = void 0) {
|
|
88
|
-
super(schemaOrConstructor, defaultValue);
|
|
89
|
-
}
|
|
90
|
-
get $() {
|
|
91
|
-
if (inCodegenMode()) return this[$gpuValueOf];
|
|
92
|
-
throw new Error("`tgpu.mutableAccessor` relies on GPU resources and cannot be accessed outside of a compute dispatch or draw call. Use `tgpu.slot` for non-WGSL values instead.");
|
|
93
|
-
}
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
//#endregion
|
|
97
|
-
export { accessor, mutableAccessor };
|
package/core/slot/lazy.d.ts
CHANGED
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
import { TgpuLazy } from
|
|
2
|
-
|
|
3
|
-
//#region src/core/slot/lazy.d.ts
|
|
4
|
-
declare function lazy<T>(compute: () => T): TgpuLazy<T>;
|
|
5
|
-
//#endregion
|
|
6
|
-
export { lazy };
|
|
1
|
+
import { type TgpuLazy } from './slotTypes.ts';
|
|
2
|
+
export declare function lazy<T>(compute: () => T): TgpuLazy<T>;
|
package/core/slot/lazy.js
CHANGED
|
@@ -1,42 +1,74 @@
|
|
|
1
|
-
import { $gpuValueOf, $internal, $providing } from "../../shared/symbols.js";
|
|
2
|
-
import { isAccessor, isMutableAccessor } from "./slotTypes.js";
|
|
3
1
|
import { getResolutionCtx } from "../../execMode.js";
|
|
2
|
+
import { makeDereferenceable } from "../../tgsl/makeDereferenceable.js";
|
|
3
|
+
import { makeResolvable } from "../../tgsl/makeResolvable.js";
|
|
4
|
+
import { $gpuValueOf, $internal, $providing } from "../../shared/symbols.js";
|
|
4
5
|
import { getGpuValueRecursively } from "../valueProxyUtils.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
import { isAccessor, isMutableAccessor, } from "./slotTypes.js";
|
|
7
|
+
// ----------
|
|
8
|
+
// Public API
|
|
9
|
+
// ----------
|
|
10
|
+
export function lazy(compute) {
|
|
11
|
+
if (getResolutionCtx()) {
|
|
12
|
+
throw new Error('Cannot create tgpu.lazy objects during shader resolution.');
|
|
13
|
+
}
|
|
14
|
+
return new TgpuLazyImpl(compute, undefined);
|
|
15
|
+
}
|
|
16
|
+
// --------------
|
|
17
|
+
// Implementation
|
|
18
|
+
// --------------
|
|
19
|
+
class TgpuLazyImpl {
|
|
20
|
+
[$internal];
|
|
21
|
+
[$providing];
|
|
22
|
+
static {
|
|
23
|
+
TgpuLazyImpl.prototype.resourceType = 'lazy';
|
|
24
|
+
makeDereferenceable(makeResolvable(TgpuLazyImpl.prototype, {
|
|
25
|
+
asString: () => 'lazy',
|
|
26
|
+
resolve(_ctx) {
|
|
27
|
+
throw new Error(`Unreachable, is never resolved directly`);
|
|
28
|
+
},
|
|
29
|
+
}), {
|
|
30
|
+
codegenMode: {
|
|
31
|
+
get() {
|
|
32
|
+
return this.#getValue();
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
normalMode: {
|
|
36
|
+
get() {
|
|
37
|
+
return this.#getValue();
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
constructor(compute, providing) {
|
|
43
|
+
this[$internal] = {
|
|
44
|
+
compute,
|
|
45
|
+
};
|
|
46
|
+
this[$providing] = providing;
|
|
47
|
+
}
|
|
48
|
+
get [$gpuValueOf]() {
|
|
49
|
+
const ctx = getResolutionCtx();
|
|
50
|
+
if (!ctx) {
|
|
51
|
+
throw new Error(`Cannot access tgpu.lazy's value outside of resolution.`);
|
|
52
|
+
}
|
|
53
|
+
return getGpuValueRecursively(ctx.unwrap(this));
|
|
54
|
+
}
|
|
55
|
+
get $() {
|
|
56
|
+
return this[$gpuValueOf];
|
|
57
|
+
}
|
|
58
|
+
#getValue() {
|
|
59
|
+
const ctx = getResolutionCtx();
|
|
60
|
+
if (!ctx) {
|
|
61
|
+
throw new Error(`Cannot access tgpu.lazy's value outside of resolution.`);
|
|
62
|
+
}
|
|
63
|
+
return getGpuValueRecursively(ctx.unwrap(this));
|
|
64
|
+
}
|
|
65
|
+
with(slot, value) {
|
|
66
|
+
return new TgpuLazyImpl(this[$internal].compute.bind(this), {
|
|
67
|
+
inner: this[$providing]?.inner ?? this,
|
|
68
|
+
pairs: [
|
|
69
|
+
...(this[$providing]?.pairs ?? []),
|
|
70
|
+
[isAccessor(slot) || isMutableAccessor(slot) ? slot.slot : slot, value],
|
|
71
|
+
],
|
|
72
|
+
});
|
|
73
|
+
}
|
|
10
74
|
}
|
|
11
|
-
var TgpuLazyImpl = class TgpuLazyImpl {
|
|
12
|
-
[$internal];
|
|
13
|
-
[$providing];
|
|
14
|
-
constructor(compute, providing) {
|
|
15
|
-
this[$internal] = { compute };
|
|
16
|
-
this[$providing] = providing;
|
|
17
|
-
}
|
|
18
|
-
get [$gpuValueOf]() {
|
|
19
|
-
const ctx = getResolutionCtx();
|
|
20
|
-
if (!ctx) throw new Error(`Cannot access tgpu.lazy's value outside of resolution.`);
|
|
21
|
-
return getGpuValueRecursively(ctx.unwrap(this));
|
|
22
|
-
}
|
|
23
|
-
get value() {
|
|
24
|
-
return this[$gpuValueOf];
|
|
25
|
-
}
|
|
26
|
-
get $() {
|
|
27
|
-
return this[$gpuValueOf];
|
|
28
|
-
}
|
|
29
|
-
toString() {
|
|
30
|
-
return "lazy";
|
|
31
|
-
}
|
|
32
|
-
with(slot, value) {
|
|
33
|
-
return new TgpuLazyImpl(this[$internal].compute.bind(this), {
|
|
34
|
-
inner: this[$providing]?.inner ?? this,
|
|
35
|
-
pairs: [...this[$providing]?.pairs ?? [], [isAccessor(slot) || isMutableAccessor(slot) ? slot.slot : slot, value]]
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
TgpuLazyImpl.prototype.resourceType = "lazy";
|
|
40
|
-
|
|
41
|
-
//#endregion
|
|
42
|
-
export { lazy };
|
package/core/slot/slot.d.ts
CHANGED
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
import { TgpuSlot } from
|
|
2
|
-
|
|
3
|
-
//#region src/core/slot/slot.d.ts
|
|
4
|
-
declare function slot<T>(defaultValue?: T): TgpuSlot<T>;
|
|
5
|
-
//#endregion
|
|
6
|
-
export { slot };
|
|
1
|
+
import type { TgpuSlot } from './slotTypes.ts';
|
|
2
|
+
export declare function slot<T>(defaultValue?: T): TgpuSlot<T>;
|
package/core/slot/slot.js
CHANGED
|
@@ -1,41 +1,48 @@
|
|
|
1
|
-
import { $gpuValueOf, $internal } from "../../shared/symbols.js";
|
|
2
|
-
import { getName, setName } from "../../shared/meta.js";
|
|
3
1
|
import { getResolutionCtx } from "../../execMode.js";
|
|
2
|
+
import { getName, setName } from "../../shared/meta.js";
|
|
3
|
+
import { $gpuValueOf, $internal, $soul } from "../../shared/symbols.js";
|
|
4
4
|
import { getGpuValueRecursively } from "../valueProxyUtils.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
// ----------
|
|
6
|
+
// Public API
|
|
7
|
+
// ----------
|
|
8
|
+
export function slot(defaultValue) {
|
|
9
|
+
return new TgpuSlotImpl(defaultValue);
|
|
10
|
+
}
|
|
11
|
+
// --------------
|
|
12
|
+
// Implementation
|
|
13
|
+
// --------------
|
|
14
|
+
class TgpuSlotImpl {
|
|
15
|
+
[$internal] = true;
|
|
16
|
+
[$soul];
|
|
17
|
+
resourceType = 'slot';
|
|
18
|
+
constructor(defaultValue = undefined) {
|
|
19
|
+
this[$soul] = {
|
|
20
|
+
type: 'slot',
|
|
21
|
+
defaultValue,
|
|
22
|
+
label: undefined,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
get defaultValue() {
|
|
26
|
+
return this[$soul].defaultValue;
|
|
27
|
+
}
|
|
28
|
+
$name(label) {
|
|
29
|
+
setName(this, label);
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
areEqual(a, b) {
|
|
33
|
+
return Object.is(a, b);
|
|
34
|
+
}
|
|
35
|
+
toString() {
|
|
36
|
+
return `slot:${getName(this) ?? '<unnamed>'}`;
|
|
37
|
+
}
|
|
38
|
+
get [$gpuValueOf]() {
|
|
39
|
+
const ctx = getResolutionCtx();
|
|
40
|
+
if (!ctx) {
|
|
41
|
+
throw new Error(`Cannot access tgpu.slot's value outside of resolution.`);
|
|
42
|
+
}
|
|
43
|
+
return getGpuValueRecursively(ctx.unwrap(this));
|
|
44
|
+
}
|
|
45
|
+
get $() {
|
|
46
|
+
return this[$gpuValueOf];
|
|
47
|
+
}
|
|
9
48
|
}
|
|
10
|
-
var TgpuSlotImpl = class {
|
|
11
|
-
[$internal] = true;
|
|
12
|
-
resourceType = "slot";
|
|
13
|
-
defaultValue;
|
|
14
|
-
constructor(defaultValue = void 0) {
|
|
15
|
-
this.defaultValue = defaultValue;
|
|
16
|
-
}
|
|
17
|
-
$name(label) {
|
|
18
|
-
setName(this, label);
|
|
19
|
-
return this;
|
|
20
|
-
}
|
|
21
|
-
areEqual(a, b) {
|
|
22
|
-
return Object.is(a, b);
|
|
23
|
-
}
|
|
24
|
-
toString() {
|
|
25
|
-
return `slot:${getName(this) ?? "<unnamed>"}`;
|
|
26
|
-
}
|
|
27
|
-
get [$gpuValueOf]() {
|
|
28
|
-
const ctx = getResolutionCtx();
|
|
29
|
-
if (!ctx) throw new Error(`Cannot access tgpu.slot's value outside of resolution.`);
|
|
30
|
-
return getGpuValueRecursively(ctx.unwrap(this));
|
|
31
|
-
}
|
|
32
|
-
get value() {
|
|
33
|
-
return this[$gpuValueOf];
|
|
34
|
-
}
|
|
35
|
-
get $() {
|
|
36
|
-
return this.value;
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
//#endregion
|
|
41
|
-
export { slot };
|
package/core/slot/slotTypes.d.ts
CHANGED
|
@@ -1,92 +1,90 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
interface TgpuSlot<T> extends TgpuNamable {
|
|
16
|
-
readonly [$internal]: true;
|
|
17
|
-
readonly resourceType: 'slot';
|
|
18
|
-
readonly defaultValue: T | undefined;
|
|
19
|
-
/**
|
|
20
|
-
* Used to determine if code generated using either value `a` or `b` in place
|
|
21
|
-
* of the slot will be equivalent. Defaults to `Object.is`.
|
|
22
|
-
*/
|
|
23
|
-
areEqual(a: T, b: T): boolean;
|
|
24
|
-
readonly [$gpuValueOf]: GPUValueOf<T>;
|
|
25
|
-
/**
|
|
26
|
-
* @deprecated Use `.$` instead, works the same way.
|
|
27
|
-
*/
|
|
28
|
-
readonly value: GPUValueOf<T>;
|
|
29
|
-
readonly $: GPUValueOf<T>;
|
|
30
|
-
toString(): string;
|
|
1
|
+
import type { WgslStorageTexture, WgslTexture } from '../../data/texture.ts';
|
|
2
|
+
import type { BaseData } from '../../data/wgslTypes.ts';
|
|
3
|
+
import type { TgpuNamable } from '../../shared/meta.ts';
|
|
4
|
+
import type { GPUValueOf, Infer, InferGPU } from '../../shared/repr.ts';
|
|
5
|
+
import type { TgpuSoul } from '../../shared/soul.ts';
|
|
6
|
+
import { $gpuValueOf, $internal, $providing, $soul } from '../../shared/symbols.ts';
|
|
7
|
+
import type { UnwrapRuntimeConstructor } from '../../tgpuBindGroupLayout.ts';
|
|
8
|
+
import type { TgpuBufferBinding } from '../buffer/bufferBinding.ts';
|
|
9
|
+
import type { TgpuConst } from '../constant/tgpuConstant.ts';
|
|
10
|
+
import type { Withable } from '../root/rootTypes.ts';
|
|
11
|
+
import type { TgpuTextureView } from '../texture/texture.ts';
|
|
12
|
+
import type { TgpuVar, VariableScope } from '../variable/tgpuVariable.ts';
|
|
13
|
+
export interface TgpuSlotSoul<T = unknown> extends TgpuSoul<'slot'> {
|
|
14
|
+
readonly defaultValue: T | undefined;
|
|
31
15
|
}
|
|
32
|
-
interface
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
};
|
|
36
|
-
readonly resourceType: 'lazy';
|
|
37
|
-
readonly [$gpuValueOf]: GPUValueOf<T>;
|
|
38
|
-
/**
|
|
39
|
-
* @deprecated Use `.$` instead, works the same way.
|
|
40
|
-
*/
|
|
41
|
-
readonly value: GPUValueOf<T>;
|
|
42
|
-
readonly $: GPUValueOf<T>;
|
|
43
|
-
readonly [$providing]?: Providing | undefined;
|
|
16
|
+
export interface TgpuAccessorSoul<T extends BaseData = BaseData, TValue = unknown> extends TgpuSoul<'accessor' | 'mutable-accessor'> {
|
|
17
|
+
readonly schema: T;
|
|
18
|
+
readonly defaultValue: TValue | undefined;
|
|
44
19
|
}
|
|
45
|
-
interface
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
20
|
+
export interface TgpuSlot<T> extends TgpuNamable {
|
|
21
|
+
readonly [$internal]: true;
|
|
22
|
+
readonly [$soul]: TgpuSlotSoul<T>;
|
|
23
|
+
readonly resourceType: 'slot';
|
|
24
|
+
readonly defaultValue: T | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Used to determine if code generated using either value `a` or `b` in place
|
|
27
|
+
* of the slot will be equivalent. Defaults to `Object.is`.
|
|
28
|
+
*/
|
|
29
|
+
areEqual(a: T, b: T): boolean;
|
|
30
|
+
readonly [$gpuValueOf]: GPUValueOf<T>;
|
|
31
|
+
readonly $: GPUValueOf<T>;
|
|
32
|
+
toString(): string;
|
|
57
33
|
}
|
|
58
|
-
|
|
34
|
+
export interface TgpuLazy<out T> extends Withable<TgpuLazy<T>> {
|
|
35
|
+
readonly [$internal]: {
|
|
36
|
+
compute(): T;
|
|
37
|
+
};
|
|
38
|
+
readonly resourceType: 'lazy';
|
|
39
|
+
readonly [$gpuValueOf]: GPUValueOf<T>;
|
|
40
|
+
readonly $: GPUValueOf<T>;
|
|
41
|
+
readonly [$providing]?: Providing | undefined;
|
|
42
|
+
}
|
|
43
|
+
export interface TgpuAccessor<T extends BaseData = BaseData> extends TgpuNamable {
|
|
44
|
+
readonly [$internal]: true;
|
|
45
|
+
readonly [$soul]: TgpuAccessorSoul<T, TgpuAccessor.In<T>>;
|
|
46
|
+
readonly resourceType: 'accessor';
|
|
47
|
+
readonly schema: T;
|
|
48
|
+
readonly defaultValue: TgpuAccessor.In<T> | undefined;
|
|
49
|
+
readonly slot: TgpuSlot<TgpuAccessor.In<T>>;
|
|
50
|
+
readonly [$gpuValueOf]: InferGPU<T>;
|
|
51
|
+
readonly $: InferGPU<T>;
|
|
52
|
+
toString(): string;
|
|
53
|
+
}
|
|
54
|
+
type DataAccessorIn<T extends BaseData> = (() => DataAccessorIn<T>) | TgpuBufferBinding<T> | TgpuVar<VariableScope, T> | TgpuConst<T> | Infer<T>;
|
|
59
55
|
type TextureAccessorIn<T extends WgslTexture | WgslStorageTexture> = (() => TextureAccessorIn<T>) | Infer<T> | TgpuTextureView<T>;
|
|
60
|
-
declare namespace TgpuAccessor {
|
|
61
|
-
|
|
56
|
+
export declare namespace TgpuAccessor {
|
|
57
|
+
type In<T extends BaseData | ((count: number) => BaseData)> = UnwrapRuntimeConstructor<T> extends WgslTexture | WgslStorageTexture ? TextureAccessorIn<UnwrapRuntimeConstructor<T>> : DataAccessorIn<UnwrapRuntimeConstructor<T>>;
|
|
62
58
|
}
|
|
63
|
-
interface TgpuMutableAccessor<T extends BaseData = BaseData> extends TgpuNamable {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
59
|
+
export interface TgpuMutableAccessor<T extends BaseData = BaseData> extends TgpuNamable {
|
|
60
|
+
readonly [$internal]: true;
|
|
61
|
+
readonly [$soul]: TgpuAccessorSoul<T, TgpuMutableAccessor.In<T>>;
|
|
62
|
+
readonly resourceType: 'mutable-accessor';
|
|
63
|
+
readonly schema: T;
|
|
64
|
+
readonly defaultValue: TgpuMutableAccessor.In<T> | undefined;
|
|
65
|
+
readonly slot: TgpuSlot<TgpuMutableAccessor.In<T>>;
|
|
66
|
+
readonly [$gpuValueOf]: InferGPU<T>;
|
|
67
|
+
$: InferGPU<T>;
|
|
72
68
|
}
|
|
73
|
-
type MutableDataAccessorIn<T extends BaseData> = (() => Infer<T> | MutableDataAccessorIn<T>) |
|
|
69
|
+
type MutableDataAccessorIn<T extends BaseData> = (() => Infer<T> | MutableDataAccessorIn<T>) | TgpuBufferBinding<T> | TgpuVar<VariableScope, T>;
|
|
74
70
|
type MutableTextureAccessorIn<T extends WgslTexture | WgslStorageTexture> = (() => Infer<T> | TgpuTextureView<T> | MutableTextureAccessorIn<T>) | TgpuTextureView<T>;
|
|
75
|
-
declare namespace TgpuMutableAccessor {
|
|
76
|
-
|
|
71
|
+
export declare namespace TgpuMutableAccessor {
|
|
72
|
+
type In<T extends BaseData | ((count: number) => BaseData)> = UnwrapRuntimeConstructor<T> extends WgslTexture | WgslStorageTexture ? MutableTextureAccessorIn<UnwrapRuntimeConstructor<T>> : MutableDataAccessorIn<UnwrapRuntimeConstructor<T>>;
|
|
77
73
|
}
|
|
78
74
|
/**
|
|
79
75
|
* Represents a value that is available at resolution time.
|
|
80
76
|
*/
|
|
81
|
-
type Eventual<T> = T | TgpuSlot<T> | TgpuLazy<T>;
|
|
82
|
-
type SlotValuePair<T = unknown> = [TgpuSlot<T>, T];
|
|
83
|
-
type Providing = {
|
|
84
|
-
|
|
85
|
-
|
|
77
|
+
export type Eventual<T> = T | TgpuSlot<T> | TgpuLazy<T>;
|
|
78
|
+
export type SlotValuePair<T = unknown> = [TgpuSlot<T>, T];
|
|
79
|
+
export type Providing = {
|
|
80
|
+
inner: object;
|
|
81
|
+
pairs: SlotValuePair[];
|
|
82
|
+
};
|
|
83
|
+
export declare function isSlot<T>(value: unknown): value is TgpuSlot<T>;
|
|
84
|
+
export declare function isLazy<T>(value: unknown): value is TgpuLazy<T>;
|
|
85
|
+
export declare function isProviding(value: unknown): value is {
|
|
86
|
+
[$providing]: Providing;
|
|
86
87
|
};
|
|
87
|
-
declare function
|
|
88
|
-
declare function
|
|
89
|
-
|
|
90
|
-
declare function isMutableAccessor<T extends BaseData>(value: unknown): value is TgpuMutableAccessor<T>;
|
|
91
|
-
//#endregion
|
|
92
|
-
export { Eventual, Providing, SlotValuePair, TgpuAccessor, TgpuLazy, TgpuMutableAccessor, TgpuSlot, isAccessor, isLazy, isMutableAccessor, isSlot };
|
|
88
|
+
export declare function isAccessor<T extends BaseData>(value: unknown): value is TgpuAccessor<T>;
|
|
89
|
+
export declare function isMutableAccessor<T extends BaseData>(value: unknown): value is TgpuMutableAccessor<T>;
|
|
90
|
+
export {};
|