typegpu 0.11.8 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/builtin.d.ts +51 -53
- package/builtin.js +30 -34
- package/common/fullScreenTriangle.d.ts +2 -10
- package/common/fullScreenTriangle.js +20 -28
- package/common/index.d.ts +2 -9
- package/common/index.js +3 -12
- package/common/writeSoA.d.ts +11 -12
- package/common/writeSoA.js +88 -76
- package/core/buffer/buffer.d.ts +79 -62
- package/core/buffer/buffer.js +279 -205
- package/core/buffer/bufferBinding.d.ts +71 -0
- package/core/buffer/bufferBinding.js +154 -0
- package/core/buffer/bufferUsage.d.ts +14 -45
- package/core/buffer/bufferUsage.js +1 -171
- package/core/buffer/laidOutBuffer.d.ts +25 -0
- package/core/buffer/laidOutBuffer.js +55 -0
- package/core/commandEncoder/attachments.d.ts +125 -0
- package/core/commandEncoder/attachments.js +29 -0
- package/core/commandEncoder/commandEncoder.d.ts +53 -0
- package/core/commandEncoder/commandEncoder.js +56 -0
- package/core/commandEncoder/computePass.d.ts +58 -0
- package/core/commandEncoder/computePass.js +63 -0
- package/core/commandEncoder/renderPass.d.ts +121 -0
- package/core/commandEncoder/renderPass.js +196 -0
- package/core/constant/tgpuConstant.d.ts +26 -26
- package/core/constant/tgpuConstant.js +76 -65
- package/core/declare/tgpuDeclare.d.ts +3 -6
- package/core/declare/tgpuDeclare.js +37 -38
- package/core/function/autoIO.d.ts +61 -33
- package/core/function/autoIO.js +68 -73
- package/core/function/comptime.d.ts +11 -13
- package/core/function/comptime.js +60 -52
- package/core/function/createCallableSchema.d.ts +16 -0
- package/core/function/createCallableSchema.js +50 -40
- package/core/function/dualImpl.d.ts +44 -0
- package/core/function/dualImpl.js +71 -50
- package/core/function/entryInputRouter.d.ts +26 -0
- package/core/function/entryInputRouter.js +31 -33
- package/core/function/extractArgs.d.ts +38 -0
- package/core/function/extractArgs.js +202 -200
- package/core/function/fnCore.d.ts +44 -0
- package/core/function/fnCore.js +148 -92
- package/core/function/fnTypes.d.ts +31 -29
- package/core/function/fnTypes.js +1 -0
- package/core/function/ioSchema.d.ts +12 -10
- package/core/function/ioSchema.js +65 -47
- package/core/function/shelllessImpl.d.ts +9 -12
- package/core/function/shelllessImpl.js +18 -20
- package/core/function/templateUtils.d.ts +2 -0
- package/core/function/templateUtils.js +9 -8
- package/core/function/tgpuComputeFn.d.ts +26 -28
- package/core/function/tgpuComputeFn.js +47 -48
- package/core/function/tgpuFn.d.ts +34 -37
- package/core/function/tgpuFn.js +179 -153
- package/core/function/tgpuFragmentFn.d.ts +52 -53
- package/core/function/tgpuFragmentFn.js +63 -56
- package/core/function/tgpuVertexFn.d.ts +36 -39
- package/core/function/tgpuVertexFn.js +56 -53
- package/core/pipeline/computePipeline.d.ts +141 -53
- package/core/pipeline/computePipeline.js +291 -225
- package/core/pipeline/connectAttachmentToShader.d.ts +4 -0
- package/core/pipeline/connectAttachmentToShader.js +25 -22
- package/core/pipeline/connectTargetsToShader.d.ts +3 -0
- package/core/pipeline/connectTargetsToShader.js +29 -27
- package/core/pipeline/drawState.d.ts +52 -0
- package/core/pipeline/drawState.js +225 -0
- package/core/pipeline/limitsOverflow.d.ts +2 -0
- package/core/pipeline/limitsOverflow.js +13 -10
- package/core/pipeline/performanceTracker.d.ts +14 -0
- package/core/pipeline/performanceTracker.js +34 -0
- package/core/pipeline/pipelineUtils.d.ts +18 -0
- package/core/pipeline/pipelineUtils.js +54 -25
- package/core/pipeline/priors.d.ts +1 -0
- package/core/pipeline/priors.js +12 -0
- package/core/pipeline/renderPipeline.d.ts +246 -261
- package/core/pipeline/renderPipeline.js +487 -480
- package/core/pipeline/timeable.d.ts +28 -18
- package/core/pipeline/timeable.js +90 -52
- package/core/pipeline/typeGuards.d.ts +17 -0
- package/core/pipeline/typeGuards.js +52 -22
- package/core/querySet/querySet.d.ts +26 -21
- package/core/querySet/querySet.js +127 -103
- package/core/rawCodeSnippet/tgpuRawCodeSnippet.d.ts +13 -18
- package/core/rawCodeSnippet/tgpuRawCodeSnippet.js +90 -93
- package/core/resolve/externals.d.ts +25 -7
- package/core/resolve/externals.js +79 -62
- package/core/resolve/namespace.d.ts +22 -25
- package/core/resolve/namespace.js +16 -21
- package/core/resolve/resolvableString.d.ts +7 -0
- package/core/resolve/resolvableString.js +13 -0
- package/core/resolve/resolveData.d.ts +10 -0
- package/core/resolve/resolveData.js +162 -121
- package/core/resolve/stitch.d.ts +8 -0
- package/core/resolve/stitch.js +23 -21
- package/core/resolve/tgpuResolve.d.ts +55 -53
- package/core/resolve/tgpuResolve.js +106 -55
- package/core/root/configurableImpl.d.ts +10 -0
- package/core/root/configurableImpl.js +17 -19
- package/core/root/init.d.ts +76 -38
- package/core/root/init.js +346 -454
- package/core/root/rootTypes.d.ts +461 -627
- package/core/root/rootTypes.js +1 -0
- package/core/sampler/sampler.d.ts +50 -31
- package/core/sampler/sampler.js +120 -113
- package/core/simulate/tgpuSimulate.d.ts +9 -12
- package/core/simulate/tgpuSimulate.js +68 -71
- package/core/slot/accessor.d.ts +36 -13
- package/core/slot/accessor.js +138 -91
- package/core/slot/internalSlots.d.ts +2 -0
- package/core/slot/internalSlots.js +1 -6
- package/core/slot/lazy.d.ts +2 -6
- package/core/slot/lazy.js +71 -39
- package/core/slot/slot.d.ts +2 -6
- package/core/slot/slot.js +45 -38
- package/core/slot/slotTypes.d.ts +78 -80
- package/core/slot/slotTypes.js +11 -16
- package/core/texture/externalTexture.d.ts +20 -11
- package/core/texture/externalTexture.js +46 -46
- package/core/texture/texture.d.ts +152 -97
- package/core/texture/texture.js +407 -314
- package/core/texture/textureFormats.d.ts +42 -23
- package/core/texture/textureFormats.js +104 -75
- package/core/texture/textureProps.d.ts +7 -10
- package/core/texture/textureProps.js +1 -0
- package/core/texture/textureUtils.d.ts +8 -0
- package/core/texture/textureUtils.js +185 -179
- package/core/texture/usageExtension.d.ts +21 -18
- package/core/texture/usageExtension.js +13 -17
- package/core/unroll/tgpuUnroll.d.ts +20 -19
- package/core/unroll/tgpuUnroll.js +82 -91
- package/core/valueProxyUtils.d.ts +3 -0
- package/core/valueProxyUtils.js +52 -41
- package/core/variable/tgpuVariable.d.ts +26 -27
- package/core/variable/tgpuVariable.js +93 -96
- package/core/vertexLayout/connectAttributesToShader.d.ts +9 -0
- package/core/vertexLayout/connectAttributesToShader.js +61 -56
- package/core/vertexLayout/vertexAttribute.d.ts +21 -17
- package/core/vertexLayout/vertexAttribute.js +1 -0
- package/core/vertexLayout/vertexLayout.d.ts +24 -18
- package/core/vertexLayout/vertexLayout.js +130 -99
- package/core/whitespaces.d.ts +2 -0
- package/core/whitespaces.js +16 -0
- package/data/alignIO.d.ts +7 -0
- package/data/alignIO.js +13 -13
- package/data/alignmentOf.d.ts +5 -8
- package/data/alignmentOf.js +90 -75
- package/data/array.d.ts +6 -9
- package/data/array.js +48 -40
- package/data/atomic.d.ts +2 -7
- package/data/atomic.js +26 -23
- package/data/attributes.d.ts +19 -21
- package/data/attributes.js +192 -132
- package/data/autoStruct.d.ts +36 -3
- package/data/autoStruct.js +84 -81
- package/data/compiledIO.d.ts +5 -0
- package/data/compiledIO.js +231 -214
- package/data/dataIO.d.ts +13 -11
- package/data/dataIO.js +643 -589
- package/data/dataTypes.d.ts +83 -65
- package/data/dataTypes.js +66 -68
- package/data/deepEqual.d.ts +2 -7
- package/data/deepEqual.js +80 -55
- package/data/disarray.d.ts +6 -10
- package/data/disarray.js +52 -46
- package/data/float16Conversion.d.ts +4 -0
- package/data/float16Conversion.js +7 -0
- package/data/getLongestContiguousPrefix.d.ts +4 -8
- package/data/getLongestContiguousPrefix.js +6 -11
- package/data/index.d.ts +30 -31
- package/data/index.js +39 -172
- package/data/instanceToSchema.d.ts +24 -27
- package/data/instanceToSchema.js +1 -0
- package/data/isContiguous.d.ts +4 -8
- package/data/isContiguous.js +6 -11
- package/data/matrix.d.ts +21 -21
- package/data/matrix.js +513 -505
- package/data/numberOps.d.ts +6 -0
- package/data/numberOps.js +26 -20
- package/data/numeric.d.ts +21 -12
- package/data/numeric.js +287 -192
- package/data/offsetUtils.d.ts +9 -13
- package/data/offsetUtils.js +204 -144
- package/data/offsets.d.ts +8 -0
- package/data/offsets.js +33 -33
- package/data/partialIO.d.ts +13 -8
- package/data/partialIO.js +124 -113
- package/data/ptr.d.ts +12 -12
- package/data/ptr.js +42 -44
- package/data/ref.d.ts +40 -27
- package/data/ref.js +125 -95
- package/data/sampler.d.ts +99 -101
- package/data/sampler.js +17 -21
- package/data/schemaCallWrapper.d.ts +19 -0
- package/data/schemaCallWrapper.js +31 -26
- package/data/schemaMemoryLayout.d.ts +8 -0
- package/data/schemaMemoryLayout.js +213 -185
- package/data/sizeOf.d.ts +4 -8
- package/data/sizeOf.js +6 -11
- package/data/snippet.d.ts +96 -20
- package/data/snippet.js +75 -86
- package/data/struct.d.ts +4 -7
- package/data/struct.js +51 -39
- package/data/texture.d.ts +253 -250
- package/data/texture.js +238 -200
- package/data/unstruct.d.ts +2 -7
- package/data/unstruct.js +43 -37
- package/data/vector.d.ts +33 -21
- package/data/vector.js +234 -221
- package/data/vectorImpl.d.ts +231 -0
- package/data/vectorImpl.js +563 -515
- package/data/vectorOps.d.ts +63 -0
- package/data/vectorOps.js +642 -630
- package/data/vertexFormatData.d.ts +181 -184
- package/data/vertexFormatData.js +104 -106
- package/data/wgslTypes.d.ts +665 -600
- package/data/wgslTypes.js +220 -198
- package/errors.d.ts +50 -24
- package/errors.js +146 -120
- package/execMode.d.ts +16 -0
- package/execMode.js +47 -40
- package/extension.d.ts +13 -8
- package/extension.js +10 -16
- package/getGPUValue.d.ts +1 -0
- package/getGPUValue.js +2 -7
- package/index.d.ts +28 -68
- package/index.js +8 -28
- package/indexNamedExports.d.ts +69 -42
- package/indexNamedExports.js +25 -0
- package/internal.d.ts +16 -0
- package/internal.js +12 -0
- package/mathUtils.d.ts +5 -0
- package/mathUtils.js +7 -11
- package/memo.d.ts +11 -0
- package/memo.js +20 -22
- package/minify.d.ts +5 -0
- package/minify.js +93 -0
- package/nameUtils.d.ts +29 -0
- package/nameUtils.js +428 -398
- package/package.json +9 -3
- package/resolutionCtx.d.ts +162 -22
- package/resolutionCtx.js +911 -624
- package/serial/registry.d.ts +15 -0
- package/serial/registry.js +106 -0
- package/serial/restore.d.ts +49 -0
- package/serial/restore.js +68 -0
- package/serial/schema.d.ts +58 -0
- package/serial/schema.js +209 -0
- package/serial/types.d.ts +5 -0
- package/serial/types.js +1 -0
- package/shared/env.d.ts +9 -0
- package/shared/env.js +9 -12
- package/shared/generators.d.ts +4 -0
- package/shared/generators.js +10 -12
- package/shared/meta.d.ts +29 -14
- package/shared/meta.js +71 -55
- package/shared/normalizeMetadata.d.ts +32 -27
- package/shared/normalizeMetadata.js +23 -36
- package/shared/repr.d.ts +73 -55
- package/shared/repr.js +1 -0
- package/shared/soul.d.ts +17 -0
- package/shared/soul.js +1 -0
- package/shared/stringify.d.ts +2 -0
- package/shared/stringify.js +29 -20
- package/shared/symbols.d.ts +26 -20
- package/shared/symbols.js +79 -79
- package/shared/tseynit.d.ts +2 -0
- package/shared/tseynit.js +160 -75
- package/shared/utilityTypes.d.ts +30 -14
- package/shared/utilityTypes.js +2 -6
- package/shared/vertexFormat.d.ts +41 -43
- package/shared/vertexFormat.js +59 -62
- package/std/array.d.ts +2 -7
- package/std/array.js +18 -23
- package/std/atomic.d.ts +14 -18
- package/std/atomic.js +96 -95
- package/std/bitcast.d.ts +193 -10
- package/std/bitcast.js +309 -39
- package/std/boolean.d.ts +19 -33
- package/std/boolean.js +296 -288
- package/std/copy.d.ts +2 -7
- package/std/copy.js +27 -24
- package/std/derivative.d.ts +11 -15
- package/std/derivative.js +56 -79
- package/std/discard.d.ts +1 -6
- package/std/discard.js +7 -14
- package/std/environment.d.ts +19 -14
- package/std/environment.js +71 -51
- package/std/extensions.d.ts +2 -8
- package/std/extensions.js +10 -11
- package/std/index.d.ts +20 -24
- package/std/index.js +32 -187
- package/std/matrix.d.ts +6 -12
- package/std/matrix.js +60 -69
- package/std/numeric.d.ts +143 -146
- package/std/numeric.js +858 -749
- package/std/operators.d.ts +19 -27
- package/std/operators.js +227 -193
- package/std/packing.d.ts +5 -11
- package/std/packing.js +67 -75
- package/std/range.d.ts +6 -11
- package/std/range.js +48 -36
- package/std/subgroup.d.ts +33 -37
- package/std/subgroup.js +180 -217
- package/std/texture.d.ts +70 -38
- package/std/texture.js +176 -172
- package/taskQueue.d.ts +6 -0
- package/taskQueue.js +30 -0
- package/tgpu.d.ts +16 -0
- package/tgpu.js +17 -44
- package/tgpuBindGroupLayout.d.ts +132 -152
- package/tgpuBindGroupLayout.js +346 -268
- package/tgpuLogger.d.ts +34 -0
- package/tgpuLogger.js +63 -0
- package/tgpuUnstable.d.ts +16 -22
- package/tgpuUnstable.js +13 -35
- package/tgsl/accessIndex.d.ts +2 -0
- package/tgsl/accessIndex.js +76 -33
- package/tgsl/accessProp.d.ts +2 -0
- package/tgsl/accessProp.js +142 -100
- package/tgsl/accessStructProp.d.ts +5 -0
- package/tgsl/accessStructProp.js +18 -0
- package/tgsl/consoleLog/deserializers.d.ts +13 -0
- package/tgsl/consoleLog/deserializers.js +119 -103
- package/tgsl/consoleLog/logGenerator.d.ts +21 -0
- package/tgsl/consoleLog/logGenerator.js +85 -80
- package/tgsl/consoleLog/serializers.d.ts +21 -0
- package/tgsl/consoleLog/serializers.js +119 -100
- package/tgsl/consoleLog/types.d.ts +40 -39
- package/tgsl/consoleLog/types.js +1 -0
- package/tgsl/conversion.d.ts +33 -0
- package/tgsl/conversion.js +272 -193
- package/tgsl/forOfUtils.d.ts +15 -0
- package/tgsl/forOfUtils.js +85 -70
- package/tgsl/generationHelpers.d.ts +22 -39
- package/tgsl/generationHelpers.js +85 -58
- package/tgsl/infixDispatch.d.ts +70 -0
- package/tgsl/infixDispatch.js +48 -46
- package/tgsl/jsPolyfills.d.ts +16 -19
- package/tgsl/jsPolyfills.js +44 -42
- package/tgsl/makeDereferenceable.d.ts +48 -0
- package/tgsl/makeDereferenceable.js +86 -0
- package/tgsl/makeResolvable.d.ts +22 -0
- package/tgsl/makeResolvable.js +33 -0
- package/tgsl/shaderGenerator.d.ts +77 -17
- package/tgsl/shaderGenerator.js +1 -0
- package/tgsl/shellless.d.ts +6 -9
- package/tgsl/shellless.js +73 -43
- package/tgsl/wgslGenerator.d.ts +66 -59
- package/tgsl/wgslGenerator.js +1344 -747
- package/types.d.ts +287 -221
- package/types.js +61 -44
- package/unwrapper.d.ts +31 -26
- package/unwrapper.js +1 -0
- package/wgslExtensions.d.ts +3 -5
- package/wgslExtensions.js +12 -16
- package/_virtual/rolldown_runtime.js +0 -13
- package/core/buffer/bufferShorthand.d.ts +0 -50
- package/core/buffer/bufferShorthand.js +0 -55
- package/core/pipeline/applyPipelineState.js +0 -37
- package/package.js +0 -5
- package/tgsl/shaderGenerator_members.d.ts +0 -33
- package/tgsl/shaderGenerator_members.js +0 -12
package/data/ref.js
CHANGED
|
@@ -1,109 +1,139 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { stitch } from "../core/resolve/stitch.js";
|
|
2
|
+
import { WgslTypeError } from "../errors.js";
|
|
3
3
|
import { setName } from "../shared/meta.js";
|
|
4
|
+
import { $gpuCallable, $internal, $ownSnippet, $resolve } from "../shared/symbols.js";
|
|
4
5
|
import { UnknownData } from "./dataTypes.js";
|
|
5
|
-
import { isAlias, snip } from "./snippet.js";
|
|
6
|
-
import { WgslTypeError } from "../errors.js";
|
|
7
|
-
import { stitch } from "../core/resolve/stitch.js";
|
|
8
6
|
import { createPtrFromOrigin, explicitFrom } from "./ptr.js";
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const _ref = (() => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
7
|
+
import { isAlias, snip, withDataType } from "./snippet.js";
|
|
8
|
+
import { isNaturallyEphemeral, isPtr } from "./wgslTypes.js";
|
|
9
|
+
export const _ref = (() => {
|
|
10
|
+
const impl = ((value) => INTERNAL_createRef(value));
|
|
11
|
+
setName(impl, 'ref');
|
|
12
|
+
impl.toString = () => 'ref';
|
|
13
|
+
impl[$internal] = true;
|
|
14
|
+
impl[$gpuCallable] = {
|
|
15
|
+
call(ctx, [value]) {
|
|
16
|
+
if (value.origin === 'argument') {
|
|
17
|
+
throw new WgslTypeError(stitch `d.ref(${value}) is illegal, cannot take a reference of an argument. Copy the value first, and take a reference of the copy.`);
|
|
18
|
+
}
|
|
19
|
+
if (value.origin === 'constant-immutable-def' || value.origin === 'runtime-immutable-def') {
|
|
20
|
+
const typeStr = ctx.resolve(value.dataType).value;
|
|
21
|
+
throw new WgslTypeError(stitch `d.ref(${value}) is illegal, cannot take a reference to a constant.
|
|
21
22
|
-----
|
|
22
23
|
- Try 'd.ref(${typeStr}(${value}));' instead to create a new referencable value.
|
|
23
24
|
-----`);
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
}
|
|
26
|
+
if (isAlias(value) && isNaturallyEphemeral(value.dataType)) {
|
|
27
|
+
const typeStr = ctx.resolve(value.dataType).value;
|
|
28
|
+
throw new WgslTypeError(stitch `d.ref(${value}) is illegal, cannot take a reference to a scalar value.
|
|
28
29
|
-----
|
|
29
30
|
- Try 'd.ref(${typeStr}(${value}));' instead to create a new referencable scalar.
|
|
30
31
|
-----`);
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
32
|
+
}
|
|
33
|
+
if (isPtr(value.dataType)) {
|
|
34
|
+
// This can happen if we take a reference of an *implicit* pointer, one
|
|
35
|
+
// made by assigning a reference to a `const`.
|
|
36
|
+
return withDataType(explicitFrom(value.dataType), value);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Pointer type only exists if the ref was created from a reference (buttery-butter).
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```ts
|
|
43
|
+
* const life = ref(42); // created from a value
|
|
44
|
+
* const boid = ref(layout.$.boids[0]); // created from a reference
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
const ptrType = createPtrFromOrigin(value.origin, value.dataType);
|
|
48
|
+
return snip(new RefOperator(value, ptrType), ptrType ?? UnknownData,
|
|
49
|
+
/* origin */ 'runtime', value.possibleSideEffects);
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
return impl;
|
|
46
53
|
})();
|
|
47
|
-
function isRef(value) {
|
|
48
|
-
|
|
54
|
+
export function isRef(value) {
|
|
55
|
+
return value?.[$internal]?.type === 'ref';
|
|
49
56
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
57
|
+
// --------------
|
|
58
|
+
// Implementation
|
|
59
|
+
// --------------
|
|
60
|
+
export function INTERNAL_createRef(value) {
|
|
61
|
+
const target = {
|
|
62
|
+
[$internal]: { type: 'ref' },
|
|
63
|
+
get $() {
|
|
64
|
+
return value;
|
|
65
|
+
},
|
|
66
|
+
set $(newValue) {
|
|
67
|
+
if (newValue && typeof newValue === 'object') {
|
|
68
|
+
// Setting an object means updating the properties of the original object.
|
|
69
|
+
// e.g.: foo.$ = Boid();
|
|
70
|
+
for (const key of Object.keys(newValue)) {
|
|
71
|
+
value[key] = newValue[key];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
value = newValue;
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
if (value === undefined || value === null) {
|
|
80
|
+
throw new Error('Cannot create a ref from undefined or null');
|
|
81
|
+
}
|
|
82
|
+
if (typeof value === 'object') {
|
|
83
|
+
return new Proxy(target, {
|
|
84
|
+
get(target, prop) {
|
|
85
|
+
if (prop in target) {
|
|
86
|
+
return target[prop];
|
|
87
|
+
}
|
|
88
|
+
return value[prop];
|
|
89
|
+
},
|
|
90
|
+
set(_target, prop, propValue) {
|
|
91
|
+
if (prop === $internal) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
if (prop === '$') {
|
|
95
|
+
return Reflect.set(target, prop, propValue);
|
|
96
|
+
}
|
|
97
|
+
return Reflect.set(value, prop, propValue);
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return target;
|
|
77
102
|
}
|
|
78
103
|
/**
|
|
79
|
-
* The result of calling `d.ref(...)`. The code responsible for
|
|
80
|
-
* generating shader code can check if the value of a snippet is
|
|
81
|
-
* an instance of `RefOperator`, and act accordingly.
|
|
82
|
-
*/
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
104
|
+
* The result of calling `d.ref(...)`. The code responsible for
|
|
105
|
+
* generating shader code can check if the value of a snippet is
|
|
106
|
+
* an instance of `RefOperator`, and act accordingly.
|
|
107
|
+
*/
|
|
108
|
+
export class RefOperator {
|
|
109
|
+
[$internal];
|
|
110
|
+
snippet;
|
|
111
|
+
#ptrType;
|
|
112
|
+
constructor(snippet, ptrType) {
|
|
113
|
+
this[$internal] = true;
|
|
114
|
+
this.snippet = snippet;
|
|
115
|
+
this.#ptrType = ptrType;
|
|
116
|
+
}
|
|
117
|
+
get [$ownSnippet]() {
|
|
118
|
+
if (!this.#ptrType) {
|
|
119
|
+
throw new Error(stitch `Cannot take a reference of ${this.snippet}`);
|
|
120
|
+
}
|
|
121
|
+
return snip(this, this.#ptrType, this.snippet.origin, this.snippet.possibleSideEffects);
|
|
122
|
+
}
|
|
123
|
+
[$resolve]() {
|
|
124
|
+
if (!this.#ptrType) {
|
|
125
|
+
throw new Error(stitch `Cannot take a reference of ${this.snippet}`);
|
|
126
|
+
}
|
|
127
|
+
return snip(stitch `(&${this.snippet})`, this.#ptrType, this.snippet.origin, this.snippet.possibleSideEffects);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
export function derefSnippet(snippet) {
|
|
131
|
+
if (!isPtr(snippet.dataType)) {
|
|
132
|
+
return snippet;
|
|
133
|
+
}
|
|
134
|
+
const innerType = snippet.dataType.inner;
|
|
135
|
+
if (snippet.value instanceof RefOperator) {
|
|
136
|
+
return snip(stitch `${snippet.value.snippet}`, innerType, snippet.origin, snippet.possibleSideEffects);
|
|
137
|
+
}
|
|
138
|
+
return snip(stitch `(*${snippet})`, innerType, snippet.origin, snippet.possibleSideEffects);
|
|
106
139
|
}
|
|
107
|
-
|
|
108
|
-
//#endregion
|
|
109
|
-
export { RefOperator, _ref, derefSnippet, isRef };
|
package/data/sampler.d.ts
CHANGED
|
@@ -1,107 +1,105 @@
|
|
|
1
|
-
import { $internal, $repr } from
|
|
2
|
-
import { BaseData } from
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
*/
|
|
44
|
-
maxAnisotropy?: number;
|
|
1
|
+
import { $internal, $repr } from '../shared/symbols.ts';
|
|
2
|
+
import type { BaseData } from './wgslTypes.ts';
|
|
3
|
+
export interface WgslSamplerProps {
|
|
4
|
+
addressModeU?: GPUAddressMode;
|
|
5
|
+
addressModeV?: GPUAddressMode;
|
|
6
|
+
/**
|
|
7
|
+
* Specifies the address modes for the texture width, height, and depth
|
|
8
|
+
* coordinates, respectively.
|
|
9
|
+
*/
|
|
10
|
+
addressModeW?: GPUAddressMode;
|
|
11
|
+
/**
|
|
12
|
+
* Specifies the sampling behavior when the sample footprint is smaller than or equal to one
|
|
13
|
+
* texel.
|
|
14
|
+
*/
|
|
15
|
+
magFilter?: GPUFilterMode;
|
|
16
|
+
/**
|
|
17
|
+
* Specifies the sampling behavior when the sample footprint is larger than one texel.
|
|
18
|
+
*/
|
|
19
|
+
minFilter?: GPUFilterMode;
|
|
20
|
+
/**
|
|
21
|
+
* Specifies behavior for sampling between mipmap levels.
|
|
22
|
+
*/
|
|
23
|
+
mipmapFilter?: GPUMipmapFilterMode;
|
|
24
|
+
lodMinClamp?: number;
|
|
25
|
+
/**
|
|
26
|
+
* Specifies the minimum and maximum levels of detail, respectively, used internally when
|
|
27
|
+
* sampling a texture.
|
|
28
|
+
*/
|
|
29
|
+
lodMaxClamp?: number;
|
|
30
|
+
/**
|
|
31
|
+
* Specifies the maximum anisotropy value clamp used by the sampler. Anisotropic filtering is
|
|
32
|
+
* enabled when {@link GPUSamplerDescriptor.maxAnisotropy} is > 1 and the implementation supports it.
|
|
33
|
+
* Anisotropic filtering improves the image quality of textures sampled at oblique viewing
|
|
34
|
+
* angles. Higher {@link GPUSamplerDescriptor.maxAnisotropy} values indicate the maximum ratio of
|
|
35
|
+
* anisotropy supported when filtering.
|
|
36
|
+
*
|
|
37
|
+
* Most implementations support {@link GPUSamplerDescriptor.maxAnisotropy} values in range
|
|
38
|
+
* between 1 and 16, inclusive. The used value of {@link GPUSamplerDescriptor.maxAnisotropy}
|
|
39
|
+
* will be clamped to the maximum value that the platform supports.
|
|
40
|
+
* The precise filtering behavior is implementation-dependent.
|
|
41
|
+
*/
|
|
42
|
+
maxAnisotropy?: number;
|
|
45
43
|
}
|
|
46
|
-
interface WgslComparisonSamplerProps {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
44
|
+
export interface WgslComparisonSamplerProps {
|
|
45
|
+
compare: GPUCompareFunction;
|
|
46
|
+
addressModeU?: GPUAddressMode;
|
|
47
|
+
addressModeV?: GPUAddressMode;
|
|
48
|
+
/**
|
|
49
|
+
* Specifies the address modes for the texture width, height, and depth
|
|
50
|
+
* coordinates, respectively.
|
|
51
|
+
*/
|
|
52
|
+
addressModeW?: GPUAddressMode;
|
|
53
|
+
/**
|
|
54
|
+
* Specifies the sampling behavior when the sample footprint is smaller than or equal to one
|
|
55
|
+
* texel.
|
|
56
|
+
*/
|
|
57
|
+
magFilter?: GPUFilterMode;
|
|
58
|
+
/**
|
|
59
|
+
* Specifies the sampling behavior when the sample footprint is larger than one texel.
|
|
60
|
+
*/
|
|
61
|
+
minFilter?: GPUFilterMode;
|
|
62
|
+
/**
|
|
63
|
+
* Specifies behavior for sampling between mipmap levels.
|
|
64
|
+
*/
|
|
65
|
+
mipmapFilter?: GPUMipmapFilterMode;
|
|
66
|
+
lodMinClamp?: number;
|
|
67
|
+
/**
|
|
68
|
+
* Specifies the minimum and maximum levels of detail, respectively, used internally when
|
|
69
|
+
* sampling a texture.
|
|
70
|
+
*/
|
|
71
|
+
lodMaxClamp?: number;
|
|
72
|
+
/**
|
|
73
|
+
* Specifies the maximum anisotropy value clamp used by the sampler. Anisotropic filtering is
|
|
74
|
+
* enabled when {@link GPUSamplerDescriptor.maxAnisotropy} is > 1 and the implementation supports it.
|
|
75
|
+
* Anisotropic filtering improves the image quality of textures sampled at oblique viewing
|
|
76
|
+
* angles. Higher {@link GPUSamplerDescriptor.maxAnisotropy} values indicate the maximum ratio of
|
|
77
|
+
* anisotropy supported when filtering.
|
|
78
|
+
*
|
|
79
|
+
* Most implementations support {@link GPUSamplerDescriptor.maxAnisotropy} values in range
|
|
80
|
+
* between 1 and 16, inclusive. The used value of {@link GPUSamplerDescriptor.maxAnisotropy}
|
|
81
|
+
* will be clamped to the maximum value that the platform supports.
|
|
82
|
+
* The precise filtering behavior is implementation-dependent.
|
|
83
|
+
*/
|
|
84
|
+
maxAnisotropy?: number;
|
|
87
85
|
}
|
|
88
|
-
interface sampler {
|
|
89
|
-
|
|
90
|
-
|
|
86
|
+
export interface sampler {
|
|
87
|
+
[$internal]: true;
|
|
88
|
+
type: 'sampler';
|
|
91
89
|
}
|
|
92
|
-
declare function sampler(): WgslSampler;
|
|
93
|
-
interface comparisonSampler {
|
|
94
|
-
|
|
95
|
-
|
|
90
|
+
export declare function sampler(): WgslSampler;
|
|
91
|
+
export interface comparisonSampler {
|
|
92
|
+
[$internal]: Record<string, never>;
|
|
93
|
+
type: 'sampler_comparison';
|
|
96
94
|
}
|
|
97
|
-
declare function comparisonSampler(): WgslComparisonSampler;
|
|
98
|
-
interface WgslSampler extends BaseData {
|
|
99
|
-
|
|
100
|
-
|
|
95
|
+
export declare function comparisonSampler(): WgslComparisonSampler;
|
|
96
|
+
export interface WgslSampler extends BaseData {
|
|
97
|
+
readonly [$repr]: sampler;
|
|
98
|
+
readonly type: 'sampler';
|
|
101
99
|
}
|
|
102
|
-
interface WgslComparisonSampler extends BaseData {
|
|
103
|
-
|
|
104
|
-
|
|
100
|
+
export interface WgslComparisonSampler extends BaseData {
|
|
101
|
+
readonly [$repr]: comparisonSampler;
|
|
102
|
+
readonly type: 'sampler_comparison';
|
|
105
103
|
}
|
|
106
|
-
|
|
107
|
-
export
|
|
104
|
+
export declare function isWgslSampler(value: unknown): value is WgslSampler;
|
|
105
|
+
export declare function isWgslComparisonSampler(value: unknown): value is WgslComparisonSampler;
|
package/data/sampler.js
CHANGED
|
@@ -1,26 +1,22 @@
|
|
|
1
1
|
import { $internal, $repr } from "../shared/symbols.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
[$repr]: void 0
|
|
9
|
-
};
|
|
2
|
+
export function sampler() {
|
|
3
|
+
return {
|
|
4
|
+
[$internal]: {},
|
|
5
|
+
type: 'sampler',
|
|
6
|
+
[$repr]: undefined,
|
|
7
|
+
};
|
|
10
8
|
}
|
|
11
|
-
function comparisonSampler() {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
export function comparisonSampler() {
|
|
10
|
+
return {
|
|
11
|
+
[$internal]: {},
|
|
12
|
+
type: 'sampler_comparison',
|
|
13
|
+
[$repr]: undefined,
|
|
14
|
+
};
|
|
17
15
|
}
|
|
18
|
-
function isWgslSampler(value) {
|
|
19
|
-
|
|
16
|
+
export function isWgslSampler(value) {
|
|
17
|
+
return !!value[$internal] && value.type === 'sampler';
|
|
20
18
|
}
|
|
21
|
-
function isWgslComparisonSampler(value) {
|
|
22
|
-
|
|
19
|
+
export function isWgslComparisonSampler(value) {
|
|
20
|
+
return (!!value[$internal] &&
|
|
21
|
+
value.type === 'sampler_comparison');
|
|
23
22
|
}
|
|
24
|
-
|
|
25
|
-
//#endregion
|
|
26
|
-
export { comparisonSampler, isWgslComparisonSampler, isWgslSampler, sampler };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type ResolutionCtx } from '../types.ts';
|
|
2
|
+
import type { Snippet } from './snippet.ts';
|
|
3
|
+
import type { BaseData } from './wgslTypes.ts';
|
|
4
|
+
/**
|
|
5
|
+
* A wrapper for `schema(item)` or `schema()` call on JS side.
|
|
6
|
+
* If the schema is a pointer, returns the value pointed to without copying.
|
|
7
|
+
* If the schema is a TgpuVertexFormatData, calls the corresponding constructible schema instead.
|
|
8
|
+
* If the schema is not callable, throws an error.
|
|
9
|
+
* Otherwise, returns `schema(item)` or `schema()`.
|
|
10
|
+
*/
|
|
11
|
+
export declare function schemaCallWrapper<T>(schema: BaseData, item?: T): T;
|
|
12
|
+
/**
|
|
13
|
+
* A wrapper for `schema(item)` or `schema()` call on the GPU side.
|
|
14
|
+
* If the schema is a pointer, returns the value pointed to without copying.
|
|
15
|
+
* If the schema is a TgpuVertexFormatData, calls the corresponding constructible schema instead.
|
|
16
|
+
* If the schema is not callable, throws an error.
|
|
17
|
+
* Otherwise, returns `schema(item)` or `schema()`.
|
|
18
|
+
*/
|
|
19
|
+
export declare function schemaCallWrapperGPU(ctx: ResolutionCtx, schema: BaseData, item?: Snippet): Snippet;
|
|
@@ -1,32 +1,37 @@
|
|
|
1
1
|
import { $cast, $gpuCallable } from "../shared/symbols.js";
|
|
2
2
|
import { hasCast, isGPUCallable } from "../types.js";
|
|
3
|
-
|
|
4
|
-
//#region src/data/schemaCallWrapper.ts
|
|
5
3
|
/**
|
|
6
|
-
* A wrapper for `schema(item)` or `schema()` call on JS side.
|
|
7
|
-
* If the schema is a pointer, returns the value pointed to without copying.
|
|
8
|
-
* If the schema is a TgpuVertexFormatData, calls the corresponding constructible schema instead.
|
|
9
|
-
* If the schema is not callable, throws an error.
|
|
10
|
-
* Otherwise, returns `schema(item)` or `schema()`.
|
|
11
|
-
*/
|
|
12
|
-
function schemaCallWrapper(schema, item) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
4
|
+
* A wrapper for `schema(item)` or `schema()` call on JS side.
|
|
5
|
+
* If the schema is a pointer, returns the value pointed to without copying.
|
|
6
|
+
* If the schema is a TgpuVertexFormatData, calls the corresponding constructible schema instead.
|
|
7
|
+
* If the schema is not callable, throws an error.
|
|
8
|
+
* Otherwise, returns `schema(item)` or `schema()`.
|
|
9
|
+
*/
|
|
10
|
+
export function schemaCallWrapper(schema, item) {
|
|
11
|
+
const callSchema = schema;
|
|
12
|
+
if (hasCast(callSchema)) {
|
|
13
|
+
return callSchema[$cast](item);
|
|
14
|
+
}
|
|
15
|
+
if (typeof callSchema !== 'function') {
|
|
16
|
+
// Not callable
|
|
17
|
+
return item;
|
|
18
|
+
}
|
|
19
|
+
return item === undefined ? callSchema() : callSchema(item);
|
|
17
20
|
}
|
|
18
21
|
/**
|
|
19
|
-
* A wrapper for `schema(item)` or `schema()` call on the GPU side.
|
|
20
|
-
* If the schema is a pointer, returns the value pointed to without copying.
|
|
21
|
-
* If the schema is a TgpuVertexFormatData, calls the corresponding constructible schema instead.
|
|
22
|
-
* If the schema is not callable, throws an error.
|
|
23
|
-
* Otherwise, returns `schema(item)` or `schema()`.
|
|
24
|
-
*/
|
|
25
|
-
function schemaCallWrapperGPU(ctx, schema, item) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
22
|
+
* A wrapper for `schema(item)` or `schema()` call on the GPU side.
|
|
23
|
+
* If the schema is a pointer, returns the value pointed to without copying.
|
|
24
|
+
* If the schema is a TgpuVertexFormatData, calls the corresponding constructible schema instead.
|
|
25
|
+
* If the schema is not callable, throws an error.
|
|
26
|
+
* Otherwise, returns `schema(item)` or `schema()`.
|
|
27
|
+
*/
|
|
28
|
+
export function schemaCallWrapperGPU(ctx, schema, item) {
|
|
29
|
+
if (!isGPUCallable(schema)) {
|
|
30
|
+
// Not callable
|
|
31
|
+
return item;
|
|
32
|
+
}
|
|
33
|
+
const callSchema = schema;
|
|
34
|
+
return item === undefined || item.value === undefined
|
|
35
|
+
? callSchema[$gpuCallable].call(ctx, [])
|
|
36
|
+
: callSchema[$gpuCallable].call(ctx, [item]);
|
|
29
37
|
}
|
|
30
|
-
|
|
31
|
-
//#endregion
|
|
32
|
-
export { schemaCallWrapper, schemaCallWrapperGPU };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { BaseData } from './wgslTypes.ts';
|
|
2
|
+
interface SchemaMemoryLayout {
|
|
3
|
+
isContiguous: boolean;
|
|
4
|
+
size: number;
|
|
5
|
+
longestContiguousPrefix: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function getLayoutInfo<T extends keyof SchemaMemoryLayout>(schema: BaseData, key: T): SchemaMemoryLayout[T];
|
|
8
|
+
export {};
|