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/texture.js
CHANGED
|
@@ -1,208 +1,246 @@
|
|
|
1
1
|
import { $internal, $repr } from "../shared/symbols.js";
|
|
2
2
|
import { f32 } from "./numeric.js";
|
|
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
|
-
|
|
3
|
+
export function textureDescriptorToSchema(desc) {
|
|
4
|
+
if ('multisampled' in desc) {
|
|
5
|
+
if (desc.multisampled) {
|
|
6
|
+
if (desc.dimension === '2d') {
|
|
7
|
+
return textureMultisampled2d(desc.sampleType);
|
|
8
|
+
}
|
|
9
|
+
throw new Error(`Multisampled textures only support '2d' dimension, got '${desc.dimension}'`);
|
|
10
|
+
}
|
|
11
|
+
switch (desc.dimension) {
|
|
12
|
+
case '1d':
|
|
13
|
+
return texture1d(desc.sampleType);
|
|
14
|
+
case '2d':
|
|
15
|
+
return texture2d(desc.sampleType);
|
|
16
|
+
case '2d-array':
|
|
17
|
+
return texture2dArray(desc.sampleType);
|
|
18
|
+
case '3d':
|
|
19
|
+
return texture3d(desc.sampleType);
|
|
20
|
+
case 'cube':
|
|
21
|
+
return textureCube(desc.sampleType);
|
|
22
|
+
case 'cube-array':
|
|
23
|
+
return textureCubeArray(desc.sampleType);
|
|
24
|
+
default:
|
|
25
|
+
throw new Error(
|
|
26
|
+
// @ts-expect-error
|
|
27
|
+
`Unsupported texture dimension: '${desc.dimension}'`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (!('access' in desc)) {
|
|
31
|
+
throw new Error('Descriptor is neither a sampled nor a storage texture');
|
|
32
|
+
}
|
|
33
|
+
switch (desc.dimension) {
|
|
34
|
+
case '1d':
|
|
35
|
+
return textureStorage1d(desc.format, desc.access);
|
|
36
|
+
case '2d':
|
|
37
|
+
return textureStorage2d(desc.format, desc.access);
|
|
38
|
+
case '2d-array':
|
|
39
|
+
return textureStorage2dArray(desc.format, desc.access);
|
|
40
|
+
case '3d':
|
|
41
|
+
return textureStorage3d(desc.format, desc.access);
|
|
42
|
+
default:
|
|
43
|
+
throw new Error(
|
|
44
|
+
// @ts-expect-error
|
|
45
|
+
`Unsupported storage texture dimension: '${desc.dimension}'`);
|
|
46
|
+
}
|
|
29
47
|
}
|
|
30
48
|
function createTexture(type, props) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
49
|
+
const isDepth = type.startsWith('texture_depth');
|
|
50
|
+
const sampleTypes = isDepth
|
|
51
|
+
? ['depth', 'float', 'unfilterable-float']
|
|
52
|
+
: props.sampleType.type === 'i32'
|
|
53
|
+
? ['sint']
|
|
54
|
+
: props.sampleType.type === 'u32'
|
|
55
|
+
? ['uint']
|
|
56
|
+
: ['float', 'unfilterable-float'];
|
|
57
|
+
return {
|
|
58
|
+
[$internal]: {},
|
|
59
|
+
[$repr]: undefined,
|
|
60
|
+
type,
|
|
61
|
+
bindingSampleType: sampleTypes,
|
|
62
|
+
...props,
|
|
63
|
+
};
|
|
43
64
|
}
|
|
44
65
|
function createStorageTexture(type, props) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
const textureCache =
|
|
53
|
-
const accessModeMap = {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
66
|
+
return {
|
|
67
|
+
[$internal]: {},
|
|
68
|
+
[$repr]: undefined,
|
|
69
|
+
type,
|
|
70
|
+
...props,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
const textureCache = new Map();
|
|
74
|
+
export const accessModeMap = {
|
|
75
|
+
'write-only': 'write',
|
|
76
|
+
'read-only': 'read',
|
|
77
|
+
'read-write': 'read_write',
|
|
57
78
|
};
|
|
58
79
|
function getOrCreate(key, factory) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
function texture1d(sampleType) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
function
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
}
|
|
189
|
-
function
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
}
|
|
197
|
-
function
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
80
|
+
let cached = textureCache.get(key);
|
|
81
|
+
if (!cached) {
|
|
82
|
+
cached = factory();
|
|
83
|
+
textureCache.set(key, cached);
|
|
84
|
+
}
|
|
85
|
+
return cached;
|
|
86
|
+
}
|
|
87
|
+
export function texture1d(sampleType) {
|
|
88
|
+
const actualSampleType = (sampleType || f32);
|
|
89
|
+
const key = `texture_1d<${actualSampleType.type}>`;
|
|
90
|
+
return getOrCreate(key, () => createTexture('texture_1d', {
|
|
91
|
+
dimension: '1d',
|
|
92
|
+
sampleType: actualSampleType,
|
|
93
|
+
multisampled: false,
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
export function texture2d(sampleType) {
|
|
97
|
+
const actualSampleType = (sampleType || f32);
|
|
98
|
+
const key = `texture_2d<${actualSampleType.type}>`;
|
|
99
|
+
return getOrCreate(key, () => createTexture('texture_2d', {
|
|
100
|
+
dimension: '2d',
|
|
101
|
+
sampleType: actualSampleType,
|
|
102
|
+
multisampled: false,
|
|
103
|
+
}));
|
|
104
|
+
}
|
|
105
|
+
export function textureMultisampled2d(sampleType) {
|
|
106
|
+
const actualSampleType = (sampleType || f32);
|
|
107
|
+
const key = `texture_multisampled_2d<${actualSampleType.type}>`;
|
|
108
|
+
return getOrCreate(key, () => createTexture('texture_multisampled_2d', {
|
|
109
|
+
dimension: '2d',
|
|
110
|
+
sampleType: actualSampleType,
|
|
111
|
+
multisampled: true,
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
114
|
+
export function texture2dArray(sampleType) {
|
|
115
|
+
const actualSampleType = (sampleType || f32);
|
|
116
|
+
const key = `texture_2d_array<${actualSampleType.type}>`;
|
|
117
|
+
return getOrCreate(key, () => createTexture('texture_2d_array', {
|
|
118
|
+
dimension: '2d-array',
|
|
119
|
+
sampleType: actualSampleType,
|
|
120
|
+
multisampled: false,
|
|
121
|
+
}));
|
|
122
|
+
}
|
|
123
|
+
export function textureCube(sampleType) {
|
|
124
|
+
const actualSampleType = (sampleType || f32);
|
|
125
|
+
const key = `texture_cube<${actualSampleType.type}>`;
|
|
126
|
+
return getOrCreate(key, () => createTexture('texture_cube', {
|
|
127
|
+
dimension: 'cube',
|
|
128
|
+
sampleType: actualSampleType,
|
|
129
|
+
multisampled: false,
|
|
130
|
+
}));
|
|
131
|
+
}
|
|
132
|
+
export function textureCubeArray(sampleType) {
|
|
133
|
+
const actualSampleType = (sampleType || f32);
|
|
134
|
+
const key = `texture_cube_array<${actualSampleType.type}>`;
|
|
135
|
+
return getOrCreate(key, () => createTexture('texture_cube_array', {
|
|
136
|
+
dimension: 'cube-array',
|
|
137
|
+
sampleType: actualSampleType,
|
|
138
|
+
multisampled: false,
|
|
139
|
+
}));
|
|
140
|
+
}
|
|
141
|
+
export function texture3d(sampleType) {
|
|
142
|
+
const actualSampleType = (sampleType || f32);
|
|
143
|
+
const key = `texture_3d<${actualSampleType.type}>`;
|
|
144
|
+
return getOrCreate(key, () => createTexture('texture_3d', {
|
|
145
|
+
dimension: '3d',
|
|
146
|
+
sampleType: actualSampleType,
|
|
147
|
+
multisampled: false,
|
|
148
|
+
}));
|
|
149
|
+
}
|
|
150
|
+
export function textureStorage1d(format, access) {
|
|
151
|
+
const actualAccess = (access || 'write-only');
|
|
152
|
+
const key = `texture_storage_1d<${format}, ${accessModeMap[actualAccess]}>`;
|
|
153
|
+
return getOrCreate(key, () => createStorageTexture('texture_storage_1d', {
|
|
154
|
+
dimension: '1d',
|
|
155
|
+
format,
|
|
156
|
+
access: actualAccess,
|
|
157
|
+
}));
|
|
158
|
+
}
|
|
159
|
+
export function textureStorage2d(format, access) {
|
|
160
|
+
const actualAccess = (access || 'write-only');
|
|
161
|
+
const key = `texture_storage_2d<${format}, ${accessModeMap[actualAccess]}>`;
|
|
162
|
+
return getOrCreate(key, () => createStorageTexture('texture_storage_2d', {
|
|
163
|
+
dimension: '2d',
|
|
164
|
+
format,
|
|
165
|
+
access: actualAccess,
|
|
166
|
+
}));
|
|
167
|
+
}
|
|
168
|
+
export function textureStorage2dArray(format, access) {
|
|
169
|
+
const actualAccess = (access || 'write-only');
|
|
170
|
+
const key = `texture_storage_2d_array<${format}, ${accessModeMap[actualAccess]}>`;
|
|
171
|
+
return getOrCreate(key, () => createStorageTexture('texture_storage_2d_array', {
|
|
172
|
+
dimension: '2d-array',
|
|
173
|
+
format,
|
|
174
|
+
access: actualAccess,
|
|
175
|
+
}));
|
|
176
|
+
}
|
|
177
|
+
export function textureStorage3d(format, access) {
|
|
178
|
+
const actualAccess = (access || 'write-only');
|
|
179
|
+
const key = `texture_storage_3d<${format}, ${accessModeMap[actualAccess]}>`;
|
|
180
|
+
return getOrCreate(key, () => createStorageTexture('texture_storage_3d', {
|
|
181
|
+
dimension: '3d',
|
|
182
|
+
format,
|
|
183
|
+
access: actualAccess,
|
|
184
|
+
}));
|
|
185
|
+
}
|
|
186
|
+
export function textureDepth2d() {
|
|
187
|
+
const key = 'texture_depth_2d';
|
|
188
|
+
return getOrCreate(key, () => createTexture('texture_depth_2d', {
|
|
189
|
+
dimension: '2d',
|
|
190
|
+
sampleType: f32,
|
|
191
|
+
multisampled: false,
|
|
192
|
+
}));
|
|
193
|
+
}
|
|
194
|
+
export function textureDepthMultisampled2d() {
|
|
195
|
+
const key = 'texture_depth_multisampled_2d';
|
|
196
|
+
return getOrCreate(key, () => createTexture('texture_depth_multisampled_2d', {
|
|
197
|
+
dimension: '2d',
|
|
198
|
+
sampleType: f32,
|
|
199
|
+
multisampled: true,
|
|
200
|
+
}));
|
|
201
|
+
}
|
|
202
|
+
export function textureDepth2dArray() {
|
|
203
|
+
const key = 'texture_depth_2d_array';
|
|
204
|
+
return getOrCreate(key, () => createTexture('texture_depth_2d_array', {
|
|
205
|
+
dimension: '2d-array',
|
|
206
|
+
sampleType: f32,
|
|
207
|
+
multisampled: false,
|
|
208
|
+
}));
|
|
209
|
+
}
|
|
210
|
+
export function textureDepthCube() {
|
|
211
|
+
const key = 'texture_depth_cube';
|
|
212
|
+
return getOrCreate(key, () => createTexture('texture_depth_cube', {
|
|
213
|
+
dimension: 'cube',
|
|
214
|
+
sampleType: f32,
|
|
215
|
+
multisampled: false,
|
|
216
|
+
}));
|
|
217
|
+
}
|
|
218
|
+
export function textureDepthCubeArray() {
|
|
219
|
+
const key = 'texture_depth_cube_array';
|
|
220
|
+
return getOrCreate(key, () => createTexture('texture_depth_cube_array', {
|
|
221
|
+
dimension: 'cube-array',
|
|
222
|
+
sampleType: f32,
|
|
223
|
+
multisampled: false,
|
|
224
|
+
}));
|
|
225
|
+
}
|
|
226
|
+
export function textureExternal() {
|
|
227
|
+
const key = 'texture_external';
|
|
228
|
+
return getOrCreate(key, () => ({
|
|
229
|
+
[$internal]: {},
|
|
230
|
+
[$repr]: undefined,
|
|
231
|
+
type: 'texture_external',
|
|
232
|
+
dimension: '2d',
|
|
233
|
+
}));
|
|
234
|
+
}
|
|
235
|
+
export function isWgslTexture(value) {
|
|
236
|
+
return (!!value[$internal] && typeof value.multisampled === 'boolean');
|
|
237
|
+
}
|
|
238
|
+
export function isWgslStorageTexture(value) {
|
|
239
|
+
return (!!value[$internal] &&
|
|
240
|
+
typeof value.format === 'string' &&
|
|
241
|
+
typeof value.access === 'string');
|
|
242
|
+
}
|
|
243
|
+
export function isWgslExternalTexture(value) {
|
|
244
|
+
return (!!value[$internal] &&
|
|
245
|
+
value.type === 'texture_external');
|
|
246
|
+
}
|
package/data/unstruct.d.ts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import { AnyData, Unstruct } from
|
|
2
|
-
|
|
3
|
-
//#region src/data/unstruct.d.ts
|
|
4
|
-
|
|
1
|
+
import type { AnyData, Unstruct } from './dataTypes.ts';
|
|
5
2
|
/**
|
|
6
3
|
* Creates a loose struct schema that can be used to construct vertex buffers.
|
|
7
4
|
* Describes structs with members of both loose and non-loose types.
|
|
@@ -20,6 +17,4 @@ import { AnyData, Unstruct } from "./dataTypes.js";
|
|
|
20
17
|
* @param properties Record with `string` keys and `TgpuData` or `TgpuLooseData` values,
|
|
21
18
|
* each entry describing one struct member.
|
|
22
19
|
*/
|
|
23
|
-
declare function unstruct<TProps extends Record<string, AnyData>>(properties: TProps): Unstruct<TProps>;
|
|
24
|
-
//#endregion
|
|
25
|
-
export { unstruct };
|
|
20
|
+
export declare function unstruct<TProps extends Record<string, AnyData>>(properties: TProps): Unstruct<TProps>;
|
package/data/unstruct.js
CHANGED
|
@@ -1,43 +1,49 @@
|
|
|
1
|
-
import { $internal } from "../shared/symbols.js";
|
|
2
1
|
import { getName, setName } from "../shared/meta.js";
|
|
2
|
+
import { $internal } from "../shared/symbols.js";
|
|
3
3
|
import { schemaCallWrapper } from "./schemaCallWrapper.js";
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
// ----------
|
|
5
|
+
// Public API
|
|
6
|
+
// ----------
|
|
6
7
|
/**
|
|
7
|
-
* Creates a loose struct schema that can be used to construct vertex buffers.
|
|
8
|
-
* Describes structs with members of both loose and non-loose types.
|
|
9
|
-
*
|
|
10
|
-
* The order of members matches the passed in properties object.
|
|
11
|
-
* Members are not aligned in respect to their `byteAlignment`,
|
|
12
|
-
* unless they are explicitly decorated with the custom align attribute
|
|
13
|
-
* via `d.align` function.
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* const CircleStruct = d.unstruct({ radius: d.f32, pos: d.vec3f }); // packed struct with no padding
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* const CircleStruct = d.unstruct({ radius: d.f32, pos: d.align(16, d.vec3f) });
|
|
20
|
-
*
|
|
21
|
-
* @param properties Record with `string` keys and `TgpuData` or `TgpuLooseData` values,
|
|
22
|
-
* each entry describing one struct member.
|
|
23
|
-
*/
|
|
24
|
-
function unstruct(properties) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
8
|
+
* Creates a loose struct schema that can be used to construct vertex buffers.
|
|
9
|
+
* Describes structs with members of both loose and non-loose types.
|
|
10
|
+
*
|
|
11
|
+
* The order of members matches the passed in properties object.
|
|
12
|
+
* Members are not aligned in respect to their `byteAlignment`,
|
|
13
|
+
* unless they are explicitly decorated with the custom align attribute
|
|
14
|
+
* via `d.align` function.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* const CircleStruct = d.unstruct({ radius: d.f32, pos: d.vec3f }); // packed struct with no padding
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* const CircleStruct = d.unstruct({ radius: d.f32, pos: d.align(16, d.vec3f) });
|
|
21
|
+
*
|
|
22
|
+
* @param properties Record with `string` keys and `TgpuData` or `TgpuLooseData` values,
|
|
23
|
+
* each entry describing one struct member.
|
|
24
|
+
*/
|
|
25
|
+
export function unstruct(properties) {
|
|
26
|
+
// In the schema call, create and return a deep copy
|
|
27
|
+
// by wrapping all the values in corresponding schema calls.
|
|
28
|
+
const unstructSchema = (instanceProps) => Object.fromEntries(Object.entries(properties).map(([key, schema]) => [
|
|
29
|
+
key,
|
|
30
|
+
schemaCallWrapper(schema, instanceProps?.[key]),
|
|
31
|
+
]));
|
|
32
|
+
Object.setPrototypeOf(unstructSchema, UnstructImpl);
|
|
33
|
+
unstructSchema.propTypes = properties;
|
|
34
|
+
return unstructSchema;
|
|
29
35
|
}
|
|
36
|
+
// --------------
|
|
37
|
+
// Implementation
|
|
38
|
+
// --------------
|
|
30
39
|
const UnstructImpl = {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
[$internal]: true,
|
|
41
|
+
type: 'unstruct',
|
|
42
|
+
$name(label) {
|
|
43
|
+
setName(this, label);
|
|
44
|
+
return this;
|
|
45
|
+
},
|
|
46
|
+
toString() {
|
|
47
|
+
return `unstruct:${getName(this) ?? '<unnamed>'}`;
|
|
48
|
+
},
|
|
40
49
|
};
|
|
41
|
-
|
|
42
|
-
//#endregion
|
|
43
|
-
export { unstruct };
|