typegpu 0.11.9 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/builtin.d.ts +51 -53
- package/builtin.js +30 -34
- package/common/fullScreenTriangle.d.ts +2 -10
- package/common/fullScreenTriangle.js +20 -28
- package/common/index.d.ts +2 -9
- package/common/index.js +3 -12
- package/common/writeSoA.d.ts +11 -12
- package/common/writeSoA.js +88 -76
- package/core/buffer/buffer.d.ts +79 -62
- package/core/buffer/buffer.js +279 -205
- package/core/buffer/bufferBinding.d.ts +71 -0
- package/core/buffer/bufferBinding.js +154 -0
- package/core/buffer/bufferUsage.d.ts +14 -45
- package/core/buffer/bufferUsage.js +1 -171
- package/core/buffer/laidOutBuffer.d.ts +25 -0
- package/core/buffer/laidOutBuffer.js +55 -0
- package/core/commandEncoder/attachments.d.ts +125 -0
- package/core/commandEncoder/attachments.js +29 -0
- package/core/commandEncoder/commandEncoder.d.ts +53 -0
- package/core/commandEncoder/commandEncoder.js +56 -0
- package/core/commandEncoder/computePass.d.ts +58 -0
- package/core/commandEncoder/computePass.js +63 -0
- package/core/commandEncoder/renderPass.d.ts +121 -0
- package/core/commandEncoder/renderPass.js +196 -0
- package/core/constant/tgpuConstant.d.ts +26 -26
- package/core/constant/tgpuConstant.js +76 -65
- package/core/declare/tgpuDeclare.d.ts +3 -6
- package/core/declare/tgpuDeclare.js +36 -36
- package/core/function/autoIO.d.ts +61 -33
- package/core/function/autoIO.js +68 -73
- package/core/function/comptime.d.ts +11 -13
- package/core/function/comptime.js +60 -52
- package/core/function/createCallableSchema.d.ts +16 -0
- package/core/function/createCallableSchema.js +50 -40
- package/core/function/dualImpl.d.ts +44 -0
- package/core/function/dualImpl.js +71 -50
- package/core/function/entryInputRouter.d.ts +26 -0
- package/core/function/entryInputRouter.js +31 -33
- package/core/function/extractArgs.d.ts +38 -0
- package/core/function/extractArgs.js +202 -200
- package/core/function/fnCore.d.ts +44 -5
- package/core/function/fnCore.js +148 -93
- package/core/function/fnTypes.d.ts +31 -29
- package/core/function/fnTypes.js +1 -0
- package/core/function/ioSchema.d.ts +12 -10
- package/core/function/ioSchema.js +65 -47
- package/core/function/shelllessImpl.d.ts +9 -12
- package/core/function/shelllessImpl.js +17 -22
- package/core/function/templateUtils.d.ts +2 -0
- package/core/function/templateUtils.js +9 -8
- package/core/function/tgpuComputeFn.d.ts +26 -28
- package/core/function/tgpuComputeFn.js +47 -48
- package/core/function/tgpuFn.d.ts +34 -37
- package/core/function/tgpuFn.js +179 -153
- package/core/function/tgpuFragmentFn.d.ts +52 -53
- package/core/function/tgpuFragmentFn.js +63 -56
- package/core/function/tgpuVertexFn.d.ts +36 -39
- package/core/function/tgpuVertexFn.js +56 -53
- package/core/pipeline/computePipeline.d.ts +141 -53
- package/core/pipeline/computePipeline.js +291 -225
- package/core/pipeline/connectAttachmentToShader.d.ts +4 -0
- package/core/pipeline/connectAttachmentToShader.js +25 -22
- package/core/pipeline/connectTargetsToShader.d.ts +3 -0
- package/core/pipeline/connectTargetsToShader.js +29 -27
- package/core/pipeline/drawState.d.ts +52 -0
- package/core/pipeline/drawState.js +225 -0
- package/core/pipeline/limitsOverflow.d.ts +2 -0
- package/core/pipeline/limitsOverflow.js +13 -10
- package/core/pipeline/performanceTracker.d.ts +14 -0
- package/core/pipeline/performanceTracker.js +34 -0
- package/core/pipeline/pipelineUtils.d.ts +18 -0
- package/core/pipeline/pipelineUtils.js +54 -25
- package/core/pipeline/priors.d.ts +1 -0
- package/core/pipeline/priors.js +12 -0
- package/core/pipeline/renderPipeline.d.ts +246 -261
- package/core/pipeline/renderPipeline.js +487 -480
- package/core/pipeline/timeable.d.ts +28 -18
- package/core/pipeline/timeable.js +90 -52
- package/core/pipeline/typeGuards.d.ts +17 -0
- package/core/pipeline/typeGuards.js +52 -22
- package/core/querySet/querySet.d.ts +26 -21
- package/core/querySet/querySet.js +127 -103
- package/core/rawCodeSnippet/tgpuRawCodeSnippet.d.ts +13 -18
- package/core/rawCodeSnippet/tgpuRawCodeSnippet.js +89 -90
- package/core/resolve/externals.d.ts +25 -8
- package/core/resolve/externals.js +78 -54
- package/core/resolve/namespace.d.ts +22 -25
- package/core/resolve/namespace.js +16 -21
- package/core/resolve/resolvableString.d.ts +7 -0
- package/core/resolve/resolvableString.js +13 -0
- package/core/resolve/resolveData.d.ts +10 -0
- package/core/resolve/resolveData.js +162 -121
- package/core/resolve/stitch.d.ts +8 -0
- package/core/resolve/stitch.js +23 -21
- package/core/resolve/tgpuResolve.d.ts +55 -53
- package/core/resolve/tgpuResolve.js +106 -53
- package/core/root/configurableImpl.d.ts +10 -0
- package/core/root/configurableImpl.js +17 -19
- package/core/root/init.d.ts +76 -38
- package/core/root/init.js +346 -455
- package/core/root/rootTypes.d.ts +461 -636
- package/core/root/rootTypes.js +1 -0
- package/core/sampler/sampler.d.ts +50 -31
- package/core/sampler/sampler.js +120 -113
- package/core/simulate/tgpuSimulate.d.ts +9 -12
- package/core/simulate/tgpuSimulate.js +68 -71
- package/core/slot/accessor.d.ts +36 -13
- package/core/slot/accessor.js +138 -91
- package/core/slot/internalSlots.d.ts +2 -0
- package/core/slot/internalSlots.js +1 -6
- package/core/slot/lazy.d.ts +2 -6
- package/core/slot/lazy.js +71 -39
- package/core/slot/slot.d.ts +2 -6
- package/core/slot/slot.js +45 -38
- package/core/slot/slotTypes.d.ts +78 -80
- package/core/slot/slotTypes.js +11 -16
- package/core/texture/externalTexture.d.ts +20 -11
- package/core/texture/externalTexture.js +46 -46
- package/core/texture/texture.d.ts +152 -97
- package/core/texture/texture.js +407 -314
- package/core/texture/textureFormats.d.ts +42 -23
- package/core/texture/textureFormats.js +104 -75
- package/core/texture/textureProps.d.ts +7 -10
- package/core/texture/textureProps.js +1 -0
- package/core/texture/textureUtils.d.ts +8 -0
- package/core/texture/textureUtils.js +185 -179
- package/core/texture/usageExtension.d.ts +21 -18
- package/core/texture/usageExtension.js +13 -17
- package/core/unroll/tgpuUnroll.d.ts +20 -19
- package/core/unroll/tgpuUnroll.js +82 -91
- package/core/valueProxyUtils.d.ts +3 -0
- package/core/valueProxyUtils.js +52 -41
- package/core/variable/tgpuVariable.d.ts +26 -27
- package/core/variable/tgpuVariable.js +93 -96
- package/core/vertexLayout/connectAttributesToShader.d.ts +9 -0
- package/core/vertexLayout/connectAttributesToShader.js +61 -56
- package/core/vertexLayout/vertexAttribute.d.ts +21 -17
- package/core/vertexLayout/vertexAttribute.js +1 -0
- package/core/vertexLayout/vertexLayout.d.ts +24 -18
- package/core/vertexLayout/vertexLayout.js +130 -99
- package/core/whitespaces.d.ts +2 -0
- package/core/whitespaces.js +16 -0
- package/data/alignIO.d.ts +7 -0
- package/data/alignIO.js +13 -13
- package/data/alignmentOf.d.ts +5 -8
- package/data/alignmentOf.js +90 -75
- package/data/array.d.ts +6 -9
- package/data/array.js +48 -40
- package/data/atomic.d.ts +2 -7
- package/data/atomic.js +26 -23
- package/data/attributes.d.ts +19 -21
- package/data/attributes.js +192 -132
- package/data/autoStruct.d.ts +36 -3
- package/data/autoStruct.js +84 -81
- package/data/compiledIO.d.ts +5 -0
- package/data/compiledIO.js +231 -215
- package/data/dataIO.d.ts +13 -11
- package/data/dataIO.js +643 -589
- package/data/dataTypes.d.ts +83 -65
- package/data/dataTypes.js +66 -68
- package/data/deepEqual.d.ts +2 -7
- package/data/deepEqual.js +80 -55
- package/data/disarray.d.ts +6 -10
- package/data/disarray.js +52 -46
- package/data/float16Conversion.d.ts +4 -0
- package/data/float16Conversion.js +7 -0
- package/data/getLongestContiguousPrefix.d.ts +4 -8
- package/data/getLongestContiguousPrefix.js +6 -11
- package/data/index.d.ts +30 -31
- package/data/index.js +39 -172
- package/data/instanceToSchema.d.ts +24 -27
- package/data/instanceToSchema.js +1 -0
- package/data/isContiguous.d.ts +4 -8
- package/data/isContiguous.js +6 -11
- package/data/matrix.d.ts +21 -21
- package/data/matrix.js +513 -505
- package/data/numberOps.d.ts +6 -0
- package/data/numberOps.js +26 -20
- package/data/numeric.d.ts +21 -12
- package/data/numeric.js +287 -197
- package/data/offsetUtils.d.ts +9 -13
- package/data/offsetUtils.js +204 -144
- package/data/offsets.d.ts +8 -0
- package/data/offsets.js +33 -33
- package/data/partialIO.d.ts +13 -8
- package/data/partialIO.js +124 -113
- package/data/ptr.d.ts +12 -12
- package/data/ptr.js +42 -44
- package/data/ref.d.ts +40 -27
- package/data/ref.js +125 -95
- package/data/sampler.d.ts +99 -101
- package/data/sampler.js +17 -21
- package/data/schemaCallWrapper.d.ts +19 -0
- package/data/schemaCallWrapper.js +31 -26
- package/data/schemaMemoryLayout.d.ts +8 -0
- package/data/schemaMemoryLayout.js +213 -185
- package/data/sizeOf.d.ts +4 -8
- package/data/sizeOf.js +6 -11
- package/data/snippet.d.ts +96 -20
- package/data/snippet.js +75 -86
- package/data/struct.d.ts +4 -7
- package/data/struct.js +51 -39
- package/data/texture.d.ts +253 -250
- package/data/texture.js +238 -200
- package/data/unstruct.d.ts +2 -7
- package/data/unstruct.js +43 -37
- package/data/vector.d.ts +33 -21
- package/data/vector.js +234 -221
- package/data/vectorImpl.d.ts +231 -0
- package/data/vectorImpl.js +563 -515
- package/data/vectorOps.d.ts +63 -0
- package/data/vectorOps.js +642 -630
- package/data/vertexFormatData.d.ts +181 -184
- package/data/vertexFormatData.js +104 -106
- package/data/wgslTypes.d.ts +665 -600
- package/data/wgslTypes.js +220 -198
- package/errors.d.ts +50 -24
- package/errors.js +146 -126
- package/execMode.d.ts +16 -0
- package/execMode.js +47 -40
- package/extension.d.ts +13 -8
- package/extension.js +10 -16
- package/getGPUValue.d.ts +1 -0
- package/getGPUValue.js +2 -7
- package/index.d.ts +28 -68
- package/index.js +8 -28
- package/indexNamedExports.d.ts +69 -42
- package/indexNamedExports.js +25 -0
- package/internal.d.ts +16 -0
- package/internal.js +12 -0
- package/mathUtils.d.ts +5 -0
- package/mathUtils.js +7 -11
- package/memo.d.ts +11 -0
- package/memo.js +20 -22
- package/minify.d.ts +5 -0
- package/minify.js +93 -0
- package/nameUtils.d.ts +29 -0
- package/nameUtils.js +427 -394
- package/package.json +5 -1
- package/resolutionCtx.d.ts +162 -22
- package/resolutionCtx.js +911 -629
- package/serial/registry.d.ts +15 -0
- package/serial/registry.js +106 -0
- package/serial/restore.d.ts +49 -0
- package/serial/restore.js +68 -0
- package/serial/schema.d.ts +58 -0
- package/serial/schema.js +209 -0
- package/serial/types.d.ts +5 -0
- package/serial/types.js +1 -0
- package/shared/env.d.ts +9 -0
- package/shared/env.js +9 -12
- package/shared/generators.d.ts +4 -0
- package/shared/generators.js +10 -12
- package/shared/meta.d.ts +29 -14
- package/shared/meta.js +71 -55
- package/shared/normalizeMetadata.d.ts +32 -27
- package/shared/normalizeMetadata.js +23 -36
- package/shared/repr.d.ts +73 -55
- package/shared/repr.js +1 -0
- package/shared/soul.d.ts +17 -0
- package/shared/soul.js +1 -0
- package/shared/stringify.d.ts +2 -0
- package/shared/stringify.js +29 -20
- package/shared/symbols.d.ts +26 -20
- package/shared/symbols.js +79 -79
- package/shared/tseynit.d.ts +2 -0
- package/shared/tseynit.js +160 -75
- package/shared/utilityTypes.d.ts +30 -14
- package/shared/utilityTypes.js +2 -6
- package/shared/vertexFormat.d.ts +41 -43
- package/shared/vertexFormat.js +59 -62
- package/std/array.d.ts +2 -7
- package/std/array.js +18 -23
- package/std/atomic.d.ts +14 -18
- package/std/atomic.js +96 -95
- package/std/bitcast.d.ts +193 -10
- package/std/bitcast.js +309 -39
- package/std/boolean.d.ts +19 -33
- package/std/boolean.js +296 -288
- package/std/copy.d.ts +2 -7
- package/std/copy.js +27 -24
- package/std/derivative.d.ts +11 -15
- package/std/derivative.js +56 -79
- package/std/discard.d.ts +1 -6
- package/std/discard.js +7 -14
- package/std/environment.d.ts +19 -14
- package/std/environment.js +71 -51
- package/std/extensions.d.ts +2 -8
- package/std/extensions.js +10 -11
- package/std/index.d.ts +20 -24
- package/std/index.js +32 -187
- package/std/matrix.d.ts +6 -12
- package/std/matrix.js +60 -69
- package/std/numeric.d.ts +143 -146
- package/std/numeric.js +858 -749
- package/std/operators.d.ts +19 -27
- package/std/operators.js +227 -193
- package/std/packing.d.ts +5 -11
- package/std/packing.js +67 -75
- package/std/range.d.ts +6 -11
- package/std/range.js +48 -36
- package/std/subgroup.d.ts +33 -37
- package/std/subgroup.js +180 -217
- package/std/texture.d.ts +70 -38
- package/std/texture.js +176 -172
- package/taskQueue.d.ts +6 -0
- package/taskQueue.js +30 -0
- package/tgpu.d.ts +16 -0
- package/tgpu.js +17 -44
- package/tgpuBindGroupLayout.d.ts +132 -152
- package/tgpuBindGroupLayout.js +346 -268
- package/tgpuLogger.d.ts +34 -0
- package/tgpuLogger.js +63 -0
- package/tgpuUnstable.d.ts +16 -22
- package/tgpuUnstable.js +13 -35
- package/tgsl/accessIndex.d.ts +2 -0
- package/tgsl/accessIndex.js +76 -33
- package/tgsl/accessProp.d.ts +2 -0
- package/tgsl/accessProp.js +142 -101
- package/tgsl/accessStructProp.d.ts +5 -0
- package/tgsl/accessStructProp.js +13 -15
- package/tgsl/consoleLog/deserializers.d.ts +13 -0
- package/tgsl/consoleLog/deserializers.js +119 -103
- package/tgsl/consoleLog/logGenerator.d.ts +21 -0
- package/tgsl/consoleLog/logGenerator.js +85 -80
- package/tgsl/consoleLog/serializers.d.ts +21 -0
- package/tgsl/consoleLog/serializers.js +119 -100
- package/tgsl/consoleLog/types.d.ts +40 -39
- package/tgsl/consoleLog/types.js +1 -0
- package/tgsl/conversion.d.ts +33 -0
- package/tgsl/conversion.js +271 -216
- package/tgsl/forOfUtils.d.ts +15 -0
- package/tgsl/forOfUtils.js +85 -70
- package/tgsl/generationHelpers.d.ts +22 -39
- package/tgsl/generationHelpers.js +85 -58
- package/tgsl/infixDispatch.d.ts +70 -0
- package/tgsl/infixDispatch.js +48 -46
- package/tgsl/jsPolyfills.d.ts +16 -19
- package/tgsl/jsPolyfills.js +44 -42
- package/tgsl/makeDereferenceable.d.ts +48 -0
- package/tgsl/makeDereferenceable.js +86 -0
- package/tgsl/makeResolvable.d.ts +22 -0
- package/tgsl/makeResolvable.js +33 -0
- package/tgsl/shaderGenerator.d.ts +77 -17
- package/tgsl/shaderGenerator.js +1 -0
- package/tgsl/shellless.d.ts +6 -9
- package/tgsl/shellless.js +73 -43
- package/tgsl/wgslGenerator.d.ts +66 -59
- package/tgsl/wgslGenerator.js +1344 -760
- package/types.d.ts +287 -222
- package/types.js +61 -44
- package/unwrapper.d.ts +31 -26
- package/unwrapper.js +1 -0
- package/wgslExtensions.d.ts +3 -5
- package/wgslExtensions.js +12 -16
- package/_virtual/rolldown_runtime.js +0 -13
- package/core/buffer/bufferShorthand.d.ts +0 -50
- package/core/buffer/bufferShorthand.js +0 -55
- package/core/pipeline/applyPipelineState.js +0 -37
- package/package.js +0 -5
- package/tgsl/shaderGenerator_members.d.ts +0 -33
- package/tgsl/shaderGenerator_members.js +0 -12
|
@@ -1,117 +1,117 @@
|
|
|
1
|
-
import { isWgslArray, isWgslStruct } from "../../data/wgslTypes.js";
|
|
2
|
-
import { getName } from "../../shared/meta.js";
|
|
3
|
-
import { bool, f16, f32, i32, u32 } from "../../data/numeric.js";
|
|
4
|
-
import { vec2b, vec2f, vec2h, vec2i, vec2u, vec3b, vec3f, vec3h, vec3i, vec3u, vec4b, vec4f, vec4h, vec4i, vec4u } from "../../data/vector.js";
|
|
5
|
-
import { sizeOf } from "../../data/sizeOf.js";
|
|
6
|
-
import { mat2x2f, mat3x3f, mat4x4f } from "../../data/matrix.js";
|
|
7
1
|
import { fn } from "../../core/function/tgpuFn.js";
|
|
8
2
|
import { slot } from "../../core/slot/slot.js";
|
|
9
3
|
import { privateVar } from "../../core/variable/tgpuVariable.js";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
4
|
+
import { mat2x2f, mat3x3f, mat4x4f } from "../../data/matrix.js";
|
|
5
|
+
import { bool, f16, f32, i32, u32 } from "../../data/numeric.js";
|
|
6
|
+
import { sizeOf } from "../../data/sizeOf.js";
|
|
7
|
+
import { vec2b, vec2f, vec2h, vec2i, vec2u, vec3b, vec3f, vec3h, vec3i, vec3u, vec4b, vec4f, vec4h, vec4i, vec4u, } from "../../data/vector.js";
|
|
8
|
+
import { isWgslArray, isWgslStruct, } from "../../data/wgslTypes.js";
|
|
9
|
+
import { getName } from "../../shared/meta.js";
|
|
10
|
+
const dataBlockIndex = privateVar(u32, 0).$name('dataBlockIndex');
|
|
11
|
+
const dataByteIndex = privateVar(u32, 0).$name('dataByteIndex');
|
|
12
|
+
const dataBufferSlot = slot().$name('dataBuffer');
|
|
13
|
+
const nextByteIndex = fn([], u32) `() {
|
|
16
14
|
let i = dataByteIndex;
|
|
17
15
|
dataByteIndex = dataByteIndex + 1u;
|
|
18
16
|
return i;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
}`
|
|
18
|
+
.$uses({ dataByteIndex })
|
|
19
|
+
.$name('nextByteIndex');
|
|
20
|
+
const nextU32 = 'dataBuffer[dataBlockIndex].serializedData[nextByteIndex()]';
|
|
21
|
+
export const serializerMap = {
|
|
22
|
+
f32: fn([f32]) `(n) {
|
|
23
23
|
${nextU32} = bitcast<u32>(n);
|
|
24
24
|
}`,
|
|
25
|
-
|
|
25
|
+
f16: fn([f16]) `(n) {
|
|
26
26
|
${nextU32} = pack2x16float(vec2f(f32(n), 0.0));
|
|
27
27
|
}`,
|
|
28
|
-
|
|
28
|
+
i32: fn([i32]) `(n) {
|
|
29
29
|
${nextU32} = bitcast<u32>(n);
|
|
30
30
|
}`,
|
|
31
|
-
|
|
31
|
+
u32: fn([u32]) `(n) {
|
|
32
32
|
${nextU32} = n;
|
|
33
33
|
}`,
|
|
34
|
-
|
|
34
|
+
bool: fn([bool]) `(b) {
|
|
35
35
|
${nextU32} = u32(b);
|
|
36
36
|
}`,
|
|
37
|
-
|
|
37
|
+
vec2f: fn([vec2f]) `(v) {
|
|
38
38
|
${nextU32} = bitcast<u32>(v.x);
|
|
39
39
|
${nextU32} = bitcast<u32>(v.y);
|
|
40
40
|
}`,
|
|
41
|
-
|
|
41
|
+
vec3f: fn([vec3f]) `(v) {
|
|
42
42
|
${nextU32} = bitcast<u32>(v.x);
|
|
43
43
|
${nextU32} = bitcast<u32>(v.y);
|
|
44
44
|
${nextU32} = bitcast<u32>(v.z);
|
|
45
45
|
}`,
|
|
46
|
-
|
|
46
|
+
vec4f: fn([vec4f]) `(v) {
|
|
47
47
|
${nextU32} = bitcast<u32>(v.x);
|
|
48
48
|
${nextU32} = bitcast<u32>(v.y);
|
|
49
49
|
${nextU32} = bitcast<u32>(v.z);
|
|
50
50
|
${nextU32} = bitcast<u32>(v.w);
|
|
51
51
|
}`,
|
|
52
|
-
|
|
52
|
+
vec2h: fn([vec2h]) `(v) {
|
|
53
53
|
${nextU32} = pack2x16float(vec2f(f32(v.x), f32(v.y)));
|
|
54
54
|
}`,
|
|
55
|
-
|
|
55
|
+
vec3h: fn([vec3h]) `(v) {
|
|
56
56
|
${nextU32} = pack2x16float(vec2f(f32(v.x), f32(v.y)));
|
|
57
57
|
${nextU32} = pack2x16float(vec2f(f32(v.z), 0.0));
|
|
58
58
|
}`,
|
|
59
|
-
|
|
59
|
+
vec4h: fn([vec4h]) `(v) {
|
|
60
60
|
${nextU32} = pack2x16float(vec2f(f32(v.x), f32(v.y)));
|
|
61
61
|
${nextU32} = pack2x16float(vec2f(f32(v.z), f32(v.w)));
|
|
62
62
|
}`,
|
|
63
|
-
|
|
63
|
+
vec2i: fn([vec2i]) `(v) {
|
|
64
64
|
${nextU32} = bitcast<u32>(v.x);
|
|
65
65
|
${nextU32} = bitcast<u32>(v.y);
|
|
66
66
|
}`,
|
|
67
|
-
|
|
67
|
+
vec3i: fn([vec3i]) `(v) {
|
|
68
68
|
${nextU32} = bitcast<u32>(v.x);
|
|
69
69
|
${nextU32} = bitcast<u32>(v.y);
|
|
70
70
|
${nextU32} = bitcast<u32>(v.z);
|
|
71
71
|
}`,
|
|
72
|
-
|
|
72
|
+
vec4i: fn([vec4i]) `(v) {
|
|
73
73
|
${nextU32} = bitcast<u32>(v.x);
|
|
74
74
|
${nextU32} = bitcast<u32>(v.y);
|
|
75
75
|
${nextU32} = bitcast<u32>(v.z);
|
|
76
76
|
${nextU32} = bitcast<u32>(v.w);
|
|
77
77
|
}`,
|
|
78
|
-
|
|
78
|
+
vec2u: fn([vec2u]) `(v) {
|
|
79
79
|
${nextU32} = v.x;
|
|
80
80
|
${nextU32} = v.y;
|
|
81
81
|
}`,
|
|
82
|
-
|
|
82
|
+
vec3u: fn([vec3u]) `(v) {
|
|
83
83
|
${nextU32} = v.x;
|
|
84
84
|
${nextU32} = v.y;
|
|
85
85
|
${nextU32} = v.z;
|
|
86
86
|
}`,
|
|
87
|
-
|
|
87
|
+
vec4u: fn([vec4u]) `(v) {
|
|
88
88
|
${nextU32} = v.x;
|
|
89
89
|
${nextU32} = v.y;
|
|
90
90
|
${nextU32} = v.z;
|
|
91
91
|
${nextU32} = v.w;
|
|
92
92
|
}`,
|
|
93
|
-
|
|
93
|
+
'vec2<bool>': fn([vec2b]) `(v) {
|
|
94
94
|
${nextU32} = u32(v.x);
|
|
95
95
|
${nextU32} = u32(v.y);
|
|
96
96
|
}`,
|
|
97
|
-
|
|
97
|
+
'vec3<bool>': fn([vec3b]) `(v) {
|
|
98
98
|
${nextU32} = u32(v.x);
|
|
99
99
|
${nextU32} = u32(v.y);
|
|
100
100
|
${nextU32} = u32(v.z);
|
|
101
101
|
}`,
|
|
102
|
-
|
|
102
|
+
'vec4<bool>': fn([vec4b]) `(v) {
|
|
103
103
|
${nextU32} = u32(v.x);
|
|
104
104
|
${nextU32} = u32(v.y);
|
|
105
105
|
${nextU32} = u32(v.z);
|
|
106
106
|
${nextU32} = u32(v.w);
|
|
107
107
|
}`,
|
|
108
|
-
|
|
108
|
+
mat2x2f: fn([mat2x2f]) `(m) {
|
|
109
109
|
${nextU32} = bitcast<u32>(m[0][0]);
|
|
110
110
|
${nextU32} = bitcast<u32>(m[0][1]);
|
|
111
111
|
${nextU32} = bitcast<u32>(m[1][0]);
|
|
112
112
|
${nextU32} = bitcast<u32>(m[1][1]);
|
|
113
113
|
}`,
|
|
114
|
-
|
|
114
|
+
mat3x3f: fn([mat3x3f]) `(m) {
|
|
115
115
|
${nextU32} = bitcast<u32>(m[0][0]);
|
|
116
116
|
${nextU32} = bitcast<u32>(m[0][1]);
|
|
117
117
|
${nextU32} = bitcast<u32>(m[0][2]);
|
|
@@ -125,7 +125,7 @@ const serializerMap = {
|
|
|
125
125
|
${nextU32} = bitcast<u32>(m[2][2]);
|
|
126
126
|
${nextU32} = 0u;
|
|
127
127
|
}`,
|
|
128
|
-
|
|
128
|
+
mat4x4f: fn([mat4x4f]) `(m) {
|
|
129
129
|
${nextU32} = bitcast<u32>(m[0][0]);
|
|
130
130
|
${nextU32} = bitcast<u32>(m[0][1]);
|
|
131
131
|
${nextU32} = bitcast<u32>(m[0][2]);
|
|
@@ -142,68 +142,88 @@ const serializerMap = {
|
|
|
142
142
|
${nextU32} = bitcast<u32>(m[3][1]);
|
|
143
143
|
${nextU32} = bitcast<u32>(m[3][2]);
|
|
144
144
|
${nextU32} = bitcast<u32>(m[3][3]);
|
|
145
|
-
}
|
|
145
|
+
}`,
|
|
146
146
|
};
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
});
|
|
147
|
+
// rename the functions and add externals
|
|
148
|
+
for (const [name, serializer] of Object.entries(serializerMap)) {
|
|
149
|
+
serializer
|
|
150
|
+
.$name(`serialize${name[0].toLocaleUpperCase()}${name.slice(1)}`)
|
|
151
|
+
.$uses({ dataBlockIndex, nextByteIndex, dataBuffer: dataBufferSlot });
|
|
152
|
+
}
|
|
153
|
+
// -------
|
|
154
|
+
// Helpers
|
|
155
|
+
// -------
|
|
152
156
|
function generateHeader(argTypes) {
|
|
153
|
-
|
|
157
|
+
return `(${argTypes.map((_, i) => `_arg_${i}`).join(', ')})`;
|
|
154
158
|
}
|
|
155
159
|
/**
|
|
156
|
-
* Returns a serializer TGPU function for a given WGSL data type.
|
|
157
|
-
* If the data type is a base type, one of the preexisting functions (with the `dataBufferSlot` filled) is returned.
|
|
158
|
-
* Otherwise, a new function is generated.
|
|
159
|
-
*
|
|
160
|
-
* @param dataType - The WGSL data type descriptor to return a serializer for
|
|
161
|
-
* @param dataBuffer - A buffer to store serialized log call data (a necessary external for the returned function)
|
|
162
|
-
*/
|
|
160
|
+
* Returns a serializer TGPU function for a given WGSL data type.
|
|
161
|
+
* If the data type is a base type, one of the preexisting functions (with the `dataBufferSlot` filled) is returned.
|
|
162
|
+
* Otherwise, a new function is generated.
|
|
163
|
+
*
|
|
164
|
+
* @param dataType - The WGSL data type descriptor to return a serializer for
|
|
165
|
+
* @param dataBuffer - A buffer to store serialized log call data (a necessary external for the returned function)
|
|
166
|
+
*/
|
|
163
167
|
function getSerializer(dataType, dataBuffer) {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
168
|
+
const maybeSerializer = serializerMap[dataType.type];
|
|
169
|
+
if (maybeSerializer) {
|
|
170
|
+
return maybeSerializer.with(dataBufferSlot, dataBuffer);
|
|
171
|
+
}
|
|
172
|
+
if (isWgslStruct(dataType)) {
|
|
173
|
+
const props = Object.keys(dataType.propTypes);
|
|
174
|
+
const propTypes = Object.values(dataType.propTypes);
|
|
175
|
+
const propsSerializer = createCompoundSerializer(propTypes, dataBuffer);
|
|
176
|
+
return fn([dataType]) `(arg) {\n propsSerializer(${props
|
|
177
|
+
.map((prop) => `arg.${prop}`)
|
|
178
|
+
.join(', ')});\n}`
|
|
179
|
+
.$uses({ propsSerializer })
|
|
180
|
+
.$name(`${getName(dataType) ?? 'struct'}Serializer`);
|
|
181
|
+
}
|
|
182
|
+
if (isWgslArray(dataType)) {
|
|
183
|
+
const elementType = dataType.elementType;
|
|
184
|
+
const length = dataType.elementCount;
|
|
185
|
+
const elementSerializer = getSerializer(elementType, dataBuffer);
|
|
186
|
+
return fn([dataType]) `(arg) {\n${Array.from({ length }, (_, i) => ` elementSerializer(arg[${i}]);`).join('\n')}\n}`
|
|
187
|
+
.$uses({ elementSerializer })
|
|
188
|
+
.$name('arraySerializer');
|
|
189
|
+
}
|
|
190
|
+
throw new Error(`Cannot serialize data of type ${dataType.type}`);
|
|
178
191
|
}
|
|
179
192
|
/**
|
|
180
|
-
* Creates a compound serializer TGPU function that serializes multiple arguments of different types to the data buffer.
|
|
181
|
-
*
|
|
182
|
-
* @param dataTypes - Array of WGSL data types that define the types of arguments to be serialized
|
|
183
|
-
* @param dataBuffer - A buffer to store serialized log call data (a necessary external for the returned function)
|
|
184
|
-
*/
|
|
193
|
+
* Creates a compound serializer TGPU function that serializes multiple arguments of different types to the data buffer.
|
|
194
|
+
*
|
|
195
|
+
* @param dataTypes - Array of WGSL data types that define the types of arguments to be serialized
|
|
196
|
+
* @param dataBuffer - A buffer to store serialized log call data (a necessary external for the returned function)
|
|
197
|
+
*/
|
|
185
198
|
function createCompoundSerializer(dataTypes, dataBuffer) {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
199
|
+
const usedSerializers = {};
|
|
200
|
+
const shell = fn(dataTypes);
|
|
201
|
+
const header = generateHeader(dataTypes);
|
|
202
|
+
const body = dataTypes
|
|
203
|
+
.map((arg, i) => {
|
|
204
|
+
usedSerializers[`serializer${i}`] = getSerializer(arg, dataBuffer);
|
|
205
|
+
return ` serializer${i}(_arg_${i});`;
|
|
206
|
+
})
|
|
207
|
+
.join('\n');
|
|
208
|
+
return shell `${header} {\n${body}\n}`.$uses(usedSerializers).$name('compoundSerializer');
|
|
191
209
|
}
|
|
192
210
|
/**
|
|
193
|
-
* Creates a TGPU function that serializes data to the log buffer.
|
|
194
|
-
*
|
|
195
|
-
* @param id - Identifier for this logging function instance
|
|
196
|
-
* @param dataTypes - Array of WGSL data types that will be logged by this function
|
|
197
|
-
* @param dataBuffer - Mutable buffer array to store serialized log call data
|
|
198
|
-
* @param indexBuffer - Atomic counter buffer to track the next available log data slot
|
|
199
|
-
* @param logOptions - Configuration options
|
|
200
|
-
*/
|
|
201
|
-
function createLoggingFunction(id, dataTypes, dataBuffer, indexBuffer, logOptions) {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
211
|
+
* Creates a TGPU function that serializes data to the log buffer.
|
|
212
|
+
*
|
|
213
|
+
* @param id - Identifier for this logging function instance
|
|
214
|
+
* @param dataTypes - Array of WGSL data types that will be logged by this function
|
|
215
|
+
* @param dataBuffer - Mutable buffer array to store serialized log call data
|
|
216
|
+
* @param indexBuffer - Atomic counter buffer to track the next available log data slot
|
|
217
|
+
* @param logOptions - Configuration options
|
|
218
|
+
*/
|
|
219
|
+
export function createLoggingFunction(id, dataTypes, dataBuffer, indexBuffer, logOptions) {
|
|
220
|
+
const serializedSize = dataTypes.map(sizeOf).reduce((a, b) => a + b, 0);
|
|
221
|
+
if (serializedSize > logOptions.logSizeLimit) {
|
|
222
|
+
throw new Error(`Logged data needs to fit in ${logOptions.logSizeLimit} bytes (one of the logs requires ${serializedSize} bytes). Consider increasing the limit by passing appropriate options to tgpu.init().`);
|
|
223
|
+
}
|
|
224
|
+
const compoundSerializer = createCompoundSerializer(dataTypes, dataBuffer).$name(`log${id}serializer`);
|
|
225
|
+
const header = generateHeader(dataTypes);
|
|
226
|
+
return fn(dataTypes) `${header} {
|
|
207
227
|
dataBlockIndex = atomicAdd(&indexBuffer, 1);
|
|
208
228
|
if (dataBlockIndex >= ${logOptions.logCountLimit}) {
|
|
209
229
|
return;
|
|
@@ -212,14 +232,13 @@ function createLoggingFunction(id, dataTypes, dataBuffer, indexBuffer, logOption
|
|
|
212
232
|
dataByteIndex = 0;
|
|
213
233
|
|
|
214
234
|
compoundSerializer${header};
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
235
|
+
}`
|
|
236
|
+
.$uses({
|
|
237
|
+
indexBuffer,
|
|
238
|
+
dataBuffer,
|
|
239
|
+
dataBlockIndex,
|
|
240
|
+
dataByteIndex,
|
|
241
|
+
compoundSerializer,
|
|
242
|
+
})
|
|
243
|
+
.$name(`log${id}`);
|
|
222
244
|
}
|
|
223
|
-
|
|
224
|
-
//#endregion
|
|
225
|
-
export { createLoggingFunction };
|
|
@@ -1,40 +1,39 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
//#region src/tgsl/consoleLog/types.d.ts
|
|
8
|
-
type SupportedLogOp = ReturnType<typeof supportedLogOps>[number];
|
|
1
|
+
import type { TgpuMutable } from '../../core/buffer/bufferBinding.ts';
|
|
2
|
+
import type { Snippet } from '../../data/snippet.ts';
|
|
3
|
+
import type { AnyWgslData, Atomic, U32, WgslArray, WgslStruct } from '../../data/wgslTypes.ts';
|
|
4
|
+
import type { ResolutionCtx } from '../../types.ts';
|
|
5
|
+
import type { supportedLogOps } from '../jsPolyfills.ts';
|
|
6
|
+
export type SupportedLogOp = ReturnType<typeof supportedLogOps>[number];
|
|
9
7
|
/**
|
|
10
8
|
* Options for configuring GPU log generation.
|
|
11
9
|
*/
|
|
12
|
-
interface LogGeneratorOptions {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
10
|
+
export interface LogGeneratorOptions {
|
|
11
|
+
/**
|
|
12
|
+
* The maximum number of logs that appear during a single draw/dispatch call.
|
|
13
|
+
* If this number is exceeded, a warning containing the total number of calls is logged and further logs are dropped.
|
|
14
|
+
* Draws and dispatches recorded into a shared command encoder count against a single limit for the whole submission.
|
|
15
|
+
* @default 64
|
|
16
|
+
*/
|
|
17
|
+
logCountLimit?: number;
|
|
18
|
+
/**
|
|
19
|
+
* The total number of bytes reserved for each log call.
|
|
20
|
+
* If this number is exceeded, an exception is thrown during resolution.
|
|
21
|
+
* @default 252
|
|
22
|
+
*/
|
|
23
|
+
logSizeLimit?: number;
|
|
24
|
+
/**
|
|
25
|
+
* The prefix attached to each log call.
|
|
26
|
+
* @default ' GPU '
|
|
27
|
+
*/
|
|
28
|
+
messagePrefix?: string;
|
|
30
29
|
}
|
|
31
|
-
type SerializedLogCallData = WgslStruct<{
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
export type SerializedLogCallData = WgslStruct<{
|
|
31
|
+
id: U32;
|
|
32
|
+
serializedData: WgslArray<U32>;
|
|
34
33
|
}>;
|
|
35
|
-
interface LogMeta {
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
export interface LogMeta {
|
|
35
|
+
op: SupportedLogOp;
|
|
36
|
+
argTypes: (string | AnyWgslData)[];
|
|
38
37
|
}
|
|
39
38
|
/**
|
|
40
39
|
* The resources required for logging via console.log within TypeGPU functions.
|
|
@@ -44,11 +43,13 @@ interface LogMeta {
|
|
|
44
43
|
* @property options - The configuration options for the LogGenerator.
|
|
45
44
|
* @property logIdToMeta - A mapping from log identifiers to an object containing the corresponding log op and argument types.
|
|
46
45
|
*/
|
|
47
|
-
interface LogResources {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
export interface LogResources {
|
|
47
|
+
indexBuffer: TgpuMutable<Atomic<U32>>;
|
|
48
|
+
dataBuffer: TgpuMutable<WgslArray<SerializedLogCallData>>;
|
|
49
|
+
options: Required<LogGeneratorOptions>;
|
|
50
|
+
logIdToMeta: Map<number, LogMeta>;
|
|
51
|
+
}
|
|
52
|
+
export interface LogGenerator {
|
|
53
|
+
generateLog(ctx: ResolutionCtx, op: SupportedLogOp, args: Snippet[]): Snippet;
|
|
54
|
+
get logResources(): LogResources | undefined;
|
|
52
55
|
}
|
|
53
|
-
//#endregion
|
|
54
|
-
export { LogGeneratorOptions, LogResources, SupportedLogOp };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { UnknownData } from '../data/dataTypes.ts';
|
|
2
|
+
import { type Snippet } from '../data/snippet.ts';
|
|
3
|
+
import { type BaseData, type F16, type F32, type I32, type U32, type WgslStruct } from '../data/wgslTypes.ts';
|
|
4
|
+
import type { ResolutionCtx } from '../types.ts';
|
|
5
|
+
type ConversionAction = 'ref' | 'deref' | 'cast' | 'none';
|
|
6
|
+
export type ConversionResultAction = {
|
|
7
|
+
sourceIndex: number;
|
|
8
|
+
action: ConversionAction;
|
|
9
|
+
targetType?: U32 | F32 | I32 | F16;
|
|
10
|
+
};
|
|
11
|
+
export type ConversionResult = {
|
|
12
|
+
targetType: BaseData;
|
|
13
|
+
actions: ConversionResultAction[];
|
|
14
|
+
hasImplicitConversions?: boolean;
|
|
15
|
+
};
|
|
16
|
+
export declare function getBestConversion(types: BaseData[], targetTypes?: BaseData[]): ConversionResult | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Unifies input types to a common type.
|
|
19
|
+
*/
|
|
20
|
+
export declare function unify<T extends (BaseData | UnknownData)[] | []>(inTypes: T, restrictTo?: BaseData[]): {
|
|
21
|
+
[K in keyof T]: BaseData;
|
|
22
|
+
} | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Unifies input types to a common type.
|
|
25
|
+
* Unlike `unify`, it does not allow implicit conversions.
|
|
26
|
+
*/
|
|
27
|
+
export declare function unifyStrict<T extends (BaseData | UnknownData)[] | []>(inTypes: T, restrictTo?: BaseData[]): {
|
|
28
|
+
[K in keyof T]: BaseData;
|
|
29
|
+
} | undefined;
|
|
30
|
+
export declare function convertToCommonType<T extends Snippet[]>(ctx: ResolutionCtx, values: T, restrictTo?: BaseData[], verbose?: boolean): T | undefined;
|
|
31
|
+
export declare function tryConvertSnippet(ctx: ResolutionCtx, snippet: Snippet, targetDataTypes: BaseData | BaseData[], verbose?: boolean): Snippet;
|
|
32
|
+
export declare function convertStructValues(ctx: ResolutionCtx, structType: WgslStruct, values: Record<string, Snippet>): Snippet[];
|
|
33
|
+
export {};
|