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/partialIO.js
CHANGED
|
@@ -1,120 +1,131 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { isDisarray, isUnstruct } from "./dataTypes.js";
|
|
3
|
-
import { alignmentOf } from "./alignmentOf.js";
|
|
1
|
+
import { BufferWriter, getSystemEndianness } from 'typed-binary';
|
|
4
2
|
import { roundUp } from "../mathUtils.js";
|
|
5
|
-
import {
|
|
6
|
-
import { offsetsForProps } from "./offsets.js";
|
|
3
|
+
import { alignmentOf } from "./alignmentOf.js";
|
|
7
4
|
import { getCompiledWriter } from "./compiledIO.js";
|
|
8
5
|
import { writeData } from "./dataIO.js";
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
import { isDisarray, isUnstruct } from "./dataTypes.js";
|
|
7
|
+
import { offsetsForProps } from "./offsets.js";
|
|
8
|
+
import { sizeOf } from "./sizeOf.js";
|
|
9
|
+
import { isWgslArray, isWgslStruct } from "./wgslTypes.js";
|
|
12
10
|
/**
|
|
13
|
-
* Converts `{idx, value}[]` sparse arrays into `Record<number, T>` format.
|
|
14
|
-
*/
|
|
15
|
-
function convertPartialToPatch(schema, data) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
11
|
+
* Converts `{idx, value}[]` sparse arrays into `Record<number, T>` format.
|
|
12
|
+
*/
|
|
13
|
+
export function convertPartialToPatch(schema, data) {
|
|
14
|
+
if (data === undefined || data === null) {
|
|
15
|
+
return data;
|
|
16
|
+
}
|
|
17
|
+
if (isWgslStruct(schema) || isUnstruct(schema)) {
|
|
18
|
+
const result = {};
|
|
19
|
+
const record = data;
|
|
20
|
+
for (const key of Object.keys(schema.propTypes)) {
|
|
21
|
+
const subSchema = schema.propTypes[key];
|
|
22
|
+
const value = record[key];
|
|
23
|
+
if (value !== undefined && subSchema) {
|
|
24
|
+
result[key] = convertPartialToPatch(subSchema, value);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
if (isWgslArray(schema) || isDisarray(schema)) {
|
|
30
|
+
const arrSchema = schema;
|
|
31
|
+
const result = {};
|
|
32
|
+
for (const { idx, value } of data) {
|
|
33
|
+
result[idx] = convertPartialToPatch(arrSchema.elementType, value);
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
return data;
|
|
34
38
|
}
|
|
35
|
-
const isLittleEndian = getSystemEndianness() ===
|
|
36
|
-
function getPatchInstructions(schema, data, targetBuffer) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
39
|
+
const isLittleEndian = getSystemEndianness() === 'little';
|
|
40
|
+
export function getPatchInstructions(schema, data, targetBuffer) {
|
|
41
|
+
const totalSize = sizeOf(schema);
|
|
42
|
+
if (totalSize === 0 || data === undefined || data === null) {
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
const buf = targetBuffer ?? new ArrayBuffer(totalSize);
|
|
46
|
+
const writer = new BufferWriter(buf);
|
|
47
|
+
const compiledView = new DataView(buf);
|
|
48
|
+
const segments = [];
|
|
49
|
+
function collect(node, value, offset, padding) {
|
|
50
|
+
if (value === undefined || value === null) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (isWgslStruct(node) || isUnstruct(node)) {
|
|
54
|
+
const propOffsets = offsetsForProps(node);
|
|
55
|
+
for (const [key, propOffset] of Object.entries(propOffsets)) {
|
|
56
|
+
const childValue = value[key];
|
|
57
|
+
const subSchema = node.propTypes[key];
|
|
58
|
+
if (childValue !== undefined && subSchema) {
|
|
59
|
+
collect(subSchema, childValue, offset + propOffset.offset, propOffset.padding ?? padding);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (isWgslArray(node) || isDisarray(node)) {
|
|
65
|
+
const arrSchema = node;
|
|
66
|
+
const elementSize = roundUp(sizeOf(arrSchema.elementType), alignmentOf(arrSchema.elementType));
|
|
67
|
+
const elementPadding = elementSize - sizeOf(arrSchema.elementType);
|
|
68
|
+
if (ArrayBuffer.isView(value)) {
|
|
69
|
+
const copyLen = Math.min(value.byteLength, arrSchema.elementCount * elementSize);
|
|
70
|
+
new Uint8Array(buf, offset, copyLen).set(new Uint8Array(value.buffer, value.byteOffset, copyLen));
|
|
71
|
+
segments.push({ start: offset, end: offset + copyLen, padding });
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (Array.isArray(value)) {
|
|
75
|
+
for (let i = 0; i < Math.min(arrSchema.elementCount, value.length); i++) {
|
|
76
|
+
collect(arrSchema.elementType, value[i], offset + i * elementSize, elementPadding);
|
|
77
|
+
}
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const sparse = value;
|
|
81
|
+
for (const key of Object.keys(sparse)) {
|
|
82
|
+
const idx = Number(key);
|
|
83
|
+
if (!Number.isNaN(idx)) {
|
|
84
|
+
collect(arrSchema.elementType, sparse[key], offset + idx * elementSize, elementPadding);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const leafSize = sizeOf(node);
|
|
90
|
+
const compiledWriter = getCompiledWriter(node);
|
|
91
|
+
if (compiledWriter) {
|
|
92
|
+
compiledWriter(compiledView, offset, value, isLittleEndian, offset + leafSize);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
writer.seekTo(offset);
|
|
96
|
+
writeData(writer, node, value);
|
|
97
|
+
}
|
|
98
|
+
segments.push({ start: offset, end: offset + leafSize, padding });
|
|
99
|
+
}
|
|
100
|
+
collect(schema, data, 0);
|
|
101
|
+
const instructions = [];
|
|
102
|
+
let run = null;
|
|
103
|
+
for (const seg of segments) {
|
|
104
|
+
if (run && seg.start === run.end + (run.padding ?? 0)) {
|
|
105
|
+
run = { start: run.start, end: seg.end, padding: seg.padding };
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
if (run) {
|
|
109
|
+
instructions.push({
|
|
110
|
+
gpuOffset: run.start,
|
|
111
|
+
data: new Uint8Array(buf, run.start, run.end - run.start).slice(),
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
run = seg;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (run) {
|
|
118
|
+
instructions.push({
|
|
119
|
+
gpuOffset: run.start,
|
|
120
|
+
data: new Uint8Array(buf, run.start, run.end - run.start).slice(),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
return instructions;
|
|
112
124
|
}
|
|
113
|
-
function patchArrayBuffer(buffer, schema, data) {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
125
|
+
export function patchArrayBuffer(buffer, schema, data) {
|
|
126
|
+
const instructions = getPatchInstructions(schema, data, buffer);
|
|
127
|
+
const mappedView = new Uint8Array(buffer);
|
|
128
|
+
for (const { data, gpuOffset } of instructions) {
|
|
129
|
+
mappedView.set(data, gpuOffset);
|
|
130
|
+
}
|
|
117
131
|
}
|
|
118
|
-
|
|
119
|
-
//#endregion
|
|
120
|
-
export { convertPartialToPatch, getPatchInstructions, patchArrayBuffer };
|
package/data/ptr.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Ptr, StorableData } from
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
declare function
|
|
6
|
-
declare function
|
|
7
|
-
declare function
|
|
8
|
-
declare function
|
|
9
|
-
declare function
|
|
10
|
-
declare function
|
|
11
|
-
|
|
12
|
-
export
|
|
1
|
+
import { type Origin } from './snippet.ts';
|
|
2
|
+
import type { Access, AddressSpace, BaseData, Ptr, StorableData } from './wgslTypes.ts';
|
|
3
|
+
export declare function ptrFn<T extends StorableData>(inner: T): Ptr<'function', T, 'read-write'>;
|
|
4
|
+
export declare function ptrPrivate<T extends StorableData>(inner: T): Ptr<'private', T, 'read-write'>;
|
|
5
|
+
export declare function ptrWorkgroup<T extends StorableData>(inner: T): Ptr<'workgroup', T, 'read-write'>;
|
|
6
|
+
export declare function ptrStorage<T extends StorableData, TAccess extends 'read' | 'read-write' = 'read'>(inner: T, access?: TAccess): Ptr<'storage', T, TAccess>;
|
|
7
|
+
export declare function ptrUniform<T extends StorableData>(inner: T): Ptr<'uniform', T, 'read'>;
|
|
8
|
+
export declare function ptrHandle<T extends StorableData>(inner: T): Ptr<'handle', T, 'read'>;
|
|
9
|
+
export declare function INTERNAL_createPtr<TAddressSpace extends AddressSpace, TInner extends BaseData, TAccess extends Access>(addressSpace: TAddressSpace, inner: TInner, access: TAccess, implicit?: boolean): Ptr<TAddressSpace, TInner, TAccess>;
|
|
10
|
+
export declare function createPtrFromOrigin(origin: Origin, innerDataType: StorableData): Ptr | undefined;
|
|
11
|
+
export declare function implicitFrom(ptr: Ptr): Ptr;
|
|
12
|
+
export declare function explicitFrom(ptr: Ptr): Ptr;
|
package/data/ptr.js
CHANGED
|
@@ -1,46 +1,44 @@
|
|
|
1
1
|
import { $internal } from "../shared/symbols.js";
|
|
2
2
|
import { originToPtrParams } from "./snippet.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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
//#endregion
|
|
46
|
-
export { createPtrFromOrigin, explicitFrom, implicitFrom, ptrFn, ptrHandle, ptrPrivate, ptrStorage, ptrUniform, ptrWorkgroup };
|
|
3
|
+
export function ptrFn(inner) {
|
|
4
|
+
return INTERNAL_createPtr('function', inner, 'read-write');
|
|
5
|
+
}
|
|
6
|
+
export function ptrPrivate(inner) {
|
|
7
|
+
return INTERNAL_createPtr('private', inner, 'read-write');
|
|
8
|
+
}
|
|
9
|
+
export function ptrWorkgroup(inner) {
|
|
10
|
+
return INTERNAL_createPtr('workgroup', inner, 'read-write');
|
|
11
|
+
}
|
|
12
|
+
export function ptrStorage(inner, access = 'read') {
|
|
13
|
+
return INTERNAL_createPtr('storage', inner, access);
|
|
14
|
+
}
|
|
15
|
+
export function ptrUniform(inner) {
|
|
16
|
+
return INTERNAL_createPtr('uniform', inner, 'read');
|
|
17
|
+
}
|
|
18
|
+
export function ptrHandle(inner) {
|
|
19
|
+
return INTERNAL_createPtr('handle', inner, 'read');
|
|
20
|
+
}
|
|
21
|
+
export function INTERNAL_createPtr(addressSpace, inner, access, implicit = false) {
|
|
22
|
+
return {
|
|
23
|
+
[$internal]: {},
|
|
24
|
+
type: 'ptr',
|
|
25
|
+
addressSpace,
|
|
26
|
+
inner,
|
|
27
|
+
access,
|
|
28
|
+
implicit,
|
|
29
|
+
toString: () => `ptr<${addressSpace}, ${inner}, ${access}>`,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function createPtrFromOrigin(origin, innerDataType) {
|
|
33
|
+
const ptrParams = originToPtrParams[origin];
|
|
34
|
+
if (ptrParams) {
|
|
35
|
+
return INTERNAL_createPtr(ptrParams.space, innerDataType, ptrParams.access);
|
|
36
|
+
}
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
export function implicitFrom(ptr) {
|
|
40
|
+
return INTERNAL_createPtr(ptr.addressSpace, ptr.inner, ptr.access, /* implicit */ true);
|
|
41
|
+
}
|
|
42
|
+
export function explicitFrom(ptr) {
|
|
43
|
+
return INTERNAL_createPtr(ptr.addressSpace, ptr.inner, ptr.access, /* implicit */ false);
|
|
44
|
+
}
|
package/data/ref.d.ts
CHANGED
|
@@ -1,26 +1,24 @@
|
|
|
1
|
-
import { $internal } from
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
//#region src/data/ref.d.ts
|
|
1
|
+
import { $internal, $ownSnippet, $resolve } from '../shared/symbols.ts';
|
|
2
|
+
import type { DualFn, SelfResolvable } from '../types.ts';
|
|
3
|
+
import { type ResolvedSnippet, type Snippet } from './snippet.ts';
|
|
4
|
+
import { type Ptr } from './wgslTypes.ts';
|
|
7
5
|
interface ref<T> {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
6
|
+
readonly [$internal]: {
|
|
7
|
+
type: 'ref';
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Derefences the reference, and gives access to the underlying value.
|
|
11
|
+
*
|
|
12
|
+
* @example ```ts
|
|
13
|
+
* const boid = Boid({ pos: d.vec3f(3, 2, 1) });
|
|
14
|
+
* const posRef = d.ref(boid.pos);
|
|
15
|
+
*
|
|
16
|
+
* // Actually updates `boid.pos`
|
|
17
|
+
* posRef.$ = d.vec3f(1, 2, 3);
|
|
18
|
+
* console.log(boid.pos); // Output: vec3f(1, 2, 3)
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
$: T;
|
|
24
22
|
}
|
|
25
23
|
/**
|
|
26
24
|
* A reference to a value `T`. Can be passed to other functions to give them
|
|
@@ -28,10 +26,25 @@ interface ref<T> {
|
|
|
28
26
|
*
|
|
29
27
|
* Conceptually, it represents a WGSL pointer.
|
|
30
28
|
*/
|
|
31
|
-
type _ref<T> = T extends object ? T & ref<T> : ref<T>;
|
|
29
|
+
export type _ref<T> = T extends object ? T & ref<T> : ref<T>;
|
|
32
30
|
type RefFn = DualFn<(<T>(value: T) => _ref<T>)> & {
|
|
33
|
-
|
|
31
|
+
[$internal]: true;
|
|
34
32
|
};
|
|
35
|
-
declare const _ref: RefFn;
|
|
36
|
-
|
|
37
|
-
export
|
|
33
|
+
export declare const _ref: RefFn;
|
|
34
|
+
export declare function isRef<T>(value: unknown): value is ref<T>;
|
|
35
|
+
export declare function INTERNAL_createRef<T>(value: T): ref<T>;
|
|
36
|
+
/**
|
|
37
|
+
* The result of calling `d.ref(...)`. The code responsible for
|
|
38
|
+
* generating shader code can check if the value of a snippet is
|
|
39
|
+
* an instance of `RefOperator`, and act accordingly.
|
|
40
|
+
*/
|
|
41
|
+
export declare class RefOperator implements SelfResolvable {
|
|
42
|
+
#private;
|
|
43
|
+
readonly [$internal]: true;
|
|
44
|
+
readonly snippet: Snippet;
|
|
45
|
+
constructor(snippet: Snippet, ptrType: Ptr | undefined);
|
|
46
|
+
get [$ownSnippet](): Snippet;
|
|
47
|
+
[$resolve](): ResolvedSnippet;
|
|
48
|
+
}
|
|
49
|
+
export declare function derefSnippet(snippet: Snippet): Snippet;
|
|
50
|
+
export {};
|