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
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { AnyWgslData, BaseData } from '../../data/wgslTypes.ts';
|
|
2
|
+
import { type StorageFlag } from '../../extension.ts';
|
|
3
|
+
import { type TgpuNamable } from '../../shared/meta.ts';
|
|
4
|
+
import type { Infer, InferGPU, InferInput, InferPatch, InferPartial } from '../../shared/repr.ts';
|
|
5
|
+
import type { TgpuSoul } from '../../shared/soul.ts';
|
|
6
|
+
import { $getNameForward, $gpuValueOf, $internal, $repr, $soul } from '../../shared/symbols.ts';
|
|
7
|
+
import { type BufferWriteOptions, type TgpuBuffer, type UniformFlag } from './buffer.ts';
|
|
8
|
+
export interface TgpuBufferBindingSoul<TBuffer extends TgpuBuffer<BaseData> = TgpuBuffer<BaseData>> extends TgpuSoul<'uniform' | 'mutable' | 'readonly'> {
|
|
9
|
+
readonly buffer: TBuffer;
|
|
10
|
+
}
|
|
11
|
+
interface TgpuBufferBindingBase<TData extends BaseData> extends TgpuNamable {
|
|
12
|
+
readonly [$internal]: true;
|
|
13
|
+
readonly [$soul]: TgpuBufferBindingSoul<TgpuBuffer<TData>>;
|
|
14
|
+
write(data: InferInput<TData>, options?: BufferWriteOptions): void;
|
|
15
|
+
/** @deprecated Use {@link patch} instead. */
|
|
16
|
+
writePartial(data: InferPartial<TData>): void;
|
|
17
|
+
patch(data: InferPatch<TData>): void;
|
|
18
|
+
read(): Promise<Infer<TData>>;
|
|
19
|
+
readonly [$gpuValueOf]: InferGPU<TData>;
|
|
20
|
+
/** Type-token, not available at runtime */
|
|
21
|
+
readonly [$repr]: Infer<TData>;
|
|
22
|
+
}
|
|
23
|
+
export interface TgpuMutable<out TData extends BaseData> extends TgpuBufferBindingBase<TData> {
|
|
24
|
+
readonly resourceType: 'mutable';
|
|
25
|
+
readonly buffer: TgpuBuffer<TData> & StorageFlag;
|
|
26
|
+
$: InferGPU<TData>;
|
|
27
|
+
/** Type-token, not available at runtime */
|
|
28
|
+
readonly [$repr]: Infer<TData>;
|
|
29
|
+
}
|
|
30
|
+
export interface TgpuReadonly<out TData extends BaseData> extends TgpuBufferBindingBase<TData> {
|
|
31
|
+
readonly resourceType: 'readonly';
|
|
32
|
+
readonly buffer: TgpuBuffer<TData> & StorageFlag;
|
|
33
|
+
readonly $: InferGPU<TData>;
|
|
34
|
+
/** Type-token, not available at runtime */
|
|
35
|
+
readonly [$repr]: Infer<TData>;
|
|
36
|
+
}
|
|
37
|
+
export interface TgpuUniform<out TData extends BaseData> extends TgpuBufferBindingBase<TData> {
|
|
38
|
+
readonly resourceType: 'uniform';
|
|
39
|
+
readonly buffer: TgpuBuffer<TData> & UniformFlag;
|
|
40
|
+
readonly $: InferGPU<TData>;
|
|
41
|
+
}
|
|
42
|
+
export type TgpuBufferBinding<TData extends BaseData> = TgpuMutable<TData> | TgpuReadonly<TData> | TgpuUniform<TData>;
|
|
43
|
+
export declare function isBufferBinding<TData extends BaseData>(value: unknown): value is TgpuBufferBinding<TData>;
|
|
44
|
+
export declare function isUniformBinding<TData extends BaseData>(value: unknown): value is TgpuUniform<TData>;
|
|
45
|
+
export declare function isMutableBinding<TData extends BaseData>(value: unknown): value is TgpuMutable<TData>;
|
|
46
|
+
export declare function isReadonlyBinding<TData extends BaseData>(value: unknown): value is TgpuReadonly<TData>;
|
|
47
|
+
/** @deprecated Use 'isBufferBinding' instead. */
|
|
48
|
+
export declare const isBufferShorthand: typeof isBufferBinding;
|
|
49
|
+
type BoundBuffer<TType, TData extends BaseData> = TgpuBuffer<TData> & (TType extends 'mutable' | 'readonly' ? StorageFlag : UniformFlag);
|
|
50
|
+
export declare class TgpuBufferBindingImpl<TType extends 'mutable' | 'readonly' | 'uniform', TData extends BaseData> {
|
|
51
|
+
/** Type-token, not available at runtime */
|
|
52
|
+
readonly [$repr]: Infer<TData>;
|
|
53
|
+
readonly [$soul]: TgpuBufferBindingSoul<BoundBuffer<TType, TData>>;
|
|
54
|
+
readonly [$getNameForward]: object;
|
|
55
|
+
readonly resourceType: TType;
|
|
56
|
+
[$internal]: true;
|
|
57
|
+
$: InferGPU<TData>;
|
|
58
|
+
readonly [$gpuValueOf]: InferGPU<TData>;
|
|
59
|
+
constructor(usage: TType, buffer: BoundBuffer<TType, TData>);
|
|
60
|
+
get buffer(): BoundBuffer<TType, TData>;
|
|
61
|
+
$name(label: string): this;
|
|
62
|
+
write(data: InferInput<TData>, options?: BufferWriteOptions): void;
|
|
63
|
+
/** @deprecated Use {@link patch} instead. */
|
|
64
|
+
writePartial(data: InferPartial<TData>): void;
|
|
65
|
+
patch(data: InferPatch<TData>): void;
|
|
66
|
+
read(): Promise<Infer<TData>>;
|
|
67
|
+
}
|
|
68
|
+
export declare function mutable<TData extends AnyWgslData>(buffer: TgpuBuffer<TData> & StorageFlag): TgpuMutable<TData>;
|
|
69
|
+
export declare function readonly<TData extends AnyWgslData>(buffer: TgpuBuffer<TData> & StorageFlag): TgpuReadonly<TData>;
|
|
70
|
+
export declare function uniform<TData extends AnyWgslData>(buffer: TgpuBuffer<TData> & UniformFlag): TgpuUniform<TData>;
|
|
71
|
+
export {};
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { schemaCallWrapper } from "../../data/schemaCallWrapper.js";
|
|
2
|
+
import { snip } from "../../data/snippet.js";
|
|
3
|
+
import { IllegalBufferAccessError } from "../../errors.js";
|
|
4
|
+
import { isInsideTgpuFn } from "../../execMode.js";
|
|
5
|
+
import {} from "../../extension.js";
|
|
6
|
+
import { getName, setName } from "../../shared/meta.js";
|
|
7
|
+
import { $getNameForward, $gpuValueOf, $internal, $repr, $soul } from "../../shared/symbols.js";
|
|
8
|
+
import { isUsableAsStorage, isUsableAsUniform } from "../../types.js";
|
|
9
|
+
import { makeDereferenceable } from "../../tgsl/makeDereferenceable.js";
|
|
10
|
+
import { makeResolvable } from "../../tgsl/makeResolvable.js";
|
|
11
|
+
import {} from "./buffer.js";
|
|
12
|
+
export function isBufferBinding(value) {
|
|
13
|
+
return value instanceof TgpuBufferBindingImpl;
|
|
14
|
+
}
|
|
15
|
+
export function isUniformBinding(value) {
|
|
16
|
+
return isBufferBinding(value) && value.resourceType === 'uniform';
|
|
17
|
+
}
|
|
18
|
+
export function isMutableBinding(value) {
|
|
19
|
+
return isBufferBinding(value) && value.resourceType === 'mutable';
|
|
20
|
+
}
|
|
21
|
+
export function isReadonlyBinding(value) {
|
|
22
|
+
return isBufferBinding(value) && value.resourceType === 'readonly';
|
|
23
|
+
}
|
|
24
|
+
// TODO(#2666) - remove this
|
|
25
|
+
/** @deprecated Use 'isBufferBinding' instead. */
|
|
26
|
+
export const isBufferShorthand = isBufferBinding;
|
|
27
|
+
export class TgpuBufferBindingImpl {
|
|
28
|
+
[$soul];
|
|
29
|
+
[$getNameForward];
|
|
30
|
+
resourceType;
|
|
31
|
+
static {
|
|
32
|
+
TgpuBufferBindingImpl.prototype[$internal] = true;
|
|
33
|
+
makeDereferenceable(makeResolvable(TgpuBufferBindingImpl.prototype, {
|
|
34
|
+
asString() {
|
|
35
|
+
return `${this.resourceType}BufferBinding:${getName(this) ?? '<unnamed>'}`;
|
|
36
|
+
},
|
|
37
|
+
resolve(ctx) {
|
|
38
|
+
const dataType = this.buffer.dataType;
|
|
39
|
+
const id = ctx.makeUniqueIdentifier(getName(this), 'global');
|
|
40
|
+
const { group, binding } = ctx.allocateFixedEntry(this.resourceType === 'uniform'
|
|
41
|
+
? { uniform: dataType }
|
|
42
|
+
: { storage: dataType, access: this.resourceType }, this.buffer);
|
|
43
|
+
return ctx.gen.declareGlobalVar({
|
|
44
|
+
group,
|
|
45
|
+
binding,
|
|
46
|
+
scope: this.resourceType,
|
|
47
|
+
id,
|
|
48
|
+
dataType,
|
|
49
|
+
init: undefined,
|
|
50
|
+
});
|
|
51
|
+
},
|
|
52
|
+
}), {
|
|
53
|
+
codegenMode: {
|
|
54
|
+
getBaseSnippet(trackingProxy) {
|
|
55
|
+
return snip(trackingProxy, this.buffer.dataType,
|
|
56
|
+
/* origin */ this.resourceType,
|
|
57
|
+
/* possibleSideEffects */ false);
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
simulateMode: {
|
|
61
|
+
get(state) {
|
|
62
|
+
if (!state.buffers.has(this.buffer)) {
|
|
63
|
+
// Not initialized yet
|
|
64
|
+
state.buffers.set(this.buffer, schemaCallWrapper(this.buffer.dataType, this.buffer.initial));
|
|
65
|
+
}
|
|
66
|
+
return state.buffers.get(this.buffer);
|
|
67
|
+
},
|
|
68
|
+
set(state, value) {
|
|
69
|
+
state.buffers.set(this.buffer, value);
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
normalMode: {
|
|
73
|
+
get() {
|
|
74
|
+
throw new IllegalBufferAccessError(isInsideTgpuFn()
|
|
75
|
+
? `Cannot access ${String(this.buffer)}. TypeGPU functions that depends on GPU resources need to be part of a compute dispatch, draw call or simulation`
|
|
76
|
+
: '.$ is inaccessible during normal JS execution. Try `.read()`');
|
|
77
|
+
},
|
|
78
|
+
set() {
|
|
79
|
+
throw new IllegalBufferAccessError(isInsideTgpuFn()
|
|
80
|
+
? `Cannot access ${String(this.buffer)}. TypeGPU functions that depends on GPU resources need to be part of a compute dispatch, draw call or simulation`
|
|
81
|
+
: '.$ is inaccessible during normal JS execution. Try `.write()`');
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
constructor(usage, buffer) {
|
|
87
|
+
this.resourceType = usage;
|
|
88
|
+
this[$getNameForward] = buffer;
|
|
89
|
+
this[$soul] = {
|
|
90
|
+
type: usage,
|
|
91
|
+
buffer,
|
|
92
|
+
label: undefined,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
get buffer() {
|
|
96
|
+
return this[$soul].buffer;
|
|
97
|
+
}
|
|
98
|
+
$name(label) {
|
|
99
|
+
setName(this, label);
|
|
100
|
+
return this;
|
|
101
|
+
}
|
|
102
|
+
write(data, options) {
|
|
103
|
+
this.buffer.write(data, options);
|
|
104
|
+
}
|
|
105
|
+
/** @deprecated Use {@link patch} instead. */
|
|
106
|
+
writePartial(data) {
|
|
107
|
+
this.buffer.writePartial(data);
|
|
108
|
+
}
|
|
109
|
+
patch(data) {
|
|
110
|
+
this.buffer.patch(data);
|
|
111
|
+
}
|
|
112
|
+
read() {
|
|
113
|
+
return this.buffer.read();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// --------------
|
|
117
|
+
// Constructors
|
|
118
|
+
// --------------
|
|
119
|
+
const mutableUsageMap = new WeakMap();
|
|
120
|
+
export function mutable(buffer) {
|
|
121
|
+
if (!isUsableAsStorage(buffer)) {
|
|
122
|
+
throw new Error(`Cannot call as('mutable') on ${buffer}, as it is not allowed to be used as storage. To allow it, call .$usage('storage') when creating the buffer.`);
|
|
123
|
+
}
|
|
124
|
+
let usage = mutableUsageMap.get(buffer);
|
|
125
|
+
if (!usage) {
|
|
126
|
+
usage = new TgpuBufferBindingImpl('mutable', buffer);
|
|
127
|
+
mutableUsageMap.set(buffer, usage);
|
|
128
|
+
}
|
|
129
|
+
return usage;
|
|
130
|
+
}
|
|
131
|
+
const readonlyUsageMap = new WeakMap();
|
|
132
|
+
export function readonly(buffer) {
|
|
133
|
+
if (!isUsableAsStorage(buffer)) {
|
|
134
|
+
throw new Error(`Cannot call as('readonly') on ${buffer}, as it is not allowed to be used as storage. To allow it, call .$usage('storage') when creating the buffer.`);
|
|
135
|
+
}
|
|
136
|
+
let usage = readonlyUsageMap.get(buffer);
|
|
137
|
+
if (!usage) {
|
|
138
|
+
usage = new TgpuBufferBindingImpl('readonly', buffer);
|
|
139
|
+
readonlyUsageMap.set(buffer, usage);
|
|
140
|
+
}
|
|
141
|
+
return usage;
|
|
142
|
+
}
|
|
143
|
+
const uniformUsageMap = new WeakMap();
|
|
144
|
+
export function uniform(buffer) {
|
|
145
|
+
if (!isUsableAsUniform(buffer)) {
|
|
146
|
+
throw new Error(`Cannot call as('uniform') on ${buffer}, as it is not allowed to be used as a uniform. To allow it, call .$usage('uniform') when creating the buffer.`);
|
|
147
|
+
}
|
|
148
|
+
let usage = uniformUsageMap.get(buffer);
|
|
149
|
+
if (!usage) {
|
|
150
|
+
usage = new TgpuBufferBindingImpl('uniform', buffer);
|
|
151
|
+
uniformUsageMap.set(buffer, usage);
|
|
152
|
+
}
|
|
153
|
+
return usage;
|
|
154
|
+
}
|
|
@@ -1,45 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
readonly [$gpuValueOf]: InferGPU<TData>;
|
|
16
|
-
/**
|
|
17
|
-
* @deprecated Use `.$` instead, works the same way.
|
|
18
|
-
*/
|
|
19
|
-
value: InferGPU<TData>;
|
|
20
|
-
$: InferGPU<TData>;
|
|
21
|
-
readonly [$internal]: {
|
|
22
|
-
readonly dataType: TData;
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
interface TgpuBufferUniform<TData extends BaseData> extends TgpuBufferUsage<TData, 'uniform'> {
|
|
26
|
-
/**
|
|
27
|
-
* @deprecated Use `.$` instead, works the same way.
|
|
28
|
-
*/
|
|
29
|
-
readonly value: InferGPU<TData>;
|
|
30
|
-
readonly $: InferGPU<TData>;
|
|
31
|
-
}
|
|
32
|
-
interface TgpuBufferReadonly<TData extends BaseData> extends TgpuBufferUsage<TData, 'readonly'> {
|
|
33
|
-
/**
|
|
34
|
-
* @deprecated Use `.$` instead, works the same way.
|
|
35
|
-
*/
|
|
36
|
-
readonly value: InferGPU<TData>;
|
|
37
|
-
readonly $: InferGPU<TData>;
|
|
38
|
-
}
|
|
39
|
-
interface TgpuFixedBufferUsage<TData extends BaseData> extends TgpuNamable {
|
|
40
|
-
readonly buffer: TgpuBuffer<TData>;
|
|
41
|
-
}
|
|
42
|
-
interface TgpuBufferMutable<TData extends BaseData> extends TgpuBufferUsage<TData, 'mutable'> {}
|
|
43
|
-
declare function isUsableAsUniform<T extends TgpuBuffer<BaseData>>(buffer: T): buffer is T & UniformFlag;
|
|
44
|
-
//#endregion
|
|
45
|
-
export { TgpuBufferMutable, TgpuBufferReadonly, TgpuBufferUniform, TgpuBufferUsage, TgpuFixedBufferUsage, isUsableAsUniform };
|
|
1
|
+
import { type BaseData } from '../../data/wgslTypes.ts';
|
|
2
|
+
import type { TgpuMutable, TgpuReadonly, TgpuUniform } from './bufferBinding.ts';
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated use TgpuUniform instead.
|
|
5
|
+
*/
|
|
6
|
+
export type TgpuBufferUniform<TData extends BaseData> = TgpuUniform<TData>;
|
|
7
|
+
/**
|
|
8
|
+
* @deprecated use TgpuReadonly instead.
|
|
9
|
+
*/
|
|
10
|
+
export type TgpuBufferReadonly<TData extends BaseData> = TgpuReadonly<TData>;
|
|
11
|
+
/**
|
|
12
|
+
* @deprecated use TgpuMutable instead.
|
|
13
|
+
*/
|
|
14
|
+
export type TgpuBufferMutable<TData extends BaseData> = TgpuMutable<TData>;
|
|
@@ -1,171 +1 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { getName, setName } from "../../shared/meta.js";
|
|
3
|
-
import { snip } from "../../data/snippet.js";
|
|
4
|
-
import { IllegalBufferAccessError } from "../../errors.js";
|
|
5
|
-
import { getExecMode, inCodegenMode, isInsideTgpuFn } from "../../execMode.js";
|
|
6
|
-
import { schemaCallWrapper } from "../../data/schemaCallWrapper.js";
|
|
7
|
-
import { assertExhaustive } from "../../shared/utilityTypes.js";
|
|
8
|
-
import { valueProxyHandler } from "../valueProxyUtils.js";
|
|
9
|
-
import { isUsableAsStorage } from "../../extension.js";
|
|
10
|
-
|
|
11
|
-
//#region src/core/buffer/bufferUsage.ts
|
|
12
|
-
function isUsableAsUniform(buffer) {
|
|
13
|
-
return !!buffer.usableAsUniform;
|
|
14
|
-
}
|
|
15
|
-
var TgpuFixedBufferImpl = class {
|
|
16
|
-
resourceType = "buffer-usage";
|
|
17
|
-
usage;
|
|
18
|
-
buffer;
|
|
19
|
-
[$internal];
|
|
20
|
-
[$getNameForward];
|
|
21
|
-
constructor(usage, buffer) {
|
|
22
|
-
this.usage = usage;
|
|
23
|
-
this.buffer = buffer;
|
|
24
|
-
this[$internal] = { dataType: buffer.dataType };
|
|
25
|
-
this[$getNameForward] = buffer;
|
|
26
|
-
}
|
|
27
|
-
$name(label) {
|
|
28
|
-
setName(this, label);
|
|
29
|
-
return this;
|
|
30
|
-
}
|
|
31
|
-
[$resolve](ctx) {
|
|
32
|
-
const dataType = this.buffer.dataType;
|
|
33
|
-
const id = ctx.makeUniqueIdentifier(getName(this), "global");
|
|
34
|
-
const { group, binding } = ctx.allocateFixedEntry(this.usage === "uniform" ? { uniform: dataType } : {
|
|
35
|
-
storage: dataType,
|
|
36
|
-
access: this.usage
|
|
37
|
-
}, this.buffer);
|
|
38
|
-
return ctx.gen.declareGlobalVar({
|
|
39
|
-
group,
|
|
40
|
-
binding,
|
|
41
|
-
scope: this.usage,
|
|
42
|
-
id,
|
|
43
|
-
dataType,
|
|
44
|
-
init: void 0
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
toString() {
|
|
48
|
-
return `${this.usage}:${getName(this) ?? "<unnamed>"}`;
|
|
49
|
-
}
|
|
50
|
-
get [$gpuValueOf]() {
|
|
51
|
-
const dataType = this.buffer.dataType;
|
|
52
|
-
const usage = this.usage;
|
|
53
|
-
return new Proxy({
|
|
54
|
-
[$internal]: true,
|
|
55
|
-
get [$ownSnippet]() {
|
|
56
|
-
return snip(this, dataType, usage);
|
|
57
|
-
},
|
|
58
|
-
[$resolve]: (ctx) => ctx.resolve(this),
|
|
59
|
-
toString: () => `${this.usage}:${getName(this) ?? "<unnamed>"}.$`
|
|
60
|
-
}, valueProxyHandler);
|
|
61
|
-
}
|
|
62
|
-
get $() {
|
|
63
|
-
const mode = getExecMode();
|
|
64
|
-
const insideTgpuFn = isInsideTgpuFn();
|
|
65
|
-
if (mode.type === "normal") throw new IllegalBufferAccessError(insideTgpuFn ? `Cannot access ${String(this.buffer)}. TypeGPU functions that depends on GPU resources need to be part of a compute dispatch, draw call or simulation` : ".$ is inaccessible during normal JS execution. Try `.read()`");
|
|
66
|
-
if (mode.type === "codegen") return this[$gpuValueOf];
|
|
67
|
-
if (mode.type === "simulate") {
|
|
68
|
-
if (!mode.buffers.has(this.buffer)) mode.buffers.set(this.buffer, schemaCallWrapper(this.buffer.dataType, this.buffer.initial));
|
|
69
|
-
return mode.buffers.get(this.buffer);
|
|
70
|
-
}
|
|
71
|
-
return assertExhaustive(mode, "bufferUsage.ts#TgpuFixedBufferImpl/$");
|
|
72
|
-
}
|
|
73
|
-
get value() {
|
|
74
|
-
return this.$;
|
|
75
|
-
}
|
|
76
|
-
set $(value) {
|
|
77
|
-
const mode = getExecMode();
|
|
78
|
-
const insideTgpuFn = isInsideTgpuFn();
|
|
79
|
-
if (mode.type === "normal") throw new IllegalBufferAccessError(insideTgpuFn ? `Cannot access ${String(this.buffer)}. TypeGPU functions that depends on GPU resources need to be part of a compute dispatch, draw call or simulation` : ".$ is inaccessible during normal JS execution. Try `.write()`");
|
|
80
|
-
if (mode.type === "codegen") throw new Error("Unreachable bufferUsage.ts#TgpuFixedBufferImpl/$");
|
|
81
|
-
if (mode.type === "simulate") {
|
|
82
|
-
mode.buffers.set(this.buffer, value);
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
assertExhaustive(mode, "bufferUsage.ts#TgpuFixedBufferImpl/$");
|
|
86
|
-
}
|
|
87
|
-
set value(value) {
|
|
88
|
-
this.$ = value;
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
var TgpuLaidOutBufferImpl = class {
|
|
92
|
-
[$internal];
|
|
93
|
-
resourceType = "buffer-usage";
|
|
94
|
-
usage;
|
|
95
|
-
dataType;
|
|
96
|
-
#membership;
|
|
97
|
-
constructor(usage, dataType, membership) {
|
|
98
|
-
this[$internal] = { dataType };
|
|
99
|
-
this.usage = usage;
|
|
100
|
-
this.dataType = dataType;
|
|
101
|
-
this.#membership = membership;
|
|
102
|
-
setName(this, membership.key);
|
|
103
|
-
}
|
|
104
|
-
[$resolve](ctx) {
|
|
105
|
-
const id = ctx.makeUniqueIdentifier(getName(this), "global");
|
|
106
|
-
const group = ctx.allocateLayoutEntry(this.#membership.layout);
|
|
107
|
-
return ctx.gen.declareGlobalVar({
|
|
108
|
-
group,
|
|
109
|
-
binding: this.#membership.idx,
|
|
110
|
-
scope: this.usage,
|
|
111
|
-
id,
|
|
112
|
-
dataType: this.dataType,
|
|
113
|
-
init: void 0
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
toString() {
|
|
117
|
-
return `${this.usage}:${getName(this) ?? "<unnamed>"}`;
|
|
118
|
-
}
|
|
119
|
-
get [$gpuValueOf]() {
|
|
120
|
-
const schema = this.dataType;
|
|
121
|
-
const usage = this.usage;
|
|
122
|
-
return new Proxy({
|
|
123
|
-
[$internal]: true,
|
|
124
|
-
get [$ownSnippet]() {
|
|
125
|
-
return snip(this, schema, usage);
|
|
126
|
-
},
|
|
127
|
-
[$resolve]: (ctx) => ctx.resolve(this),
|
|
128
|
-
toString: () => `${this.usage}:${getName(this) ?? "<unnamed>"}.$`
|
|
129
|
-
}, valueProxyHandler);
|
|
130
|
-
}
|
|
131
|
-
get $() {
|
|
132
|
-
if (inCodegenMode()) return this[$gpuValueOf];
|
|
133
|
-
throw new Error("Direct access to buffer values is possible only as part of a compute dispatch or draw call. Try .read() or .write() instead");
|
|
134
|
-
}
|
|
135
|
-
get value() {
|
|
136
|
-
return this.$;
|
|
137
|
-
}
|
|
138
|
-
};
|
|
139
|
-
const mutableUsageMap = /* @__PURE__ */ new WeakMap();
|
|
140
|
-
function mutable(buffer) {
|
|
141
|
-
if (!isUsableAsStorage(buffer)) throw new Error(`Cannot call as('mutable') on ${buffer}, as it is not allowed to be used as storage. To allow it, call .$usage('storage') when creating the buffer.`);
|
|
142
|
-
let usage = mutableUsageMap.get(buffer);
|
|
143
|
-
if (!usage) {
|
|
144
|
-
usage = new TgpuFixedBufferImpl("mutable", buffer);
|
|
145
|
-
mutableUsageMap.set(buffer, usage);
|
|
146
|
-
}
|
|
147
|
-
return usage;
|
|
148
|
-
}
|
|
149
|
-
const readonlyUsageMap = /* @__PURE__ */ new WeakMap();
|
|
150
|
-
function readonly(buffer) {
|
|
151
|
-
if (!isUsableAsStorage(buffer)) throw new Error(`Cannot call as('readonly') on ${buffer}, as it is not allowed to be used as storage. To allow it, call .$usage('storage') when creating the buffer.`);
|
|
152
|
-
let usage = readonlyUsageMap.get(buffer);
|
|
153
|
-
if (!usage) {
|
|
154
|
-
usage = new TgpuFixedBufferImpl("readonly", buffer);
|
|
155
|
-
readonlyUsageMap.set(buffer, usage);
|
|
156
|
-
}
|
|
157
|
-
return usage;
|
|
158
|
-
}
|
|
159
|
-
const uniformUsageMap = /* @__PURE__ */ new WeakMap();
|
|
160
|
-
function uniform(buffer) {
|
|
161
|
-
if (!isUsableAsUniform(buffer)) throw new Error(`Cannot call as('uniform') on ${buffer}, as it is not allowed to be used as a uniform. To allow it, call .$usage('uniform') when creating the buffer.`);
|
|
162
|
-
let usage = uniformUsageMap.get(buffer);
|
|
163
|
-
if (!usage) {
|
|
164
|
-
usage = new TgpuFixedBufferImpl("uniform", buffer);
|
|
165
|
-
uniformUsageMap.set(buffer, usage);
|
|
166
|
-
}
|
|
167
|
-
return usage;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
//#endregion
|
|
171
|
-
export { TgpuLaidOutBufferImpl, isUsableAsUniform, mutable, readonly, uniform };
|
|
1
|
+
import {} from "../../data/wgslTypes.js";
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type BaseData } from '../../data/wgslTypes.ts';
|
|
2
|
+
import type { Infer, InferGPU } from '../../shared/repr.ts';
|
|
3
|
+
import { $gpuValueOf, $internal, $repr, $resolve } from '../../shared/symbols.ts';
|
|
4
|
+
import type { LayoutMembership } from '../../tgpuBindGroupLayout.ts';
|
|
5
|
+
import type { BindableBufferUsage, SelfResolvable } from '../../types.ts';
|
|
6
|
+
/**
|
|
7
|
+
* A class representing a buffer accessed via a BindGroupLayout.
|
|
8
|
+
* Compared to a regular buffer, it's missing read/write methods,
|
|
9
|
+
* but it holds a membership.
|
|
10
|
+
*/
|
|
11
|
+
export declare class TgpuLaidOutBufferImpl<TData extends BaseData, TUsage extends BindableBufferUsage> implements SelfResolvable {
|
|
12
|
+
#private;
|
|
13
|
+
/** Type-token, not available at runtime */
|
|
14
|
+
readonly [$repr]: Infer<TData>;
|
|
15
|
+
readonly [$internal]: {
|
|
16
|
+
readonly dataType: TData;
|
|
17
|
+
};
|
|
18
|
+
readonly usage: TUsage;
|
|
19
|
+
readonly dataType: TData;
|
|
20
|
+
[$resolve]: SelfResolvable[typeof $resolve];
|
|
21
|
+
resourceType: 'laid-out-buffer';
|
|
22
|
+
$: InferGPU<TData>;
|
|
23
|
+
readonly [$gpuValueOf]: InferGPU<TData>;
|
|
24
|
+
constructor(usage: TUsage, dataType: TData, membership: LayoutMembership);
|
|
25
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { snip } from "../../data/snippet.js";
|
|
2
|
+
import {} from "../../data/wgslTypes.js";
|
|
3
|
+
import { makeDereferenceable } from "../../tgsl/makeDereferenceable.js";
|
|
4
|
+
import { makeResolvable } from "../../tgsl/makeResolvable.js";
|
|
5
|
+
import { getName, setName } from "../../shared/meta.js";
|
|
6
|
+
import { $gpuValueOf, $internal, $repr, $resolve } from "../../shared/symbols.js";
|
|
7
|
+
/**
|
|
8
|
+
* A class representing a buffer accessed via a BindGroupLayout.
|
|
9
|
+
* Compared to a regular buffer, it's missing read/write methods,
|
|
10
|
+
* but it holds a membership.
|
|
11
|
+
*/
|
|
12
|
+
export class TgpuLaidOutBufferImpl {
|
|
13
|
+
[$internal];
|
|
14
|
+
usage;
|
|
15
|
+
dataType;
|
|
16
|
+
#membership;
|
|
17
|
+
static {
|
|
18
|
+
TgpuLaidOutBufferImpl.prototype.resourceType = 'laid-out-buffer';
|
|
19
|
+
makeDereferenceable(makeResolvable(TgpuLaidOutBufferImpl.prototype, {
|
|
20
|
+
asString() {
|
|
21
|
+
return `${this.usage}:${getName(this) ?? '<unnamed>'}`;
|
|
22
|
+
},
|
|
23
|
+
resolve(ctx) {
|
|
24
|
+
const id = ctx.makeUniqueIdentifier(getName(this), 'global');
|
|
25
|
+
const group = ctx.allocateLayoutEntry(this.#membership.layout);
|
|
26
|
+
return ctx.gen.declareGlobalVar({
|
|
27
|
+
group,
|
|
28
|
+
binding: this.#membership.idx,
|
|
29
|
+
scope: this.usage,
|
|
30
|
+
id,
|
|
31
|
+
dataType: this.dataType,
|
|
32
|
+
init: undefined,
|
|
33
|
+
});
|
|
34
|
+
},
|
|
35
|
+
}), {
|
|
36
|
+
codegenMode: {
|
|
37
|
+
getBaseSnippet(trackingProxy) {
|
|
38
|
+
return snip(trackingProxy, this.dataType, this.usage, /* possibleSideEffects */ false);
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
normalMode: {
|
|
42
|
+
get() {
|
|
43
|
+
throw new Error('Direct access to buffer values is possible only as part of a compute dispatch or draw call. Try .read() or .write() instead');
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
constructor(usage, dataType, membership) {
|
|
49
|
+
this[$internal] = { dataType };
|
|
50
|
+
this.usage = usage;
|
|
51
|
+
this.dataType = dataType;
|
|
52
|
+
this.#membership = membership;
|
|
53
|
+
setName(this, membership.key);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import type { WgslTexture, WgslTextureDepth2d, WgslTextureDepthMultisampled2d } from '../../data/texture.ts';
|
|
2
|
+
import { $internal } from '../../shared/symbols.ts';
|
|
3
|
+
import { type TgpuQuerySet } from '../querySet/querySet.ts';
|
|
4
|
+
import type { ExperimentalTgpuRoot } from '../root/rootTypes.ts';
|
|
5
|
+
import { type TextureInternals, type TgpuTextureRenderView, type TgpuTextureView } from '../texture/texture.ts';
|
|
6
|
+
import type { RenderFlag } from '../texture/usageExtension.ts';
|
|
7
|
+
interface ColorTextureConstraint {
|
|
8
|
+
readonly [$internal]: TextureInternals;
|
|
9
|
+
readonly resourceType: 'texture';
|
|
10
|
+
readonly props: {
|
|
11
|
+
format: GPUTextureFormat;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export interface ColorAttachment {
|
|
15
|
+
/**
|
|
16
|
+
* A {@link GPUTextureView} describing the texture subresource that will be output to for this
|
|
17
|
+
* color attachment.
|
|
18
|
+
*/
|
|
19
|
+
view: (ColorTextureConstraint & RenderFlag) | GPUTextureView | TgpuTextureView<WgslTexture> | TgpuTextureRenderView | GPUCanvasContext;
|
|
20
|
+
/**
|
|
21
|
+
* Indicates the depth slice index of {@link GPUTextureViewDimension#"3d"} {@link GPURenderPassColorAttachment#view}
|
|
22
|
+
* that will be output to for this color attachment.
|
|
23
|
+
*/
|
|
24
|
+
depthSlice?: GPUIntegerCoordinate;
|
|
25
|
+
/**
|
|
26
|
+
* A {@link GPUTextureView} describing the texture subresource that will receive the resolved
|
|
27
|
+
* output for this color attachment if {@link GPURenderPassColorAttachment#view} is
|
|
28
|
+
* multisampled.
|
|
29
|
+
*/
|
|
30
|
+
resolveTarget?: (ColorTextureConstraint & RenderFlag) | GPUTextureView | TgpuTextureView<WgslTexture> | TgpuTextureRenderView | GPUCanvasContext;
|
|
31
|
+
/**
|
|
32
|
+
* Indicates the value to clear {@link GPURenderPassColorAttachment#view} to prior to executing the
|
|
33
|
+
* render pass. If not provided, defaults to `{r: 0, g: 0, b: 0, a: 0}`. Ignored
|
|
34
|
+
* if {@link GPURenderPassColorAttachment#loadOp} is not {@link GPULoadOp#"clear"}.
|
|
35
|
+
* The components of {@link GPURenderPassColorAttachment#clearValue} are all double values.
|
|
36
|
+
* They are converted to a texel value of texture format matching the render attachment.
|
|
37
|
+
* If conversion fails, a validation error is generated.
|
|
38
|
+
*/
|
|
39
|
+
clearValue?: readonly [number, number, number, number] | GPUColor;
|
|
40
|
+
/**
|
|
41
|
+
* Indicates the load operation to perform on {@link GPURenderPassColorAttachment#view} prior to
|
|
42
|
+
* executing the render pass.
|
|
43
|
+
* Note: It is recommended to prefer clearing; see {@link GPULoadOp#"clear"} for details.
|
|
44
|
+
*
|
|
45
|
+
* @default 'clear'
|
|
46
|
+
*/
|
|
47
|
+
loadOp?: GPULoadOp | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* The store operation to perform on {@link GPURenderPassColorAttachment#view}
|
|
50
|
+
* after executing the render pass.
|
|
51
|
+
*
|
|
52
|
+
* @default 'store'
|
|
53
|
+
*/
|
|
54
|
+
storeOp?: GPUStoreOp | undefined;
|
|
55
|
+
}
|
|
56
|
+
export type DepthStencilFormat = 'stencil8' | 'depth16unorm' | 'depth24plus' | 'depth24plus-stencil8' | 'depth32float' | 'depth32float-stencil8';
|
|
57
|
+
interface DepthStencilTextureConstraint {
|
|
58
|
+
readonly [$internal]: TextureInternals;
|
|
59
|
+
readonly resourceType: 'texture';
|
|
60
|
+
readonly props: {
|
|
61
|
+
format: DepthStencilFormat;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export interface DepthStencilAttachment {
|
|
65
|
+
/**
|
|
66
|
+
* The texture subresource that will be output to and read from for this
|
|
67
|
+
* depth/stencil attachment.
|
|
68
|
+
*/
|
|
69
|
+
view: (DepthStencilTextureConstraint & RenderFlag) | TgpuTextureView<WgslTextureDepth2d | WgslTextureDepthMultisampled2d> | TgpuTextureRenderView | GPUTextureView;
|
|
70
|
+
/**
|
|
71
|
+
* Indicates the value to clear {@link GPURenderPassDepthStencilAttachment#view}'s depth component
|
|
72
|
+
* to prior to executing the render pass. Ignored if {@link GPURenderPassDepthStencilAttachment#depthLoadOp}
|
|
73
|
+
* is not {@link GPULoadOp#"clear"}. Must be between 0.0 and 1.0, inclusive (unless unrestricted depth is enabled).
|
|
74
|
+
*/
|
|
75
|
+
depthClearValue?: number;
|
|
76
|
+
/**
|
|
77
|
+
* Indicates the load operation to perform on {@link GPURenderPassDepthStencilAttachment#view}'s
|
|
78
|
+
* depth component prior to executing the render pass.
|
|
79
|
+
* Note: It is recommended to prefer clearing; see {@link GPULoadOp#"clear"} for details.
|
|
80
|
+
*/
|
|
81
|
+
depthLoadOp?: GPULoadOp;
|
|
82
|
+
/**
|
|
83
|
+
* The store operation to perform on {@link GPURenderPassDepthStencilAttachment#view}'s
|
|
84
|
+
* depth component after executing the render pass.
|
|
85
|
+
*/
|
|
86
|
+
depthStoreOp?: GPUStoreOp;
|
|
87
|
+
/**
|
|
88
|
+
* Indicates that the depth component of {@link GPURenderPassDepthStencilAttachment#view}
|
|
89
|
+
* is read only.
|
|
90
|
+
*/
|
|
91
|
+
depthReadOnly?: boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Indicates the value to clear {@link GPURenderPassDepthStencilAttachment#view}'s stencil component
|
|
94
|
+
* to prior to executing the render pass. Ignored if {@link GPURenderPassDepthStencilAttachment#stencilLoadOp}
|
|
95
|
+
* is not {@link GPULoadOp#"clear"}.
|
|
96
|
+
* The value will be converted to the type of the stencil aspect of `view` by taking the same
|
|
97
|
+
* number of LSBs as the number of bits in the stencil aspect of one texel of `view`.
|
|
98
|
+
*/
|
|
99
|
+
stencilClearValue?: GPUStencilValue;
|
|
100
|
+
/**
|
|
101
|
+
* Indicates the load operation to perform on {@link GPURenderPassDepthStencilAttachment#view}'s
|
|
102
|
+
* stencil component prior to executing the render pass.
|
|
103
|
+
* Note: It is recommended to prefer clearing; see {@link GPULoadOp#"clear"} for details.
|
|
104
|
+
*/
|
|
105
|
+
stencilLoadOp?: GPULoadOp;
|
|
106
|
+
/**
|
|
107
|
+
* The store operation to perform on {@link GPURenderPassDepthStencilAttachment#view}'s
|
|
108
|
+
* stencil component after executing the render pass.
|
|
109
|
+
*/
|
|
110
|
+
stencilStoreOp?: GPUStoreOp;
|
|
111
|
+
/**
|
|
112
|
+
* Indicates that the stencil component of {@link GPURenderPassDepthStencilAttachment#view}
|
|
113
|
+
* is read only.
|
|
114
|
+
*/
|
|
115
|
+
stencilReadOnly?: boolean;
|
|
116
|
+
}
|
|
117
|
+
export type AnyAttachmentView = ColorAttachment['view'] | NonNullable<ColorAttachment['resolveTarget']> | DepthStencilAttachment['view'];
|
|
118
|
+
export declare function unwrapAttachmentView(root: ExperimentalTgpuRoot, view: AnyAttachmentView): GPUTextureView;
|
|
119
|
+
export interface TgpuPassTimestampWrites {
|
|
120
|
+
querySet: TgpuQuerySet<'timestamp'> | GPUQuerySet;
|
|
121
|
+
beginningOfPassWriteIndex?: number | undefined;
|
|
122
|
+
endOfPassWriteIndex?: number | undefined;
|
|
123
|
+
}
|
|
124
|
+
export declare function unwrapTimestampWrites(root: ExperimentalTgpuRoot, timestampWrites: TgpuPassTimestampWrites): GPURenderPassTimestampWrites;
|
|
125
|
+
export {};
|