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,133 @@
|
|
|
1
|
-
import { isWgslArray, isWgslData, isWgslStruct } from "../../data/wgslTypes.js";
|
|
2
|
-
import { niceStringify } from "../../shared/stringify.js";
|
|
3
|
-
import { vec2b, vec2f, vec2h, vec2i, vec2u, vec3b, vec3f, vec3h, vec3i, vec3u, vec4b, vec4f, vec4h, vec4i, vec4u } from "../../data/vector.js";
|
|
4
|
-
import { sizeOf } from "../../data/sizeOf.js";
|
|
5
1
|
import { mat2x2f, mat3x3f, mat4x4f } from "../../data/matrix.js";
|
|
6
|
-
import {
|
|
2
|
+
import { f32, i32, u32 } from "../../data/numeric.js";
|
|
3
|
+
import { sizeOf } from "../../data/sizeOf.js";
|
|
4
|
+
import { vec2b, vec2f, vec2h, vec2i, vec2u, vec3b, vec3f, vec3h, vec3i, vec3u, vec4b, vec4f, vec4h, vec4i, vec4u, } from "../../data/vector.js";
|
|
5
|
+
import { isWgslArray, isWgslData, isWgslStruct, } from "../../data/wgslTypes.js";
|
|
6
|
+
import { niceStringify } from "../../shared/stringify.js";
|
|
7
|
+
import { bitcast } from "../../std/bitcast.js";
|
|
7
8
|
import { unpack2x16float } from "../../std/packing.js";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
const toI = (n) => bitcastU32toI32(n ?? 0);
|
|
9
|
+
import { logger } from "../../tgpuLogger.js";
|
|
10
|
+
const toF = (n) => bitcast(u32, f32)(n ?? 0);
|
|
11
|
+
const toI = (n) => bitcast(u32, i32)(n ?? 0);
|
|
12
12
|
const unpack = (n) => unpack2x16float(n ?? 0);
|
|
13
13
|
const deserializerMap = {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
14
|
+
f32: (d) => toF(d[0]),
|
|
15
|
+
f16: (d) => unpack(d[0]).x,
|
|
16
|
+
i32: (d) => toI(d[0]),
|
|
17
|
+
u32: (d) => d[0] ?? 0,
|
|
18
|
+
bool: (d) => !!d[0],
|
|
19
|
+
vec2f: (d) => vec2f(toF(d[0]), toF(d[1])),
|
|
20
|
+
vec3f: (d) => vec3f(toF(d[0]), toF(d[1]), toF(d[2])),
|
|
21
|
+
vec4f: (d) => vec4f(toF(d[0]), toF(d[1]), toF(d[2]), toF(d[3])),
|
|
22
|
+
vec2h(d) {
|
|
23
|
+
const xyVec = unpack(d[0]);
|
|
24
|
+
return vec2h(xyVec.x, xyVec.y);
|
|
25
|
+
},
|
|
26
|
+
vec3h(d) {
|
|
27
|
+
const xyVec = unpack(d[0]);
|
|
28
|
+
const zVec = unpack(d[1]);
|
|
29
|
+
return vec3h(xyVec.x, xyVec.y, zVec.x);
|
|
30
|
+
},
|
|
31
|
+
vec4h(d) {
|
|
32
|
+
const xyVec = unpack(d[0]);
|
|
33
|
+
const zwVec = unpack(d[1]);
|
|
34
|
+
return vec4h(xyVec.x, xyVec.y, zwVec.x, zwVec.y);
|
|
35
|
+
},
|
|
36
|
+
vec2i: (d) => vec2i(toI(d[0]), toI(d[1])),
|
|
37
|
+
vec3i: (d) => vec3i(toI(d[0]), toI(d[1]), toI(d[2])),
|
|
38
|
+
vec4i: (d) => vec4i(toI(d[0]), toI(d[1]), toI(d[2]), toI(d[3])),
|
|
39
|
+
vec2u: (d) => vec2u(d[0] ?? 0, d[1] ?? 0),
|
|
40
|
+
vec3u: (d) => vec3u(d[0] ?? 0, d[1] ?? 0, d[2] ?? 0),
|
|
41
|
+
vec4u: (d) => vec4u(d[0] ?? 0, d[1] ?? 0, d[2] ?? 0, d[3] ?? 0),
|
|
42
|
+
'vec2<bool>': (d) => vec2b(!!d[0], !!d[1]),
|
|
43
|
+
'vec3<bool>': (d) => vec3b(!!d[0], !!d[1], !!d[2]),
|
|
44
|
+
'vec4<bool>': (d) => vec4b(!!d[0], !!d[1], !!d[2], !!d[3]),
|
|
45
|
+
mat2x2f: (d) => mat2x2f(toF(d[0]), toF(d[1]), toF(d[2]), toF(d[3])),
|
|
46
|
+
mat3x3f: (d) =>
|
|
47
|
+
// oxfmt-ignore
|
|
48
|
+
mat3x3f(toF(d[0]), toF(d[1]), toF(d[2]), toF(d[4]), toF(d[5]), toF(d[6]), toF(d[8]), toF(d[9]), toF(d[10])),
|
|
49
|
+
mat4x4f: (d) =>
|
|
50
|
+
// oxfmt-ignore
|
|
51
|
+
mat4x4f(toF(d[0]), toF(d[1]), toF(d[2]), toF(d[3]), toF(d[4]), toF(d[5]), toF(d[6]), toF(d[7]), toF(d[8]), toF(d[9]), toF(d[10]), toF(d[11]), toF(d[12]), toF(d[13]), toF(d[14]), toF(d[15])),
|
|
48
52
|
};
|
|
53
|
+
// -------
|
|
54
|
+
// Helpers
|
|
55
|
+
// -------
|
|
49
56
|
/**
|
|
50
|
-
* Deserializes binary data from a Uint32Array into a JavaScript value based on the provided WGSL data type.
|
|
51
|
-
*
|
|
52
|
-
* @param data - The binary data as a Uint32Array to be deserialized
|
|
53
|
-
* @param dataType - The WGSL data type specification that determines how to interpret the binary data
|
|
54
|
-
*/
|
|
57
|
+
* Deserializes binary data from a Uint32Array into a JavaScript value based on the provided WGSL data type.
|
|
58
|
+
*
|
|
59
|
+
* @param data - The binary data as a Uint32Array to be deserialized
|
|
60
|
+
* @param dataType - The WGSL data type specification that determines how to interpret the binary data
|
|
61
|
+
*/
|
|
55
62
|
function deserialize(data, dataType) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
63
|
+
const maybeDeserializer = deserializerMap[dataType.type];
|
|
64
|
+
if (maybeDeserializer) {
|
|
65
|
+
return maybeDeserializer(data);
|
|
66
|
+
}
|
|
67
|
+
if (isWgslStruct(dataType)) {
|
|
68
|
+
const props = Object.keys(dataType.propTypes);
|
|
69
|
+
const propTypes = Object.values(dataType.propTypes);
|
|
70
|
+
const decodedProps = deserializeCompound(data, propTypes);
|
|
71
|
+
return Object.fromEntries(props.map((key, index) => [key, decodedProps[index]]));
|
|
72
|
+
}
|
|
73
|
+
if (isWgslArray(dataType)) {
|
|
74
|
+
const elementType = dataType.elementType;
|
|
75
|
+
const length = dataType.elementCount;
|
|
76
|
+
const result = deserializeCompound(data, Array.from({ length }, () => elementType));
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
throw new Error(`Cannot deserialize data of type ${dataType.type}`);
|
|
69
80
|
}
|
|
70
81
|
/**
|
|
71
|
-
* Deserializes a list of elements from a Uint32Array buffer using provided type information.
|
|
72
|
-
* If there is a string value among the type information, it is returned as is.
|
|
73
|
-
*
|
|
74
|
-
* @param data - The Uint32Array buffer containing the serialized data
|
|
75
|
-
* @param dataTypes - The WGSL data type specification that determines how to interpret the binary data, or string literals
|
|
76
|
-
*/
|
|
82
|
+
* Deserializes a list of elements from a Uint32Array buffer using provided type information.
|
|
83
|
+
* If there is a string value among the type information, it is returned as is.
|
|
84
|
+
*
|
|
85
|
+
* @param data - The Uint32Array buffer containing the serialized data
|
|
86
|
+
* @param dataTypes - The WGSL data type specification that determines how to interpret the binary data, or string literals
|
|
87
|
+
*/
|
|
77
88
|
function deserializeCompound(data, dataTypes) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
89
|
+
let index = 0;
|
|
90
|
+
return dataTypes.map((info) => {
|
|
91
|
+
if (!isWgslData(info)) {
|
|
92
|
+
return info;
|
|
93
|
+
}
|
|
94
|
+
const size = Math.ceil(sizeOf(info) / 4);
|
|
95
|
+
const value = deserialize(data.subarray(index, index + size), info);
|
|
96
|
+
index += size;
|
|
97
|
+
return value;
|
|
98
|
+
});
|
|
86
99
|
}
|
|
87
|
-
function deserializeAndStringify(serializedData, argTypes) {
|
|
88
|
-
|
|
100
|
+
export function deserializeAndStringify(serializedData, argTypes) {
|
|
101
|
+
return deserializeCompound(serializedData, argTypes).map(niceStringify);
|
|
89
102
|
}
|
|
90
103
|
/**
|
|
91
|
-
* Reads and deserializes log data from GPU buffers, logging results to the console.
|
|
92
|
-
*
|
|
93
|
-
* @remarks
|
|
94
|
-
* - Log entries with IDs equal to 0 are filtered out.
|
|
95
|
-
* - Console messages are prepended with options.messagePrefix styled with purple background and white text.
|
|
96
|
-
* - A warning is displayed if the log count exceeds the limit passed in options.
|
|
97
|
-
* - After processing, the index buffer and the data buffer are cleared.
|
|
98
|
-
*/
|
|
99
|
-
function logDataFromGPU(resources) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
104
|
+
* Reads and deserializes log data from GPU buffers, logging results to the console.
|
|
105
|
+
*
|
|
106
|
+
* @remarks
|
|
107
|
+
* - Log entries with IDs equal to 0 are filtered out.
|
|
108
|
+
* - Console messages are prepended with options.messagePrefix styled with purple background and white text.
|
|
109
|
+
* - A warning is displayed if the log count exceeds the limit passed in options.
|
|
110
|
+
* - After processing, the index buffer and the data buffer are cleared.
|
|
111
|
+
*/
|
|
112
|
+
export function logDataFromGPU(resources) {
|
|
113
|
+
const { indexBuffer, dataBuffer, logIdToMeta, options } = resources;
|
|
114
|
+
void dataBuffer.read().then((data) => {
|
|
115
|
+
data
|
|
116
|
+
.filter((e) => e.id)
|
|
117
|
+
.forEach(({ id, serializedData }) => {
|
|
118
|
+
const { argTypes, op } = logIdToMeta.get(id);
|
|
119
|
+
const results = deserializeAndStringify(new Uint32Array(serializedData), argTypes);
|
|
120
|
+
if (results.length === 0) {
|
|
121
|
+
results.push('');
|
|
122
|
+
}
|
|
123
|
+
op.bind(console)(`%c${options.messagePrefix}%c ${results[0]}`, 'background: #936ff5; color: white;', 'color: inherit; background: none', ...results.slice(1));
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
void indexBuffer.read().then((totalCalls) => {
|
|
127
|
+
if (totalCalls > options.logCountLimit) {
|
|
128
|
+
logger.warn('log-limit-exceeded', `Log count limit per dispatch (${options.logCountLimit}) exceeded by ${totalCalls - options.logCountLimit} calls. Consider increasing the limit by passing appropriate options to tgpu.init().`);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
dataBuffer.buffer.clear();
|
|
132
|
+
indexBuffer.buffer.clear();
|
|
114
133
|
}
|
|
115
|
-
|
|
116
|
-
//#endregion
|
|
117
|
-
export { logDataFromGPU };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { TgpuRoot } from '../../core/root/rootTypes.ts';
|
|
2
|
+
import { type Snippet } from '../../data/snippet.ts';
|
|
3
|
+
import type { ResolutionCtx } from '../../internal.ts';
|
|
4
|
+
import { type LogGenerator, type LogResources, type SupportedLogOp } from './types.ts';
|
|
5
|
+
export declare class LogGeneratorNullImpl implements LogGenerator {
|
|
6
|
+
get logResources(): undefined;
|
|
7
|
+
generateLog(): Snippet;
|
|
8
|
+
}
|
|
9
|
+
export declare class LogGeneratorImpl implements LogGenerator {
|
|
10
|
+
#private;
|
|
11
|
+
constructor(root: TgpuRoot);
|
|
12
|
+
/**
|
|
13
|
+
* Generates all necessary resources for serializing arguments for logging purposes.
|
|
14
|
+
*
|
|
15
|
+
* @param ctx Resolution context.
|
|
16
|
+
* @param args Argument snippets. Snippets of UnknownType will be treated as string literals.
|
|
17
|
+
* @returns A snippet containing the call to the logging function.
|
|
18
|
+
*/
|
|
19
|
+
generateLog(ctx: ResolutionCtx, op: SupportedLogOp, args: Snippet[]): Snippet;
|
|
20
|
+
get logResources(): LogResources | undefined;
|
|
21
|
+
}
|
|
@@ -1,88 +1,93 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { stitch } from "../../core/resolve/stitch.js";
|
|
2
|
+
import { shaderStageSlot } from "../../core/slot/internalSlots.js";
|
|
3
|
+
import { arrayOf } from "../../data/array.js";
|
|
4
|
+
import { atomic } from "../../data/atomic.js";
|
|
3
5
|
import { UnknownData, unptr } from "../../data/dataTypes.js";
|
|
6
|
+
import { u32 } from "../../data/numeric.js";
|
|
4
7
|
import { snip } from "../../data/snippet.js";
|
|
8
|
+
import { struct } from "../../data/struct.js";
|
|
9
|
+
import { Void, } from "../../data/wgslTypes.js";
|
|
5
10
|
import { invariant } from "../../errors.js";
|
|
6
|
-
import {
|
|
11
|
+
import { $internal } from "../../shared/symbols.js";
|
|
12
|
+
import { logger } from "../../tgpuLogger.js";
|
|
7
13
|
import { convertToCommonType } from "../conversion.js";
|
|
8
|
-
import { u32 } from "../../data/numeric.js";
|
|
9
14
|
import { concretizeSnippet } from "../generationHelpers.js";
|
|
10
|
-
import { struct } from "../../data/struct.js";
|
|
11
|
-
import { shaderStageSlot } from "../../core/slot/internalSlots.js";
|
|
12
|
-
import { arrayOf } from "../../data/array.js";
|
|
13
|
-
import { atomic } from "../../data/atomic.js";
|
|
14
15
|
import { createLoggingFunction } from "./serializers.js";
|
|
15
|
-
|
|
16
|
-
//#region src/tgsl/consoleLog/logGenerator.ts
|
|
16
|
+
import {} from "./types.js";
|
|
17
17
|
const defaultOptions = {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
};
|
|
22
|
-
const fallbackSnippet = snip("/* console.log() */", Void, "runtime");
|
|
23
|
-
var LogGeneratorNullImpl = class {
|
|
24
|
-
get logResources() {}
|
|
25
|
-
generateLog() {
|
|
26
|
-
console.warn("'console.log' is only supported when resolving pipelines.");
|
|
27
|
-
return fallbackSnippet;
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
var LogGeneratorImpl = class {
|
|
31
|
-
#options;
|
|
32
|
-
#logIdToMeta;
|
|
33
|
-
#firstUnusedId = 1;
|
|
34
|
-
#indexBuffer;
|
|
35
|
-
#dataBuffer;
|
|
36
|
-
constructor(root) {
|
|
37
|
-
this.#options = {
|
|
38
|
-
...defaultOptions,
|
|
39
|
-
...root[$internal].logOptions
|
|
40
|
-
};
|
|
41
|
-
this.#logIdToMeta = /* @__PURE__ */ new Map();
|
|
42
|
-
const SerializedLogData = struct({
|
|
43
|
-
id: u32,
|
|
44
|
-
serializedData: arrayOf(u32, Math.ceil(this.#options.logSizeLimit / 4))
|
|
45
|
-
}).$name("SerializedLogData");
|
|
46
|
-
this.#dataBuffer = root.createMutable(arrayOf(SerializedLogData, this.#options.logCountLimit)).$name("dataBuffer");
|
|
47
|
-
this.#indexBuffer = root.createMutable(atomic(u32)).$name("indexBuffer");
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Generates all necessary resources for serializing arguments for logging purposes.
|
|
51
|
-
*
|
|
52
|
-
* @param ctx Resolution context.
|
|
53
|
-
* @param args Argument snippets. Snippets of UnknownType will be treated as string literals.
|
|
54
|
-
* @returns A snippet containing the call to the logging function.
|
|
55
|
-
*/
|
|
56
|
-
generateLog(ctx, op, args) {
|
|
57
|
-
if (shaderStageSlot.$ === "vertex") {
|
|
58
|
-
console.warn(`'console' operations are not supported in vertex shaders.`);
|
|
59
|
-
return fallbackSnippet;
|
|
60
|
-
}
|
|
61
|
-
const id = this.#firstUnusedId++;
|
|
62
|
-
const concreteArgsWithStrings = args.map((arg) => {
|
|
63
|
-
if (arg.dataType === UnknownData) return arg;
|
|
64
|
-
const converted = convertToCommonType(ctx, [arg], [unptr(arg.dataType)])?.[0];
|
|
65
|
-
invariant(converted, `Internal error. Expected type ${arg.dataType} to be convertible to ${unptr(arg.dataType)}`);
|
|
66
|
-
return converted;
|
|
67
|
-
}).map(concretizeSnippet);
|
|
68
|
-
const concreteArgs = concreteArgsWithStrings.filter((arg) => arg.dataType !== UnknownData);
|
|
69
|
-
const logFn = createLoggingFunction(id, concreteArgs.map((e) => e.dataType), this.#dataBuffer, this.#indexBuffer, this.#options);
|
|
70
|
-
const functionSnippet = snip(stitch`${ctx.resolve(logFn).value}(${concreteArgs})`, Void, "runtime");
|
|
71
|
-
this.#logIdToMeta.set(id, {
|
|
72
|
-
op,
|
|
73
|
-
argTypes: concreteArgsWithStrings.map((e) => e?.dataType === UnknownData ? e?.value : e?.dataType)
|
|
74
|
-
});
|
|
75
|
-
return functionSnippet;
|
|
76
|
-
}
|
|
77
|
-
get logResources() {
|
|
78
|
-
return this.#firstUnusedId === 1 ? void 0 : {
|
|
79
|
-
dataBuffer: this.#dataBuffer,
|
|
80
|
-
indexBuffer: this.#indexBuffer,
|
|
81
|
-
options: this.#options,
|
|
82
|
-
logIdToMeta: this.#logIdToMeta
|
|
83
|
-
};
|
|
84
|
-
}
|
|
18
|
+
logCountLimit: 64,
|
|
19
|
+
logSizeLimit: 252,
|
|
20
|
+
messagePrefix: ' GPU ',
|
|
85
21
|
};
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
22
|
+
const fallbackSnippet = snip('/* console.log() */', Void, /* origin */ 'runtime');
|
|
23
|
+
export class LogGeneratorNullImpl {
|
|
24
|
+
get logResources() {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
generateLog() {
|
|
28
|
+
logger.warn('fallback', "'console.log' is only supported when resolving pipelines.");
|
|
29
|
+
return fallbackSnippet;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export class LogGeneratorImpl {
|
|
33
|
+
#options;
|
|
34
|
+
#logIdToMeta;
|
|
35
|
+
#firstUnusedId = 1;
|
|
36
|
+
#indexBuffer;
|
|
37
|
+
#dataBuffer;
|
|
38
|
+
constructor(root) {
|
|
39
|
+
this.#options = { ...defaultOptions, ...root[$internal].logOptions };
|
|
40
|
+
this.#logIdToMeta = new Map();
|
|
41
|
+
const SerializedLogData = struct({
|
|
42
|
+
id: u32,
|
|
43
|
+
serializedData: arrayOf(u32, Math.ceil(this.#options.logSizeLimit / 4)),
|
|
44
|
+
}).$name('SerializedLogData');
|
|
45
|
+
this.#dataBuffer = root
|
|
46
|
+
.createMutable(arrayOf(SerializedLogData, this.#options.logCountLimit))
|
|
47
|
+
.$name('dataBuffer');
|
|
48
|
+
this.#indexBuffer = root.createMutable(atomic(u32)).$name('indexBuffer');
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Generates all necessary resources for serializing arguments for logging purposes.
|
|
52
|
+
*
|
|
53
|
+
* @param ctx Resolution context.
|
|
54
|
+
* @param args Argument snippets. Snippets of UnknownType will be treated as string literals.
|
|
55
|
+
* @returns A snippet containing the call to the logging function.
|
|
56
|
+
*/
|
|
57
|
+
generateLog(ctx, op, args) {
|
|
58
|
+
if (shaderStageSlot.$ === 'vertex') {
|
|
59
|
+
logger.warn('suspicious', `'console' operations are not supported in vertex shaders.`);
|
|
60
|
+
return fallbackSnippet;
|
|
61
|
+
}
|
|
62
|
+
const id = this.#firstUnusedId++;
|
|
63
|
+
const concreteArgsWithStrings = args
|
|
64
|
+
.map((arg) => {
|
|
65
|
+
if (arg.dataType === UnknownData) {
|
|
66
|
+
return arg;
|
|
67
|
+
}
|
|
68
|
+
const converted = convertToCommonType(ctx, [arg], [unptr(arg.dataType)])?.[0];
|
|
69
|
+
invariant(converted, `Internal error. Expected type ${arg.dataType} to be convertible to ${unptr(arg.dataType)}`);
|
|
70
|
+
return converted;
|
|
71
|
+
})
|
|
72
|
+
.map(concretizeSnippet);
|
|
73
|
+
const concreteArgs = concreteArgsWithStrings.filter((arg) => arg.dataType !== UnknownData);
|
|
74
|
+
const logFn = createLoggingFunction(id, concreteArgs.map((e) => e.dataType), this.#dataBuffer, this.#indexBuffer, this.#options);
|
|
75
|
+
const functionSnippet = snip(stitch `${ctx.resolve(logFn).value}(${concreteArgs})`, Void,
|
|
76
|
+
/* origin */ 'runtime');
|
|
77
|
+
this.#logIdToMeta.set(id, {
|
|
78
|
+
op,
|
|
79
|
+
argTypes: concreteArgsWithStrings.map((e) => e?.dataType === UnknownData ? e?.value : e?.dataType),
|
|
80
|
+
});
|
|
81
|
+
return functionSnippet;
|
|
82
|
+
}
|
|
83
|
+
get logResources() {
|
|
84
|
+
return this.#firstUnusedId === 1
|
|
85
|
+
? undefined
|
|
86
|
+
: {
|
|
87
|
+
dataBuffer: this.#dataBuffer,
|
|
88
|
+
indexBuffer: this.#indexBuffer,
|
|
89
|
+
options: this.#options,
|
|
90
|
+
logIdToMeta: this.#logIdToMeta,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { TgpuMutable } from '../../core/buffer/bufferBinding.ts';
|
|
2
|
+
import { type TgpuFn } from '../../core/function/tgpuFn.ts';
|
|
3
|
+
import { type AnyWgslData, type Atomic, type U32, type Void, type WgslArray } from '../../data/wgslTypes.ts';
|
|
4
|
+
import type { LogGeneratorOptions, SerializedLogCallData } from './types.ts';
|
|
5
|
+
type SerializerMap = {
|
|
6
|
+
[K in AnyWgslData['type']]?: TgpuFn<(args_0: Extract<AnyWgslData, {
|
|
7
|
+
type: K;
|
|
8
|
+
}>) => Void>;
|
|
9
|
+
};
|
|
10
|
+
export declare const serializerMap: SerializerMap;
|
|
11
|
+
/**
|
|
12
|
+
* Creates a TGPU function that serializes data to the log buffer.
|
|
13
|
+
*
|
|
14
|
+
* @param id - Identifier for this logging function instance
|
|
15
|
+
* @param dataTypes - Array of WGSL data types that will be logged by this function
|
|
16
|
+
* @param dataBuffer - Mutable buffer array to store serialized log call data
|
|
17
|
+
* @param indexBuffer - Atomic counter buffer to track the next available log data slot
|
|
18
|
+
* @param logOptions - Configuration options
|
|
19
|
+
*/
|
|
20
|
+
export declare function createLoggingFunction(id: number, dataTypes: AnyWgslData[], dataBuffer: TgpuMutable<WgslArray<SerializedLogCallData>>, indexBuffer: TgpuMutable<Atomic<U32>>, logOptions: Required<LogGeneratorOptions>): TgpuFn;
|
|
21
|
+
export {};
|