@luma.gl/core 9.2.6 → 9.3.0-alpha.11
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/dist/adapter/canvas-context.d.ts +6 -162
- package/dist/adapter/canvas-context.d.ts.map +1 -1
- package/dist/adapter/canvas-context.js +5 -419
- package/dist/adapter/canvas-context.js.map +1 -1
- package/dist/adapter/canvas-observer.d.ts +32 -0
- package/dist/adapter/canvas-observer.d.ts.map +1 -0
- package/dist/adapter/canvas-observer.js +90 -0
- package/dist/adapter/canvas-observer.js.map +1 -0
- package/dist/adapter/canvas-surface.d.ts +150 -0
- package/dist/adapter/canvas-surface.d.ts.map +1 -0
- package/dist/adapter/canvas-surface.js +392 -0
- package/dist/adapter/canvas-surface.js.map +1 -0
- package/dist/adapter/device.d.ts +81 -16
- package/dist/adapter/device.d.ts.map +1 -1
- package/dist/adapter/device.js +193 -11
- package/dist/adapter/device.js.map +1 -1
- package/dist/adapter/luma.d.ts.map +1 -1
- package/dist/adapter/luma.js +2 -1
- package/dist/adapter/luma.js.map +1 -1
- package/dist/adapter/presentation-context.d.ts +11 -0
- package/dist/adapter/presentation-context.d.ts.map +1 -0
- package/dist/adapter/presentation-context.js +12 -0
- package/dist/adapter/presentation-context.js.map +1 -0
- package/dist/adapter/resources/buffer.d.ts +1 -1
- package/dist/adapter/resources/buffer.d.ts.map +1 -1
- package/dist/adapter/resources/buffer.js +14 -6
- package/dist/adapter/resources/buffer.js.map +1 -1
- package/dist/adapter/resources/command-buffer.d.ts +3 -1
- package/dist/adapter/resources/command-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/command-buffer.js +3 -1
- package/dist/adapter/resources/command-buffer.js.map +1 -1
- package/dist/adapter/resources/command-encoder.d.ts +30 -7
- package/dist/adapter/resources/command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/command-encoder.js +68 -2
- package/dist/adapter/resources/command-encoder.js.map +1 -1
- package/dist/adapter/resources/compute-pipeline.d.ts +2 -2
- package/dist/adapter/resources/compute-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/fence.d.ts +16 -0
- package/dist/adapter/resources/fence.d.ts.map +1 -0
- package/dist/adapter/resources/fence.js +17 -0
- package/dist/adapter/resources/fence.js.map +1 -0
- package/dist/adapter/resources/framebuffer.d.ts +1 -1
- package/dist/adapter/resources/framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/framebuffer.js +15 -12
- package/dist/adapter/resources/framebuffer.js.map +1 -1
- package/dist/adapter/resources/query-set.d.ts +17 -1
- package/dist/adapter/resources/query-set.d.ts.map +1 -1
- package/dist/adapter/resources/query-set.js.map +1 -1
- package/dist/adapter/resources/render-pipeline.d.ts +28 -10
- package/dist/adapter/resources/render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/render-pipeline.js +21 -2
- package/dist/adapter/resources/render-pipeline.js.map +1 -1
- package/dist/adapter/resources/resource.d.ts +13 -0
- package/dist/adapter/resources/resource.d.ts.map +1 -1
- package/dist/adapter/resources/resource.js +243 -14
- package/dist/adapter/resources/resource.js.map +1 -1
- package/dist/adapter/resources/shader.js +27 -25
- package/dist/adapter/resources/shader.js.map +1 -1
- package/dist/adapter/resources/shared-render-pipeline.d.ts +22 -0
- package/dist/adapter/resources/shared-render-pipeline.d.ts.map +1 -0
- package/dist/adapter/resources/shared-render-pipeline.js +25 -0
- package/dist/adapter/resources/shared-render-pipeline.js.map +1 -0
- package/dist/adapter/resources/texture-view.d.ts +1 -1
- package/dist/adapter/resources/texture-view.d.ts.map +1 -1
- package/dist/adapter/resources/texture.d.ts +168 -28
- package/dist/adapter/resources/texture.d.ts.map +1 -1
- package/dist/adapter/resources/texture.js +284 -25
- package/dist/adapter/resources/texture.js.map +1 -1
- package/dist/adapter/types/attachments.d.ts +1 -1
- package/dist/adapter/types/attachments.d.ts.map +1 -1
- package/dist/adapter/types/buffer-layout.d.ts +1 -1
- package/dist/adapter/types/buffer-layout.d.ts.map +1 -1
- package/dist/adapter/types/parameters.d.ts +3 -1
- package/dist/adapter/types/parameters.d.ts.map +1 -1
- package/dist/adapter/types/parameters.js +1 -0
- package/dist/adapter/types/parameters.js.map +1 -1
- package/dist/adapter/types/shader-layout.d.ts +10 -6
- package/dist/adapter/types/shader-layout.d.ts.map +1 -1
- package/dist/adapter/types/uniforms.d.ts +6 -0
- package/dist/adapter/types/uniforms.d.ts.map +1 -1
- package/dist/adapter-utils/bind-groups.d.ts +9 -0
- package/dist/adapter-utils/bind-groups.d.ts.map +1 -0
- package/dist/adapter-utils/bind-groups.js +41 -0
- package/dist/adapter-utils/bind-groups.js.map +1 -0
- package/dist/adapter-utils/format-compiler-log.d.ts.map +1 -1
- package/dist/adapter-utils/format-compiler-log.js +23 -15
- package/dist/adapter-utils/format-compiler-log.js.map +1 -1
- package/dist/adapter-utils/get-attribute-from-layouts.d.ts +2 -2
- package/dist/adapter-utils/get-attribute-from-layouts.d.ts.map +1 -1
- package/dist/adapter-utils/get-attribute-from-layouts.js +6 -6
- package/dist/adapter-utils/get-attribute-from-layouts.js.map +1 -1
- package/dist/dist.dev.js +2734 -644
- package/dist/dist.min.js +10 -9
- package/dist/factories/bind-group-factory.d.ts +20 -0
- package/dist/factories/bind-group-factory.d.ts.map +1 -0
- package/dist/factories/bind-group-factory.js +88 -0
- package/dist/factories/bind-group-factory.js.map +1 -0
- package/dist/factories/core-module-state.d.ts +7 -0
- package/dist/factories/core-module-state.d.ts.map +1 -0
- package/dist/{shadertypes/data-types/shader-types.js → factories/core-module-state.js} +1 -1
- package/dist/factories/core-module-state.js.map +1 -0
- package/dist/factories/pipeline-factory.d.ts +54 -0
- package/dist/factories/pipeline-factory.d.ts.map +1 -0
- package/dist/factories/pipeline-factory.js +270 -0
- package/dist/factories/pipeline-factory.js.map +1 -0
- package/dist/factories/shader-factory.d.ts +20 -0
- package/dist/factories/shader-factory.d.ts.map +1 -0
- package/dist/factories/shader-factory.js +84 -0
- package/dist/factories/shader-factory.js.map +1 -0
- package/dist/index.cjs +2447 -534
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +30 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -7
- package/dist/index.js.map +1 -1
- package/dist/portable/shader-block-writer.d.ts +51 -0
- package/dist/portable/shader-block-writer.d.ts.map +1 -0
- package/dist/portable/shader-block-writer.js +185 -0
- package/dist/portable/shader-block-writer.js.map +1 -0
- package/dist/portable/uniform-block.d.ts +1 -1
- package/dist/portable/uniform-block.d.ts.map +1 -1
- package/dist/portable/uniform-store.d.ts +55 -24
- package/dist/portable/uniform-store.d.ts.map +1 -1
- package/dist/portable/uniform-store.js +73 -25
- package/dist/portable/uniform-store.js.map +1 -1
- package/dist/shadertypes/data-types/data-type-decoder.d.ts +20 -0
- package/dist/shadertypes/data-types/data-type-decoder.d.ts.map +1 -0
- package/dist/shadertypes/data-types/data-type-decoder.js +79 -0
- package/dist/shadertypes/data-types/data-type-decoder.js.map +1 -0
- package/dist/shadertypes/data-types/data-types.d.ts +31 -12
- package/dist/shadertypes/data-types/data-types.d.ts.map +1 -1
- package/dist/shadertypes/data-types/decode-data-types.d.ts.map +1 -1
- package/dist/shadertypes/data-types/decode-data-types.js +4 -3
- package/dist/shadertypes/data-types/decode-data-types.js.map +1 -1
- package/dist/{image-utils → shadertypes/image-types}/image-types.d.ts +0 -6
- package/dist/shadertypes/image-types/image-types.d.ts.map +1 -0
- package/dist/shadertypes/image-types/image-types.js.map +1 -0
- package/dist/shadertypes/shader-types/shader-block-layout.d.ts +72 -0
- package/dist/shadertypes/shader-types/shader-block-layout.d.ts.map +1 -0
- package/dist/shadertypes/shader-types/shader-block-layout.js +209 -0
- package/dist/shadertypes/shader-types/shader-block-layout.js.map +1 -0
- package/dist/shadertypes/shader-types/shader-type-decoder.d.ts +41 -0
- package/dist/shadertypes/shader-types/shader-type-decoder.d.ts.map +1 -0
- package/dist/shadertypes/{data-types/decode-shader-types.js → shader-types/shader-type-decoder.js} +43 -4
- package/dist/shadertypes/shader-types/shader-type-decoder.js.map +1 -0
- package/dist/shadertypes/shader-types/shader-types.d.ts +101 -0
- package/dist/shadertypes/shader-types/shader-types.d.ts.map +1 -0
- package/dist/shadertypes/shader-types/shader-types.js +30 -0
- package/dist/shadertypes/shader-types/shader-types.js.map +1 -0
- package/dist/shadertypes/texture-types/pixel-utils.d.ts.map +1 -0
- package/dist/shadertypes/{textures → texture-types}/pixel-utils.js +4 -4
- package/dist/shadertypes/texture-types/pixel-utils.js.map +1 -0
- package/dist/shadertypes/texture-types/texture-format-decoder.d.ts +36 -0
- package/dist/shadertypes/texture-types/texture-format-decoder.d.ts.map +1 -0
- package/dist/shadertypes/{textures → texture-types}/texture-format-decoder.js +110 -38
- package/dist/shadertypes/texture-types/texture-format-decoder.js.map +1 -0
- package/dist/shadertypes/texture-types/texture-format-generics.d.ts +34 -0
- package/dist/shadertypes/texture-types/texture-format-generics.d.ts.map +1 -0
- package/dist/shadertypes/texture-types/texture-format-generics.js.map +1 -0
- package/dist/shadertypes/texture-types/texture-format-table.d.ts.map +1 -0
- package/dist/shadertypes/{textures → texture-types}/texture-format-table.js +12 -11
- package/dist/shadertypes/texture-types/texture-format-table.js.map +1 -0
- package/dist/shadertypes/{textures → texture-types}/texture-formats.d.ts +51 -17
- package/dist/shadertypes/texture-types/texture-formats.d.ts.map +1 -0
- package/dist/shadertypes/{textures → texture-types}/texture-formats.js +1 -0
- package/dist/shadertypes/texture-types/texture-formats.js.map +1 -0
- package/dist/shadertypes/texture-types/texture-layout.d.ts +5 -0
- package/dist/shadertypes/texture-types/texture-layout.d.ts.map +1 -0
- package/dist/shadertypes/texture-types/texture-layout.js +41 -0
- package/dist/shadertypes/texture-types/texture-layout.js.map +1 -0
- package/dist/shadertypes/vertex-types/vertex-format-decoder.d.ts +24 -0
- package/dist/shadertypes/vertex-types/vertex-format-decoder.d.ts.map +1 -0
- package/dist/shadertypes/vertex-types/vertex-format-decoder.js +144 -0
- package/dist/shadertypes/vertex-types/vertex-format-decoder.js.map +1 -0
- package/dist/shadertypes/vertex-types/vertex-formats.d.ts +50 -0
- package/dist/shadertypes/vertex-types/vertex-formats.d.ts.map +1 -0
- package/dist/shadertypes/vertex-types/vertex-formats.js.map +1 -0
- package/dist/utils/array-equal.d.ts +1 -1
- package/dist/utils/array-equal.d.ts.map +1 -1
- package/dist/utils/array-equal.js +15 -9
- package/dist/utils/array-equal.js.map +1 -1
- package/dist/utils/assert.d.ts +5 -0
- package/dist/utils/assert.d.ts.map +1 -0
- package/dist/utils/assert.js +17 -0
- package/dist/utils/assert.js.map +1 -0
- package/dist/utils/stats-manager.d.ts.map +1 -1
- package/dist/utils/stats-manager.js +61 -1
- package/dist/utils/stats-manager.js.map +1 -1
- package/package.json +6 -6
- package/src/adapter/canvas-context.ts +7 -556
- package/src/adapter/canvas-observer.ts +130 -0
- package/src/adapter/canvas-surface.ts +521 -0
- package/src/adapter/device.ts +311 -25
- package/src/adapter/luma.ts +1 -0
- package/src/adapter/presentation-context.ts +16 -0
- package/src/adapter/resources/buffer.ts +13 -5
- package/src/adapter/resources/command-buffer.ts +4 -2
- package/src/adapter/resources/command-encoder.ts +101 -10
- package/src/adapter/resources/compute-pipeline.ts +2 -2
- package/src/adapter/resources/fence.ts +32 -0
- package/src/adapter/resources/framebuffer.ts +16 -13
- package/src/adapter/resources/query-set.ts +17 -1
- package/src/adapter/resources/render-pipeline.ts +52 -16
- package/src/adapter/resources/resource.ts +289 -14
- package/src/adapter/resources/shader.ts +28 -28
- package/src/adapter/resources/shared-render-pipeline.ts +40 -0
- package/src/adapter/resources/texture-view.ts +1 -1
- package/src/adapter/resources/texture.ts +427 -49
- package/src/adapter/types/attachments.ts +1 -1
- package/src/adapter/types/buffer-layout.ts +1 -1
- package/src/adapter/types/parameters.ts +4 -1
- package/src/adapter/types/shader-layout.ts +15 -9
- package/src/adapter/types/uniforms.ts +12 -0
- package/src/adapter-utils/bind-groups.ts +71 -0
- package/src/adapter-utils/format-compiler-log.ts +23 -15
- package/src/adapter-utils/get-attribute-from-layouts.ts +8 -11
- package/src/factories/bind-group-factory.ts +157 -0
- package/src/factories/core-module-state.ts +11 -0
- package/src/factories/pipeline-factory.ts +328 -0
- package/src/factories/shader-factory.ts +103 -0
- package/src/index.ts +70 -26
- package/src/portable/shader-block-writer.ts +254 -0
- package/src/portable/uniform-block.ts +1 -1
- package/src/portable/uniform-store.ts +98 -40
- package/src/shadertypes/data-types/data-type-decoder.ts +105 -0
- package/src/shadertypes/data-types/data-types.ts +100 -48
- package/src/shadertypes/data-types/decode-data-types.ts +4 -3
- package/src/{image-utils → shadertypes/image-types}/image-types.ts +0 -7
- package/src/shadertypes/shader-types/shader-block-layout.ts +340 -0
- package/src/shadertypes/{data-types/decode-shader-types.ts → shader-types/shader-type-decoder.ts} +88 -14
- package/src/shadertypes/shader-types/shader-types.ts +207 -0
- package/src/shadertypes/{textures → texture-types}/pixel-utils.ts +4 -4
- package/src/shadertypes/{textures → texture-types}/texture-format-decoder.ts +167 -46
- package/src/shadertypes/{textures → texture-types}/texture-format-generics.ts +42 -48
- package/src/shadertypes/{textures → texture-types}/texture-format-table.ts +12 -11
- package/src/shadertypes/{textures → texture-types}/texture-formats.ts +73 -17
- package/src/shadertypes/texture-types/texture-layout.ts +60 -0
- package/src/shadertypes/vertex-types/vertex-format-decoder.ts +175 -0
- package/src/shadertypes/vertex-types/vertex-formats.ts +196 -0
- package/src/utils/array-equal.ts +21 -9
- package/src/utils/assert.ts +18 -0
- package/src/utils/stats-manager.ts +76 -2
- package/dist/image-utils/image-types.d.ts.map +0 -1
- package/dist/image-utils/image-types.js.map +0 -1
- package/dist/portable/uniform-buffer-layout.d.ts +0 -28
- package/dist/portable/uniform-buffer-layout.d.ts.map +0 -1
- package/dist/portable/uniform-buffer-layout.js +0 -96
- package/dist/portable/uniform-buffer-layout.js.map +0 -1
- package/dist/shadertypes/data-types/decode-shader-types.d.ts +0 -17
- package/dist/shadertypes/data-types/decode-shader-types.d.ts.map +0 -1
- package/dist/shadertypes/data-types/decode-shader-types.js.map +0 -1
- package/dist/shadertypes/data-types/shader-types.d.ts +0 -45
- package/dist/shadertypes/data-types/shader-types.d.ts.map +0 -1
- package/dist/shadertypes/data-types/shader-types.js.map +0 -1
- package/dist/shadertypes/textures/pixel-utils.d.ts.map +0 -1
- package/dist/shadertypes/textures/pixel-utils.js.map +0 -1
- package/dist/shadertypes/textures/texture-format-decoder.d.ts +0 -18
- package/dist/shadertypes/textures/texture-format-decoder.d.ts.map +0 -1
- package/dist/shadertypes/textures/texture-format-decoder.js.map +0 -1
- package/dist/shadertypes/textures/texture-format-generics.d.ts +0 -33
- package/dist/shadertypes/textures/texture-format-generics.d.ts.map +0 -1
- package/dist/shadertypes/textures/texture-format-generics.js.map +0 -1
- package/dist/shadertypes/textures/texture-format-table.d.ts.map +0 -1
- package/dist/shadertypes/textures/texture-format-table.js.map +0 -1
- package/dist/shadertypes/textures/texture-formats.d.ts.map +0 -1
- package/dist/shadertypes/textures/texture-formats.js.map +0 -1
- package/dist/shadertypes/vertex-arrays/decode-vertex-format.d.ts +0 -18
- package/dist/shadertypes/vertex-arrays/decode-vertex-format.d.ts.map +0 -1
- package/dist/shadertypes/vertex-arrays/decode-vertex-format.js +0 -100
- package/dist/shadertypes/vertex-arrays/decode-vertex-format.js.map +0 -1
- package/dist/shadertypes/vertex-arrays/vertex-formats.d.ts +0 -27
- package/dist/shadertypes/vertex-arrays/vertex-formats.d.ts.map +0 -1
- package/dist/shadertypes/vertex-arrays/vertex-formats.js.map +0 -1
- package/src/portable/uniform-buffer-layout.ts +0 -118
- package/src/shadertypes/data-types/shader-types.ts +0 -87
- package/src/shadertypes/vertex-arrays/decode-vertex-format.ts +0 -124
- package/src/shadertypes/vertex-arrays/vertex-formats.ts +0 -91
- /package/dist/{image-utils → shadertypes/image-types}/image-types.js +0 -0
- /package/dist/shadertypes/{textures → texture-types}/pixel-utils.d.ts +0 -0
- /package/dist/shadertypes/{textures → texture-types}/texture-format-generics.js +0 -0
- /package/dist/shadertypes/{textures → texture-types}/texture-format-table.d.ts +0 -0
- /package/dist/shadertypes/{vertex-arrays → vertex-types}/vertex-formats.js +0 -0
|
@@ -3,8 +3,19 @@
|
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
import { Buffer } from "../adapter/resources/buffer.js";
|
|
5
5
|
import { log } from "../utils/log.js";
|
|
6
|
+
import { makeShaderBlockLayout } from "../shadertypes/shader-types/shader-block-layout.js";
|
|
6
7
|
import { UniformBlock } from "./uniform-block.js";
|
|
7
|
-
import {
|
|
8
|
+
import { ShaderBlockWriter } from "./shader-block-writer.js";
|
|
9
|
+
/**
|
|
10
|
+
* Smallest buffer size that can be used for uniform buffers.
|
|
11
|
+
*
|
|
12
|
+
* This is an allocation policy rather than part of {@link ShaderBlockLayout}.
|
|
13
|
+
* Layouts report the exact packed size, while the store applies any minimum
|
|
14
|
+
* buffer-size rule when allocating GPU buffers.
|
|
15
|
+
*
|
|
16
|
+
* TODO - does this depend on device?
|
|
17
|
+
*/
|
|
18
|
+
const minUniformBufferSize = 1024;
|
|
8
19
|
/**
|
|
9
20
|
* A uniform store holds a uniform values for one or more uniform blocks,
|
|
10
21
|
* - It can generate binary data for any uniform buffer
|
|
@@ -13,25 +24,33 @@ import { UniformBufferLayout } from "./uniform-buffer-layout.js";
|
|
|
13
24
|
* - It performs some book keeping on what has changed to minimize unnecessary writes to uniform buffers.
|
|
14
25
|
*/
|
|
15
26
|
export class UniformStore {
|
|
27
|
+
/** Device used to infer layout and allocate buffers. */
|
|
28
|
+
device;
|
|
16
29
|
/** Stores the uniform values for each uniform block */
|
|
17
30
|
uniformBlocks = new Map();
|
|
18
|
-
/**
|
|
19
|
-
|
|
31
|
+
/** Flattened layout metadata for each block. */
|
|
32
|
+
shaderBlockLayouts = new Map();
|
|
33
|
+
/** Serializers for block-backed uniform data. */
|
|
34
|
+
shaderBlockWriters = new Map();
|
|
20
35
|
/** Actual buffer for the blocks */
|
|
21
36
|
uniformBuffers = new Map();
|
|
22
37
|
/**
|
|
23
|
-
*
|
|
24
|
-
* @param blocks
|
|
38
|
+
* Creates a new {@link UniformStore} for the supplied device and block definitions.
|
|
25
39
|
*/
|
|
26
|
-
constructor(blocks) {
|
|
40
|
+
constructor(device, blocks) {
|
|
41
|
+
this.device = device;
|
|
27
42
|
for (const [bufferName, block] of Object.entries(blocks)) {
|
|
28
43
|
const uniformBufferName = bufferName;
|
|
29
44
|
// Create a layout object to help us generate correctly formatted binary uniform buffers
|
|
30
|
-
const
|
|
31
|
-
|
|
45
|
+
const shaderBlockLayout = makeShaderBlockLayout(block.uniformTypes ?? {}, {
|
|
46
|
+
layout: block.layout ?? getDefaultUniformBufferLayout(device)
|
|
47
|
+
});
|
|
48
|
+
const shaderBlockWriter = new ShaderBlockWriter(shaderBlockLayout);
|
|
49
|
+
this.shaderBlockLayouts.set(uniformBufferName, shaderBlockLayout);
|
|
50
|
+
this.shaderBlockWriters.set(uniformBufferName, shaderBlockWriter);
|
|
32
51
|
// Create a Uniform block to store the uniforms for each buffer.
|
|
33
52
|
const uniformBlock = new UniformBlock({ name: bufferName });
|
|
34
|
-
uniformBlock.setUniforms(block.defaultUniforms || {});
|
|
53
|
+
uniformBlock.setUniforms(shaderBlockWriter.getFlatUniformValues(block.defaultUniforms || {}));
|
|
35
54
|
this.uniformBlocks.set(uniformBufferName, uniformBlock);
|
|
36
55
|
}
|
|
37
56
|
}
|
|
@@ -43,36 +62,51 @@ export class UniformStore {
|
|
|
43
62
|
}
|
|
44
63
|
/**
|
|
45
64
|
* Set uniforms
|
|
46
|
-
*
|
|
65
|
+
*
|
|
66
|
+
* Makes all group properties partial and eagerly propagates changes to any
|
|
67
|
+
* managed GPU buffers.
|
|
47
68
|
*/
|
|
48
69
|
setUniforms(uniforms) {
|
|
49
70
|
for (const [blockName, uniformValues] of Object.entries(uniforms)) {
|
|
50
|
-
|
|
71
|
+
const uniformBufferName = blockName;
|
|
72
|
+
const shaderBlockWriter = this.shaderBlockWriters.get(uniformBufferName);
|
|
73
|
+
const flattenedUniforms = shaderBlockWriter?.getFlatUniformValues((uniformValues || {}));
|
|
74
|
+
this.uniformBlocks.get(uniformBufferName)?.setUniforms(flattenedUniforms || {});
|
|
51
75
|
// We leverage logging in updateUniformBuffers(), even though slightly less efficient
|
|
52
76
|
// this.updateUniformBuffer(blockName);
|
|
53
77
|
}
|
|
54
78
|
this.updateUniformBuffers();
|
|
55
79
|
}
|
|
56
|
-
/**
|
|
80
|
+
/**
|
|
81
|
+
* Returns the allocation size for the named uniform buffer.
|
|
82
|
+
*
|
|
83
|
+
* This may exceed the packed layout size because minimum buffer-size policy is
|
|
84
|
+
* applied at the store layer.
|
|
85
|
+
*/
|
|
57
86
|
getUniformBufferByteLength(uniformBufferName) {
|
|
58
|
-
|
|
87
|
+
const packedByteLength = this.shaderBlockLayouts.get(uniformBufferName)?.byteLength || 0;
|
|
88
|
+
return Math.max(packedByteLength, minUniformBufferSize);
|
|
59
89
|
}
|
|
60
|
-
/**
|
|
90
|
+
/**
|
|
91
|
+
* Returns packed binary data that can be uploaded to the named uniform buffer.
|
|
92
|
+
*
|
|
93
|
+
* The returned view length matches the packed block size and is not padded to
|
|
94
|
+
* the store's minimum allocation size.
|
|
95
|
+
*/
|
|
61
96
|
getUniformBufferData(uniformBufferName) {
|
|
62
97
|
const uniformValues = this.uniformBlocks.get(uniformBufferName)?.getAllUniforms() || {};
|
|
63
|
-
|
|
64
|
-
return
|
|
98
|
+
const shaderBlockWriter = this.shaderBlockWriters.get(uniformBufferName);
|
|
99
|
+
return shaderBlockWriter?.getData(uniformValues) || new Uint8Array(0);
|
|
65
100
|
}
|
|
66
101
|
/**
|
|
67
|
-
* Creates an unmanaged uniform buffer
|
|
68
|
-
* The new buffer is initialized with current / supplied values
|
|
102
|
+
* Creates an unmanaged uniform buffer initialized with the current or supplied values.
|
|
69
103
|
*/
|
|
70
|
-
createUniformBuffer(
|
|
104
|
+
createUniformBuffer(uniformBufferName, uniforms) {
|
|
71
105
|
if (uniforms) {
|
|
72
106
|
this.setUniforms(uniforms);
|
|
73
107
|
}
|
|
74
108
|
const byteLength = this.getUniformBufferByteLength(uniformBufferName);
|
|
75
|
-
const uniformBuffer = device.createBuffer({
|
|
109
|
+
const uniformBuffer = this.device.createBuffer({
|
|
76
110
|
usage: Buffer.UNIFORM | Buffer.COPY_DST,
|
|
77
111
|
byteLength
|
|
78
112
|
});
|
|
@@ -81,11 +115,11 @@ export class UniformStore {
|
|
|
81
115
|
uniformBuffer.write(uniformBufferData);
|
|
82
116
|
return uniformBuffer;
|
|
83
117
|
}
|
|
84
|
-
/**
|
|
85
|
-
getManagedUniformBuffer(
|
|
118
|
+
/** Returns the managed uniform buffer for the named block. */
|
|
119
|
+
getManagedUniformBuffer(uniformBufferName) {
|
|
86
120
|
if (!this.uniformBuffers.get(uniformBufferName)) {
|
|
87
121
|
const byteLength = this.getUniformBufferByteLength(uniformBufferName);
|
|
88
|
-
const uniformBuffer = device.createBuffer({
|
|
122
|
+
const uniformBuffer = this.device.createBuffer({
|
|
89
123
|
usage: Buffer.UNIFORM | Buffer.COPY_DST,
|
|
90
124
|
byteLength
|
|
91
125
|
});
|
|
@@ -95,7 +129,11 @@ export class UniformStore {
|
|
|
95
129
|
// @ts-ignore
|
|
96
130
|
return this.uniformBuffers.get(uniformBufferName);
|
|
97
131
|
}
|
|
98
|
-
/**
|
|
132
|
+
/**
|
|
133
|
+
* Updates every managed uniform buffer whose source uniforms have changed.
|
|
134
|
+
*
|
|
135
|
+
* @returns The first redraw reason encountered, or `false` if nothing changed.
|
|
136
|
+
*/
|
|
99
137
|
updateUniformBuffers() {
|
|
100
138
|
let reason = false;
|
|
101
139
|
for (const uniformBufferName of this.uniformBlocks.keys()) {
|
|
@@ -107,7 +145,11 @@ export class UniformStore {
|
|
|
107
145
|
}
|
|
108
146
|
return reason;
|
|
109
147
|
}
|
|
110
|
-
/**
|
|
148
|
+
/**
|
|
149
|
+
* Updates one managed uniform buffer if its corresponding block is dirty.
|
|
150
|
+
*
|
|
151
|
+
* @returns The redraw reason for the update, or `false` if no write occurred.
|
|
152
|
+
*/
|
|
111
153
|
updateUniformBuffer(uniformBufferName) {
|
|
112
154
|
const uniformBlock = this.uniformBlocks.get(uniformBufferName);
|
|
113
155
|
let uniformBuffer = this.uniformBuffers.get(uniformBufferName);
|
|
@@ -125,4 +167,10 @@ export class UniformStore {
|
|
|
125
167
|
return reason;
|
|
126
168
|
}
|
|
127
169
|
}
|
|
170
|
+
/**
|
|
171
|
+
* Returns the default uniform-buffer layout for the supplied device.
|
|
172
|
+
*/
|
|
173
|
+
function getDefaultUniformBufferLayout(device) {
|
|
174
|
+
return device.type === 'webgpu' ? 'wgsl-uniform' : 'std140';
|
|
175
|
+
}
|
|
128
176
|
//# sourceMappingURL=uniform-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uniform-store.js","sourceRoot":"","sources":["../../src/portable/uniform-store.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAKpC,OAAO,EAAC,MAAM,EAAC,uCAAoC;AACnD,OAAO,EAAC,GAAG,EAAC,wBAAqB;AACjC,OAAO,EAAC,YAAY,EAAC,2BAAwB;AAC7C,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"uniform-store.js","sourceRoot":"","sources":["../../src/portable/uniform-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { TypedArray, TypedArrayConstructor } from "../../types.js";
|
|
2
|
+
import { SignedDataType, NormalizedDataType, DataTypeInfo, TypedArrayConstructorT } from "./data-types.js";
|
|
3
|
+
export declare class DataTypeDecoder {
|
|
4
|
+
/**
|
|
5
|
+
* Gets info about a data type constant (signed or normalized)
|
|
6
|
+
* @returns underlying primitive / signed types, byte length, normalization, integer, signed flags
|
|
7
|
+
*/
|
|
8
|
+
getDataTypeInfo<T extends NormalizedDataType = NormalizedDataType>(type: T): DataTypeInfo<T>;
|
|
9
|
+
/** Build a vertex format from a signed data type and a component */
|
|
10
|
+
getNormalizedDataType(signedDataType: SignedDataType): NormalizedDataType;
|
|
11
|
+
/** Align offset to 1, 2 or 4 elements (4, 8 or 16 bytes) */
|
|
12
|
+
alignTo(size: number, count: number): number;
|
|
13
|
+
/** Returns the VariableShaderType that corresponds to a typed array */
|
|
14
|
+
getDataType(arrayOrType: TypedArray | TypedArrayConstructor): SignedDataType;
|
|
15
|
+
/** Returns the TypedArray that corresponds to a shader data type */
|
|
16
|
+
getTypedArrayConstructor<T extends NormalizedDataType>(type: NormalizedDataType): TypedArrayConstructorT<T>;
|
|
17
|
+
}
|
|
18
|
+
/** Entry point for decoding luma.gl data types */
|
|
19
|
+
export declare const dataTypeDecoder: DataTypeDecoder;
|
|
20
|
+
//# sourceMappingURL=data-type-decoder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-type-decoder.d.ts","sourceRoot":"","sources":["../../../src/shadertypes/data-types/data-type-decoder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,UAAU,EAAE,qBAAqB,EAAC,uBAAoB;AAC9D,OAAO,EAEL,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,sBAAsB,EACvB,wBAAqB;AAEtB,qBAAa,eAAe;IAC1B;;;OAGG;IACH,eAAe,CAAC,CAAC,SAAS,kBAAkB,GAAG,kBAAkB,EAAE,IAAI,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAgB5F,oEAAoE;IACpE,qBAAqB,CAAC,cAAc,EAAE,cAAc,GAAG,kBAAkB;IAYzE,4DAA4D;IAC5D,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAS5C,uEAAuE;IACvE,WAAW,CAAC,WAAW,EAAE,UAAU,GAAG,qBAAqB,GAAG,cAAc;IAY5E,oEAAoE;IACpE,wBAAwB,CAAC,CAAC,SAAS,kBAAkB,EACnD,IAAI,EAAE,kBAAkB,GACvB,sBAAsB,CAAC,CAAC,CAAC;CAI7B;AAED,kDAAkD;AAClD,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
export class DataTypeDecoder {
|
|
5
|
+
/**
|
|
6
|
+
* Gets info about a data type constant (signed or normalized)
|
|
7
|
+
* @returns underlying primitive / signed types, byte length, normalization, integer, signed flags
|
|
8
|
+
*/
|
|
9
|
+
getDataTypeInfo(type) {
|
|
10
|
+
const [signedType, primitiveType, byteLength] = NORMALIZED_TYPE_MAP[type];
|
|
11
|
+
const normalized = type.includes('norm');
|
|
12
|
+
const integer = !normalized && !type.startsWith('float');
|
|
13
|
+
const signed = type.startsWith('s');
|
|
14
|
+
return {
|
|
15
|
+
signedType: signedType,
|
|
16
|
+
primitiveType: primitiveType,
|
|
17
|
+
byteLength: byteLength,
|
|
18
|
+
normalized: normalized,
|
|
19
|
+
integer: integer,
|
|
20
|
+
signed: signed
|
|
21
|
+
// TODO - add webglOnly flag
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/** Build a vertex format from a signed data type and a component */
|
|
25
|
+
getNormalizedDataType(signedDataType) {
|
|
26
|
+
const dataType = signedDataType;
|
|
27
|
+
// biome-ignore format: preserve layout
|
|
28
|
+
switch (dataType) {
|
|
29
|
+
case 'uint8': return 'unorm8';
|
|
30
|
+
case 'sint8': return 'snorm8';
|
|
31
|
+
case 'uint16': return 'unorm16';
|
|
32
|
+
case 'sint16': return 'snorm16';
|
|
33
|
+
default: return dataType;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/** Align offset to 1, 2 or 4 elements (4, 8 or 16 bytes) */
|
|
37
|
+
alignTo(size, count) {
|
|
38
|
+
// biome-ignore format: preserve layout
|
|
39
|
+
switch (count) {
|
|
40
|
+
case 1: return size; // Pad upwards to even multiple of 2
|
|
41
|
+
case 2: return size + (size % 2); // Pad upwards to even multiple of 2
|
|
42
|
+
default: return size + ((4 - (size % 4)) % 4); // Pad upwards to even multiple of 4
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/** Returns the VariableShaderType that corresponds to a typed array */
|
|
46
|
+
getDataType(arrayOrType) {
|
|
47
|
+
const Constructor = ArrayBuffer.isView(arrayOrType) ? arrayOrType.constructor : arrayOrType;
|
|
48
|
+
if (Constructor === Uint8ClampedArray) {
|
|
49
|
+
return 'uint8';
|
|
50
|
+
}
|
|
51
|
+
const info = Object.values(NORMALIZED_TYPE_MAP).find(entry => Constructor === entry[4]);
|
|
52
|
+
if (!info) {
|
|
53
|
+
throw new Error(Constructor.name);
|
|
54
|
+
}
|
|
55
|
+
return info[0];
|
|
56
|
+
}
|
|
57
|
+
/** Returns the TypedArray that corresponds to a shader data type */
|
|
58
|
+
getTypedArrayConstructor(type) {
|
|
59
|
+
const [, , , , Constructor] = NORMALIZED_TYPE_MAP[type];
|
|
60
|
+
return Constructor;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/** Entry point for decoding luma.gl data types */
|
|
64
|
+
export const dataTypeDecoder = new DataTypeDecoder();
|
|
65
|
+
const NORMALIZED_TYPE_MAP = {
|
|
66
|
+
uint8: ['uint8', 'u32', 1, false, Uint8Array],
|
|
67
|
+
sint8: ['sint8', 'i32', 1, false, Int8Array],
|
|
68
|
+
unorm8: ['uint8', 'f32', 1, true, Uint8Array],
|
|
69
|
+
snorm8: ['sint8', 'f32', 1, true, Int8Array],
|
|
70
|
+
uint16: ['uint16', 'u32', 2, false, Uint16Array],
|
|
71
|
+
sint16: ['sint16', 'i32', 2, false, Int16Array],
|
|
72
|
+
unorm16: ['uint16', 'u32', 2, true, Uint16Array],
|
|
73
|
+
snorm16: ['sint16', 'i32', 2, true, Int16Array],
|
|
74
|
+
float16: ['float16', 'f16', 2, false, Uint16Array],
|
|
75
|
+
float32: ['float32', 'f32', 4, false, Float32Array],
|
|
76
|
+
uint32: ['uint32', 'u32', 4, false, Uint32Array],
|
|
77
|
+
sint32: ['sint32', 'i32', 4, false, Int32Array]
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=data-type-decoder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-type-decoder.js","sourceRoot":"","sources":["../../../src/shadertypes/data-types/data-type-decoder.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,8 @@ export type PrimitiveDataType = 'u32' | 'i32' | 'f32' | 'f16';
|
|
|
8
8
|
* Signed data types describe signed and unsigned integers as well as floats of varying sizes
|
|
9
9
|
* @note These formats describe physical memory layouts in vertex and pixel formats, they are not used inside shaders
|
|
10
10
|
*/
|
|
11
|
-
export type
|
|
11
|
+
export type DataType = 'uint8' | 'sint8' | 'uint16' | 'sint16' | 'uint32' | 'sint32' | 'float16' | 'float32';
|
|
12
|
+
export type SignedDataType = DataType;
|
|
12
13
|
/**
|
|
13
14
|
* Normalized data types describe signed and unsigned integers as well as floats of varying sizes together with normalization behavior
|
|
14
15
|
* @note These formats describe physical memory layouts in vertex and pixel formats, they are not used inside shaders
|
|
@@ -17,16 +18,34 @@ export type SignedDataType = 'uint8' | 'sint8' | 'uint16' | 'sint16' | 'uint32'
|
|
|
17
18
|
*/
|
|
18
19
|
export type NormalizedDataType = SignedDataType | 'unorm8' | 'snorm8' | 'unorm16' | 'snorm16';
|
|
19
20
|
/** Returns information about a signed or normalized DataType */
|
|
20
|
-
export type DataTypeInfo = {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
export type DataTypeInfo<T extends NormalizedDataType = NormalizedDataType> = {
|
|
22
|
+
/** The corresponding data type without normalization */
|
|
23
|
+
signedType: SignedDataTypeT<T>;
|
|
24
|
+
/** The primitive data type (what the shader sees) */
|
|
25
|
+
primitiveType: PrimitiveDataTypeT<T>;
|
|
26
|
+
/** @type number - Length in bytes of the data type */
|
|
27
|
+
byteLength: DataTypeByteLengthT<T>;
|
|
28
|
+
/** @type boolean - indicating whether the data type is normalized */
|
|
29
|
+
normalized: DataTypeIsNormalizedT<T>;
|
|
30
|
+
/** @type boolean - indicating whether the data type is integer */
|
|
31
|
+
integer: DataTypeIsIntegerT<T>;
|
|
32
|
+
/** @type boolean - indicating whether the data type is signed */
|
|
33
|
+
signed: DataTypeIsSignedT<T>;
|
|
27
34
|
};
|
|
28
|
-
/**
|
|
29
|
-
export type
|
|
30
|
-
/**
|
|
31
|
-
export type
|
|
35
|
+
/** @type the primitive data type seen by the shader */
|
|
36
|
+
export type PrimitiveDataTypeT<T extends NormalizedDataType> = T extends 'float32' ? 'f32' : T extends 'float16' ? 'f16' : T extends 'unorm8' | 'snorm8' | 'unorm16' | 'snorm16' ? 'f32' : T extends 'uint8' | 'uint16' | 'uint32' ? 'u32' : T extends 'sint8' | 'sint16' | 'sint32' ? 'i32' : never;
|
|
37
|
+
/** @type The signed data type representing a normalized data type */
|
|
38
|
+
export type SignedDataTypeT<T extends NormalizedDataType> = T extends 'unorm8' ? 'uint8' : T extends 'snorm8' ? 'sint8' : T extends 'unorm16' ? 'uint16' : T extends 'snorm16' ? 'sint16' : T extends NormalizedDataType ? T : never;
|
|
39
|
+
/** @type a number type that is is the length in bytes of the data type */
|
|
40
|
+
export type DataTypeByteLengthT<T extends NormalizedDataType = NormalizedDataType> = T extends 'uint8' | 'sint8' | 'unorm8' | 'snorm8' ? 1 : T extends 'uint16' | 'sint16' | 'unorm16' | 'snorm16' | 'float16' ? 2 : T extends 'uint32' | 'sint32' | 'float32' ? 4 : never;
|
|
41
|
+
/** @type a boolean type that is true if the data format is signed */
|
|
42
|
+
export type DataTypeIsSignedT<T extends NormalizedDataType = NormalizedDataType> = T extends 'sint8' | 'sint16' | 'sint32' ? true : false;
|
|
43
|
+
/** @type a boolean type that is true if the data format is a normalized format */
|
|
44
|
+
export type DataTypeIsNormalizedT<T extends NormalizedDataType = NormalizedDataType> = T extends SignedDataType ? false : true;
|
|
45
|
+
/** @type a boolean type that is true if the data format is an integer format */
|
|
46
|
+
export type DataTypeIsIntegerT<T extends NormalizedDataType = NormalizedDataType> = T extends 'uint8' | 'sint8' | 'uint16' | 'sint16' | 'uint32' | 'sint32' ? true : false;
|
|
47
|
+
/** @type A typed array constructor type appropriate to hold the actual values of a data type (i.e. integers for normalized data types) */
|
|
48
|
+
export type TypedArrayConstructorT<T extends NormalizedDataType> = T extends 'uint8' ? Uint8ArrayConstructor : T extends 'sint8' ? Int8ArrayConstructor : T extends 'unorm8' ? Uint8ArrayConstructor : T extends 'snorm8' ? Int8ArrayConstructor : T extends 'uint16' ? Uint16ArrayConstructor : T extends 'sint16' ? Int16ArrayConstructor : T extends 'unorm16' ? Uint16ArrayConstructor : T extends 'snorm16' ? Int16ArrayConstructor : T extends 'uint32' ? Uint32ArrayConstructor : T extends 'sint32' ? Int32ArrayConstructor : T extends 'float16' ? Uint16ArrayConstructor : T extends 'float32' ? Float32ArrayConstructor : never;
|
|
49
|
+
/** @type A typed array constructor appropriate to hold the logical values of a data type (i.e. floats for normalized data types) */
|
|
50
|
+
export type NormalizedTypedArrayConstructorT<T extends NormalizedDataType> = T extends 'unorm8' | 'snorm8' | 'unorm16' | 'snorm16' ? Float32ArrayConstructor : TypedArrayConstructorT<T>;
|
|
32
51
|
//# sourceMappingURL=data-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-types.d.ts","sourceRoot":"","sources":["../../../src/shadertypes/data-types/data-types.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAE9D;;;GAGG;AACH,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"data-types.d.ts","sourceRoot":"","sources":["../../../src/shadertypes/data-types/data-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decode-data-types.d.ts","sourceRoot":"","sources":["../../../src/shadertypes/data-types/decode-data-types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,UAAU,EAAE,qBAAqB,EAAC,uBAAoB;AAC9D,OAAO,EAAoB,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAC,wBAAqB;AAEjG;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,kBAAkB,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"decode-data-types.d.ts","sourceRoot":"","sources":["../../../src/shadertypes/data-types/decode-data-types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,UAAU,EAAE,qBAAqB,EAAC,uBAAoB;AAC9D,OAAO,EAAoB,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAC,wBAAqB;AAEjG;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,kBAAkB,GAAG,YAAY,CActE;AAED,oEAAoE;AACpE,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,cAAc,GAAG,kBAAkB,CAUxF;AAED,4DAA4D;AAC5D,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAO3D;AAED,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,WAAW,EAAE,UAAU,GAAG,qBAAqB,GAAG,cAAc,CAU3F;AAED,oEAAoE;AACpE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,kBAAkB,GAAG,qBAAqB,CAGxF"}
|
|
@@ -6,10 +6,11 @@
|
|
|
6
6
|
* @returns underlying primitive / signed types, byte length, normalization, integer, signed flags
|
|
7
7
|
*/
|
|
8
8
|
export function getDataTypeInfo(type) {
|
|
9
|
-
const [signedType, primitiveType, byteLength] = NORMALIZED_TYPE_MAP[type];
|
|
10
9
|
const normalized = type.includes('norm');
|
|
11
10
|
const integer = !normalized && !type.startsWith('float');
|
|
12
11
|
const signed = type.startsWith('s');
|
|
12
|
+
const typeInfo = NORMALIZED_TYPE_MAP[type];
|
|
13
|
+
const [signedType, primitiveType, byteLength] = typeInfo || ['uint8 ', 'i32', 1];
|
|
13
14
|
return {
|
|
14
15
|
signedType,
|
|
15
16
|
primitiveType,
|
|
@@ -22,7 +23,7 @@ export function getDataTypeInfo(type) {
|
|
|
22
23
|
/** Build a vertex format from a signed data type and a component */
|
|
23
24
|
export function getNormalizedDataType(signedDataType) {
|
|
24
25
|
const dataType = signedDataType;
|
|
25
|
-
//
|
|
26
|
+
// biome-ignore format: preserve layout
|
|
26
27
|
switch (dataType) {
|
|
27
28
|
case 'uint8': return 'unorm8';
|
|
28
29
|
case 'sint8': return 'snorm8';
|
|
@@ -33,7 +34,7 @@ export function getNormalizedDataType(signedDataType) {
|
|
|
33
34
|
}
|
|
34
35
|
/** Align offset to 1, 2 or 4 elements (4, 8 or 16 bytes) */
|
|
35
36
|
export function alignTo(size, count) {
|
|
36
|
-
//
|
|
37
|
+
// biome-ignore format: preserve layout
|
|
37
38
|
switch (count) {
|
|
38
39
|
case 1: return size; // Pad upwards to even multiple of 2
|
|
39
40
|
case 2: return size + (size % 2); // Pad upwards to even multiple of 2
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decode-data-types.js","sourceRoot":"","sources":["../../../src/shadertypes/data-types/decode-data-types.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAKpC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAwB;IACtD,MAAM,
|
|
1
|
+
{"version":3,"file":"decode-data-types.js","sourceRoot":"","sources":["../../../src/shadertypes/data-types/decode-data-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,12 +3,6 @@
|
|
|
3
3
|
* @note ImageData can be used for contiguous 8 bit data via Uint8ClampedArray
|
|
4
4
|
*/
|
|
5
5
|
export type ExternalImage = ImageBitmap | ImageData | HTMLImageElement | HTMLVideoElement | VideoFrame | HTMLCanvasElement | OffscreenCanvas;
|
|
6
|
-
export type ExternalImageData = {
|
|
7
|
-
data: ArrayBuffer | SharedArrayBuffer | ArrayBufferView;
|
|
8
|
-
byteOffset?: number;
|
|
9
|
-
bytesPerRow?: number;
|
|
10
|
-
rowsPerImage?: number;
|
|
11
|
-
};
|
|
12
6
|
/** Check if data is an external image */
|
|
13
7
|
export declare function isExternalImage(data: unknown): data is ExternalImage;
|
|
14
8
|
/** Determine size (width and height) of provided image data */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-types.d.ts","sourceRoot":"","sources":["../../../src/shadertypes/image-types/image-types.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,SAAS,GACT,gBAAgB,GAChB,gBAAgB,GAChB,UAAU,GACV,iBAAiB,GACjB,eAAe,CAAC;AAEpB,yCAAyC;AACzC,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,aAAa,CAUpE;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,GAAG;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAoBzF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-types.js","sourceRoot":"","sources":["../../../src/shadertypes/image-types/image-types.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAepC,yCAAyC;AACzC,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,OAAO,CACL,CAAC,OAAO,SAAS,KAAK,WAAW,IAAI,IAAI,YAAY,SAAS,CAAC;QAC/D,CAAC,OAAO,WAAW,KAAK,WAAW,IAAI,IAAI,YAAY,WAAW,CAAC;QACnE,CAAC,OAAO,gBAAgB,KAAK,WAAW,IAAI,IAAI,YAAY,gBAAgB,CAAC;QAC7E,CAAC,OAAO,gBAAgB,KAAK,WAAW,IAAI,IAAI,YAAY,gBAAgB,CAAC;QAC7E,CAAC,OAAO,UAAU,KAAK,WAAW,IAAI,IAAI,YAAY,UAAU,CAAC;QACjE,CAAC,OAAO,iBAAiB,KAAK,WAAW,IAAI,IAAI,YAAY,iBAAiB,CAAC;QAC/E,CAAC,OAAO,eAAe,KAAK,WAAW,IAAI,IAAI,YAAY,eAAe,CAAC,CAC5E,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,oBAAoB,CAAC,IAAmB;IACtD,IACE,CAAC,OAAO,SAAS,KAAK,WAAW,IAAI,IAAI,YAAY,SAAS,CAAC;QAC/D,CAAC,OAAO,WAAW,KAAK,WAAW,IAAI,IAAI,YAAY,WAAW,CAAC;QACnE,CAAC,OAAO,iBAAiB,KAAK,WAAW,IAAI,IAAI,YAAY,iBAAiB,CAAC;QAC/E,CAAC,OAAO,eAAe,KAAK,WAAW,IAAI,IAAI,YAAY,eAAe,CAAC,EAC3E,CAAC;QACD,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAC,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,gBAAgB,KAAK,WAAW,IAAI,IAAI,YAAY,gBAAgB,EAAE,CAAC;QAChF,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAC,CAAC;IAChE,CAAC;IACD,IAAI,OAAO,gBAAgB,KAAK,WAAW,IAAI,IAAI,YAAY,gBAAgB,EAAE,CAAC;QAChF,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAC,CAAC;IAC5D,CAAC;IACD,IAAI,OAAO,UAAU,KAAK,WAAW,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;QACpE,uDAAuD;QACvD,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAC,CAAC;IAChE,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { PrimitiveDataType } from "../data-types/data-types.js";
|
|
2
|
+
import type { CompositeShaderType, VariableShaderType } from "./shader-types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Describes the packing for one flattened field in a shader block.
|
|
5
|
+
*
|
|
6
|
+
* Offsets, sizes, and strides are expressed in 32-bit words so the result can
|
|
7
|
+
* be consumed directly by typed-array writers.
|
|
8
|
+
*/
|
|
9
|
+
export type ShaderBlockLayoutEntry = {
|
|
10
|
+
/** Offset in 32-bit words from the start of the block. */
|
|
11
|
+
offset: number;
|
|
12
|
+
/** Occupied size in 32-bit words, excluding external array stride. */
|
|
13
|
+
size: number;
|
|
14
|
+
/** Number of logical scalar components in the declared value. */
|
|
15
|
+
components: number;
|
|
16
|
+
/** Number of matrix columns, or `1` for scalars and vectors. */
|
|
17
|
+
columns: number;
|
|
18
|
+
/** Number of rows in each column, or vector length for vectors. */
|
|
19
|
+
rows: number;
|
|
20
|
+
/** Distance between matrix columns in 32-bit words. */
|
|
21
|
+
columnStride: number;
|
|
22
|
+
/** Canonical shader type after alias resolution. */
|
|
23
|
+
shaderType: VariableShaderType;
|
|
24
|
+
/** Scalar data type used to write the value. */
|
|
25
|
+
type: PrimitiveDataType;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Options for {@link makeShaderBlockLayout}.
|
|
29
|
+
*/
|
|
30
|
+
export type ShaderBlockLayoutOptions = {
|
|
31
|
+
/**
|
|
32
|
+
* Packing rules to apply when building the layout.
|
|
33
|
+
*
|
|
34
|
+
* Defaults to `'std140'`.
|
|
35
|
+
*/
|
|
36
|
+
layout?: 'std140' | 'wgsl-uniform' | 'wgsl-storage';
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Immutable layout metadata for a uniform or storage-style shader block.
|
|
40
|
+
*/
|
|
41
|
+
export type ShaderBlockLayout = {
|
|
42
|
+
/** Packing rules used when this layout was created. */
|
|
43
|
+
layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage';
|
|
44
|
+
/** Exact number of packed bytes required by the block. */
|
|
45
|
+
byteLength: number;
|
|
46
|
+
/** Original composite shader type declarations keyed by top-level field. */
|
|
47
|
+
uniformTypes: Record<string, CompositeShaderType>;
|
|
48
|
+
/** Flattened leaf field layouts keyed by field path. */
|
|
49
|
+
fields: Record<string, ShaderBlockLayoutEntry>;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Builds a deterministic shader-block layout from composite shader type declarations.
|
|
53
|
+
*
|
|
54
|
+
* The returned value is pure layout metadata. It records the packed field
|
|
55
|
+
* offsets and exact packed byte length, but it does not allocate buffers or
|
|
56
|
+
* serialize values.
|
|
57
|
+
*/
|
|
58
|
+
export declare function makeShaderBlockLayout(uniformTypes: Readonly<Record<string, CompositeShaderType>>, options?: ShaderBlockLayoutOptions): ShaderBlockLayout;
|
|
59
|
+
/**
|
|
60
|
+
* Returns the layout metadata for a scalar, vector, or matrix leaf type.
|
|
61
|
+
*
|
|
62
|
+
* The result includes both the occupied size in 32-bit words and the alignment
|
|
63
|
+
* requirement that must be applied before placing the value in a shader block.
|
|
64
|
+
*/
|
|
65
|
+
export declare function getLeafLayoutInfo(type: VariableShaderType, layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'): Omit<ShaderBlockLayoutEntry, 'offset'> & {
|
|
66
|
+
alignment: 1 | 2 | 4;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Type guard for composite struct declarations.
|
|
70
|
+
*/
|
|
71
|
+
export declare function isCompositeShaderTypeStruct(value: CompositeShaderType): value is Record<string, CompositeShaderType>;
|
|
72
|
+
//# sourceMappingURL=shader-block-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader-block-layout.d.ts","sourceRoot":"","sources":["../../../src/shadertypes/shader-types/shader-block-layout.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,iBAAiB,EAAC,oCAAiC;AAChE,OAAO,KAAK,EAAC,mBAAmB,EAAE,kBAAkB,EAAC,0BAAuB;AAI5E;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,UAAU,EAAE,kBAAkB,CAAC;IAC/B,gDAAgD;IAChD,IAAI,EAAE,iBAAiB,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC;;;;OAIG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,cAAc,GAAG,cAAc,CAAC;CACrD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,uDAAuD;IACvD,MAAM,EAAE,QAAQ,GAAG,cAAc,GAAG,cAAc,CAAC;IACnD,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAClD,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;CAChD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,EAC3D,OAAO,GAAE,wBAA6B,GACrC,iBAAiB,CAkBnB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,QAAQ,GAAG,cAAc,GAAG,cAAc,GACjD,IAAI,CAAC,sBAAsB,EAAE,QAAQ,CAAC,GAAG;IAAC,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;CAAC,CAgDjE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,mBAAmB,GACzB,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAE9C"}
|