@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
|
@@ -13,7 +13,7 @@ export type PrimitiveDataType = 'u32' | 'i32' | 'f32' | 'f16';
|
|
|
13
13
|
* Signed data types describe signed and unsigned integers as well as floats of varying sizes
|
|
14
14
|
* @note These formats describe physical memory layouts in vertex and pixel formats, they are not used inside shaders
|
|
15
15
|
*/
|
|
16
|
-
export type
|
|
16
|
+
export type DataType =
|
|
17
17
|
| 'uint8'
|
|
18
18
|
| 'sint8'
|
|
19
19
|
| 'uint16'
|
|
@@ -23,6 +23,8 @@ export type SignedDataType =
|
|
|
23
23
|
| 'float16'
|
|
24
24
|
| 'float32';
|
|
25
25
|
|
|
26
|
+
export type SignedDataType = DataType;
|
|
27
|
+
|
|
26
28
|
/**
|
|
27
29
|
* Normalized data types describe signed and unsigned integers as well as floats of varying sizes together with normalization behavior
|
|
28
30
|
* @note These formats describe physical memory layouts in vertex and pixel formats, they are not used inside shaders
|
|
@@ -32,65 +34,115 @@ export type SignedDataType =
|
|
|
32
34
|
export type NormalizedDataType = SignedDataType | 'unorm8' | 'snorm8' | 'unorm16' | 'snorm16';
|
|
33
35
|
|
|
34
36
|
/** Returns information about a signed or normalized DataType */
|
|
35
|
-
export type DataTypeInfo = {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
37
|
+
export type DataTypeInfo<T extends NormalizedDataType = NormalizedDataType> = {
|
|
38
|
+
/** The corresponding data type without normalization */
|
|
39
|
+
signedType: SignedDataTypeT<T>;
|
|
40
|
+
/** The primitive data type (what the shader sees) */
|
|
41
|
+
primitiveType: PrimitiveDataTypeT<T>;
|
|
42
|
+
/** @type number - Length in bytes of the data type */
|
|
43
|
+
byteLength: DataTypeByteLengthT<T>;
|
|
44
|
+
/** @type boolean - indicating whether the data type is normalized */
|
|
45
|
+
normalized: DataTypeIsNormalizedT<T>;
|
|
46
|
+
/** @type boolean - indicating whether the data type is integer */
|
|
47
|
+
integer: DataTypeIsIntegerT<T>;
|
|
48
|
+
/** @type boolean - indicating whether the data type is signed */
|
|
49
|
+
signed: DataTypeIsSignedT<T>;
|
|
42
50
|
};
|
|
43
51
|
|
|
44
|
-
/**
|
|
45
|
-
export type
|
|
46
|
-
?
|
|
47
|
-
: T extends '
|
|
48
|
-
?
|
|
49
|
-
: T extends 'unorm8'
|
|
50
|
-
?
|
|
51
|
-
: T extends '
|
|
52
|
-
?
|
|
53
|
-
: T extends '
|
|
54
|
-
?
|
|
55
|
-
:
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
52
|
+
/** @type the primitive data type seen by the shader */
|
|
53
|
+
export type PrimitiveDataTypeT<T extends NormalizedDataType> = T extends 'float32'
|
|
54
|
+
? 'f32'
|
|
55
|
+
: T extends 'float16'
|
|
56
|
+
? 'f16'
|
|
57
|
+
: T extends 'unorm8' | 'snorm8' | 'unorm16' | 'snorm16'
|
|
58
|
+
? 'f32'
|
|
59
|
+
: T extends 'uint8' | 'uint16' | 'uint32'
|
|
60
|
+
? 'u32'
|
|
61
|
+
: T extends 'sint8' | 'sint16' | 'sint32'
|
|
62
|
+
? 'i32'
|
|
63
|
+
: never;
|
|
64
|
+
|
|
65
|
+
/** @type The signed data type representing a normalized data type */
|
|
66
|
+
export type SignedDataTypeT<T extends NormalizedDataType> = T extends 'unorm8'
|
|
67
|
+
? 'uint8'
|
|
68
|
+
: T extends 'snorm8'
|
|
69
|
+
? 'sint8'
|
|
70
|
+
: T extends 'unorm16'
|
|
71
|
+
? 'uint16'
|
|
72
|
+
: T extends 'snorm16'
|
|
73
|
+
? 'sint16'
|
|
74
|
+
: T extends NormalizedDataType
|
|
75
|
+
? T
|
|
76
|
+
: never;
|
|
77
|
+
|
|
78
|
+
/** @type a number type that is is the length in bytes of the data type */
|
|
79
|
+
export type DataTypeByteLengthT<T extends NormalizedDataType = NormalizedDataType> = T extends
|
|
80
|
+
| 'uint8'
|
|
81
|
+
| 'sint8'
|
|
82
|
+
| 'unorm8'
|
|
83
|
+
| 'snorm8'
|
|
84
|
+
? 1
|
|
85
|
+
: T extends 'uint16' | 'sint16' | 'unorm16' | 'snorm16' | 'float16'
|
|
86
|
+
? 2
|
|
87
|
+
: T extends 'uint32' | 'sint32' | 'float32'
|
|
88
|
+
? 4
|
|
89
|
+
: never;
|
|
90
|
+
|
|
91
|
+
/** @type a boolean type that is true if the data format is signed */
|
|
92
|
+
export type DataTypeIsSignedT<T extends NormalizedDataType = NormalizedDataType> = T extends
|
|
93
|
+
| 'sint8'
|
|
94
|
+
| 'sint16'
|
|
95
|
+
| 'sint32'
|
|
96
|
+
? true
|
|
97
|
+
: false;
|
|
70
98
|
|
|
71
|
-
/**
|
|
72
|
-
export type
|
|
73
|
-
?
|
|
99
|
+
/** @type a boolean type that is true if the data format is a normalized format */
|
|
100
|
+
export type DataTypeIsNormalizedT<T extends NormalizedDataType = NormalizedDataType> =
|
|
101
|
+
T extends SignedDataType ? false : true;
|
|
102
|
+
|
|
103
|
+
/** @type a boolean type that is true if the data format is an integer format */
|
|
104
|
+
export type DataTypeIsIntegerT<T extends NormalizedDataType = NormalizedDataType> = T extends
|
|
105
|
+
| 'uint8'
|
|
106
|
+
| 'sint8'
|
|
107
|
+
| 'uint16'
|
|
108
|
+
| 'sint16'
|
|
109
|
+
| 'uint32'
|
|
110
|
+
| 'sint32'
|
|
111
|
+
? true
|
|
112
|
+
: false;
|
|
113
|
+
|
|
114
|
+
/** @type A typed array constructor type appropriate to hold the actual values of a data type (i.e. integers for normalized data types) */
|
|
115
|
+
export type TypedArrayConstructorT<T extends NormalizedDataType> = T extends 'uint8'
|
|
116
|
+
? Uint8ArrayConstructor
|
|
74
117
|
: T extends 'sint8'
|
|
75
|
-
?
|
|
118
|
+
? Int8ArrayConstructor
|
|
76
119
|
: T extends 'unorm8'
|
|
77
|
-
?
|
|
120
|
+
? Uint8ArrayConstructor
|
|
78
121
|
: T extends 'snorm8'
|
|
79
|
-
?
|
|
122
|
+
? Int8ArrayConstructor
|
|
80
123
|
: T extends 'uint16'
|
|
81
|
-
?
|
|
124
|
+
? Uint16ArrayConstructor
|
|
82
125
|
: T extends 'sint16'
|
|
83
|
-
?
|
|
126
|
+
? Int16ArrayConstructor
|
|
84
127
|
: T extends 'unorm16'
|
|
85
|
-
?
|
|
128
|
+
? Uint16ArrayConstructor
|
|
86
129
|
: T extends 'snorm16'
|
|
87
|
-
?
|
|
130
|
+
? Int16ArrayConstructor
|
|
88
131
|
: T extends 'uint32'
|
|
89
|
-
?
|
|
132
|
+
? Uint32ArrayConstructor
|
|
90
133
|
: T extends 'sint32'
|
|
91
|
-
?
|
|
134
|
+
? Int32ArrayConstructor
|
|
92
135
|
: T extends 'float16'
|
|
93
|
-
?
|
|
136
|
+
? Uint16ArrayConstructor
|
|
94
137
|
: T extends 'float32'
|
|
95
|
-
?
|
|
138
|
+
? Float32ArrayConstructor
|
|
96
139
|
: never;
|
|
140
|
+
|
|
141
|
+
/** @type A typed array constructor appropriate to hold the logical values of a data type (i.e. floats for normalized data types) */
|
|
142
|
+
export type NormalizedTypedArrayConstructorT<T extends NormalizedDataType> = T extends
|
|
143
|
+
| 'unorm8'
|
|
144
|
+
| 'snorm8'
|
|
145
|
+
| 'unorm16'
|
|
146
|
+
| 'snorm16'
|
|
147
|
+
? Float32ArrayConstructor
|
|
148
|
+
: TypedArrayConstructorT<T>;
|
|
@@ -10,10 +10,11 @@ import {PrimitiveDataType, SignedDataType, NormalizedDataType, DataTypeInfo} fro
|
|
|
10
10
|
* @returns underlying primitive / signed types, byte length, normalization, integer, signed flags
|
|
11
11
|
*/
|
|
12
12
|
export function getDataTypeInfo(type: NormalizedDataType): DataTypeInfo {
|
|
13
|
-
const [signedType, primitiveType, byteLength] = NORMALIZED_TYPE_MAP[type];
|
|
14
13
|
const normalized: boolean = type.includes('norm');
|
|
15
14
|
const integer: boolean = !normalized && !type.startsWith('float');
|
|
16
15
|
const signed: boolean = type.startsWith('s');
|
|
16
|
+
const typeInfo = NORMALIZED_TYPE_MAP[type];
|
|
17
|
+
const [signedType, primitiveType, byteLength] = typeInfo || ['uint8 ', 'i32', 1];
|
|
17
18
|
return {
|
|
18
19
|
signedType,
|
|
19
20
|
primitiveType,
|
|
@@ -27,7 +28,7 @@ export function getDataTypeInfo(type: NormalizedDataType): DataTypeInfo {
|
|
|
27
28
|
/** Build a vertex format from a signed data type and a component */
|
|
28
29
|
export function getNormalizedDataType(signedDataType: SignedDataType): NormalizedDataType {
|
|
29
30
|
const dataType: NormalizedDataType = signedDataType;
|
|
30
|
-
//
|
|
31
|
+
// biome-ignore format: preserve layout
|
|
31
32
|
switch (dataType) {
|
|
32
33
|
case 'uint8': return 'unorm8';
|
|
33
34
|
case 'sint8': return 'snorm8';
|
|
@@ -39,7 +40,7 @@ export function getNormalizedDataType(signedDataType: SignedDataType): Normalize
|
|
|
39
40
|
|
|
40
41
|
/** Align offset to 1, 2 or 4 elements (4, 8 or 16 bytes) */
|
|
41
42
|
export function alignTo(size: number, count: number): number {
|
|
42
|
-
//
|
|
43
|
+
// biome-ignore format: preserve layout
|
|
43
44
|
switch (count) {
|
|
44
45
|
case 1: return size; // Pad upwards to even multiple of 2
|
|
45
46
|
case 2: return size + (size % 2); // Pad upwards to even multiple of 2
|
|
@@ -15,13 +15,6 @@ export type ExternalImage =
|
|
|
15
15
|
| HTMLCanvasElement
|
|
16
16
|
| OffscreenCanvas;
|
|
17
17
|
|
|
18
|
-
export type ExternalImageData = {
|
|
19
|
-
data: ArrayBuffer | SharedArrayBuffer | ArrayBufferView;
|
|
20
|
-
byteOffset?: number;
|
|
21
|
-
bytesPerRow?: number;
|
|
22
|
-
rowsPerImage?: number;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
18
|
/** Check if data is an external image */
|
|
26
19
|
export function isExternalImage(data: unknown): data is ExternalImage {
|
|
27
20
|
return (
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {PrimitiveDataType} from '../data-types/data-types';
|
|
6
|
+
import type {CompositeShaderType, VariableShaderType} from './shader-types';
|
|
7
|
+
import {alignTo} from '../data-types/decode-data-types';
|
|
8
|
+
import {getVariableShaderTypeInfo, resolveVariableShaderTypeAlias} from './shader-type-decoder';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Describes the packing for one flattened field in a shader block.
|
|
12
|
+
*
|
|
13
|
+
* Offsets, sizes, and strides are expressed in 32-bit words so the result can
|
|
14
|
+
* be consumed directly by typed-array writers.
|
|
15
|
+
*/
|
|
16
|
+
export type ShaderBlockLayoutEntry = {
|
|
17
|
+
/** Offset in 32-bit words from the start of the block. */
|
|
18
|
+
offset: number;
|
|
19
|
+
/** Occupied size in 32-bit words, excluding external array stride. */
|
|
20
|
+
size: number;
|
|
21
|
+
/** Number of logical scalar components in the declared value. */
|
|
22
|
+
components: number;
|
|
23
|
+
/** Number of matrix columns, or `1` for scalars and vectors. */
|
|
24
|
+
columns: number;
|
|
25
|
+
/** Number of rows in each column, or vector length for vectors. */
|
|
26
|
+
rows: number;
|
|
27
|
+
/** Distance between matrix columns in 32-bit words. */
|
|
28
|
+
columnStride: number;
|
|
29
|
+
/** Canonical shader type after alias resolution. */
|
|
30
|
+
shaderType: VariableShaderType;
|
|
31
|
+
/** Scalar data type used to write the value. */
|
|
32
|
+
type: PrimitiveDataType;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Options for {@link makeShaderBlockLayout}.
|
|
37
|
+
*/
|
|
38
|
+
export type ShaderBlockLayoutOptions = {
|
|
39
|
+
/**
|
|
40
|
+
* Packing rules to apply when building the layout.
|
|
41
|
+
*
|
|
42
|
+
* Defaults to `'std140'`.
|
|
43
|
+
*/
|
|
44
|
+
layout?: 'std140' | 'wgsl-uniform' | 'wgsl-storage';
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Immutable layout metadata for a uniform or storage-style shader block.
|
|
49
|
+
*/
|
|
50
|
+
export type ShaderBlockLayout = {
|
|
51
|
+
/** Packing rules used when this layout was created. */
|
|
52
|
+
layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage';
|
|
53
|
+
/** Exact number of packed bytes required by the block. */
|
|
54
|
+
byteLength: number;
|
|
55
|
+
/** Original composite shader type declarations keyed by top-level field. */
|
|
56
|
+
uniformTypes: Record<string, CompositeShaderType>;
|
|
57
|
+
/** Flattened leaf field layouts keyed by field path. */
|
|
58
|
+
fields: Record<string, ShaderBlockLayoutEntry>;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Builds a deterministic shader-block layout from composite shader type declarations.
|
|
63
|
+
*
|
|
64
|
+
* The returned value is pure layout metadata. It records the packed field
|
|
65
|
+
* offsets and exact packed byte length, but it does not allocate buffers or
|
|
66
|
+
* serialize values.
|
|
67
|
+
*/
|
|
68
|
+
export function makeShaderBlockLayout(
|
|
69
|
+
uniformTypes: Readonly<Record<string, CompositeShaderType>>,
|
|
70
|
+
options: ShaderBlockLayoutOptions = {}
|
|
71
|
+
): ShaderBlockLayout {
|
|
72
|
+
const copiedUniformTypes = {...uniformTypes};
|
|
73
|
+
const layout = options.layout ?? 'std140';
|
|
74
|
+
const fields: Record<string, ShaderBlockLayoutEntry> = {};
|
|
75
|
+
|
|
76
|
+
let size = 0;
|
|
77
|
+
for (const [key, uniformType] of Object.entries(copiedUniformTypes)) {
|
|
78
|
+
size = addToLayout(fields, key, uniformType, size, layout);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
size = alignTo(size, getTypeAlignment(copiedUniformTypes, layout));
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
layout,
|
|
85
|
+
byteLength: size * 4,
|
|
86
|
+
uniformTypes: copiedUniformTypes,
|
|
87
|
+
fields
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Returns the layout metadata for a scalar, vector, or matrix leaf type.
|
|
93
|
+
*
|
|
94
|
+
* The result includes both the occupied size in 32-bit words and the alignment
|
|
95
|
+
* requirement that must be applied before placing the value in a shader block.
|
|
96
|
+
*/
|
|
97
|
+
export function getLeafLayoutInfo(
|
|
98
|
+
type: VariableShaderType,
|
|
99
|
+
layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'
|
|
100
|
+
): Omit<ShaderBlockLayoutEntry, 'offset'> & {alignment: 1 | 2 | 4} {
|
|
101
|
+
const resolvedType = resolveVariableShaderTypeAlias(type);
|
|
102
|
+
const decodedType = getVariableShaderTypeInfo(resolvedType);
|
|
103
|
+
const matrixMatch = /^mat(\d)x(\d)<.+>$/.exec(resolvedType);
|
|
104
|
+
|
|
105
|
+
if (matrixMatch) {
|
|
106
|
+
const columns = Number(matrixMatch[1]);
|
|
107
|
+
const rows = Number(matrixMatch[2]);
|
|
108
|
+
const columnInfo = getVectorLayoutInfo(
|
|
109
|
+
rows as 2 | 3 | 4,
|
|
110
|
+
resolvedType,
|
|
111
|
+
decodedType.type,
|
|
112
|
+
layout
|
|
113
|
+
);
|
|
114
|
+
const columnStride = getMatrixColumnStride(columnInfo.size, columnInfo.alignment, layout);
|
|
115
|
+
|
|
116
|
+
return {
|
|
117
|
+
alignment: columnInfo.alignment,
|
|
118
|
+
size: columns * columnStride,
|
|
119
|
+
components: columns * rows,
|
|
120
|
+
columns,
|
|
121
|
+
rows,
|
|
122
|
+
columnStride,
|
|
123
|
+
shaderType: resolvedType,
|
|
124
|
+
type: decodedType.type
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const vectorMatch = /^vec(\d)<.+>$/.exec(resolvedType);
|
|
129
|
+
if (vectorMatch) {
|
|
130
|
+
return getVectorLayoutInfo(
|
|
131
|
+
Number(vectorMatch[1]) as 2 | 3 | 4,
|
|
132
|
+
resolvedType,
|
|
133
|
+
decodedType.type,
|
|
134
|
+
layout
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return {
|
|
139
|
+
alignment: 1,
|
|
140
|
+
size: 1,
|
|
141
|
+
components: 1,
|
|
142
|
+
columns: 1,
|
|
143
|
+
rows: 1,
|
|
144
|
+
columnStride: 1,
|
|
145
|
+
shaderType: resolvedType,
|
|
146
|
+
type: decodedType.type
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Type guard for composite struct declarations.
|
|
152
|
+
*/
|
|
153
|
+
export function isCompositeShaderTypeStruct(
|
|
154
|
+
value: CompositeShaderType
|
|
155
|
+
): value is Record<string, CompositeShaderType> {
|
|
156
|
+
return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Recursively adds a composite type to the flattened field map.
|
|
161
|
+
*
|
|
162
|
+
* @returns The next free 32-bit-word offset after the inserted type.
|
|
163
|
+
*/
|
|
164
|
+
function addToLayout(
|
|
165
|
+
fields: Record<string, ShaderBlockLayoutEntry>,
|
|
166
|
+
name: string,
|
|
167
|
+
type: CompositeShaderType,
|
|
168
|
+
offset: number,
|
|
169
|
+
layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'
|
|
170
|
+
): number {
|
|
171
|
+
if (typeof type === 'string') {
|
|
172
|
+
const info = getLeafLayoutInfo(type, layout);
|
|
173
|
+
const alignedOffset = alignTo(offset, info.alignment);
|
|
174
|
+
fields[name] = {
|
|
175
|
+
offset: alignedOffset,
|
|
176
|
+
...info
|
|
177
|
+
};
|
|
178
|
+
return alignedOffset + info.size;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (Array.isArray(type)) {
|
|
182
|
+
if (Array.isArray(type[0])) {
|
|
183
|
+
throw new Error(`Nested arrays are not supported for ${name}`);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
const elementType = type[0] as CompositeShaderType;
|
|
187
|
+
const length = type[1] as number;
|
|
188
|
+
const stride = getArrayStride(elementType, layout);
|
|
189
|
+
const arrayOffset = alignTo(offset, getTypeAlignment(type, layout));
|
|
190
|
+
|
|
191
|
+
for (let i = 0; i < length; i++) {
|
|
192
|
+
addToLayout(fields, `${name}[${i}]`, elementType, arrayOffset + i * stride, layout);
|
|
193
|
+
}
|
|
194
|
+
return arrayOffset + stride * length;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
if (isCompositeShaderTypeStruct(type)) {
|
|
198
|
+
const structAlignment = getTypeAlignment(type, layout);
|
|
199
|
+
let structOffset = alignTo(offset, structAlignment);
|
|
200
|
+
for (const [memberName, memberType] of Object.entries(type)) {
|
|
201
|
+
structOffset = addToLayout(fields, `${name}.${memberName}`, memberType, structOffset, layout);
|
|
202
|
+
}
|
|
203
|
+
return alignTo(structOffset, structAlignment);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
throw new Error(`Unsupported CompositeShaderType for ${name}`);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Returns the occupied size of a composite type in 32-bit words.
|
|
211
|
+
*/
|
|
212
|
+
function getTypeSize(
|
|
213
|
+
type: CompositeShaderType,
|
|
214
|
+
layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'
|
|
215
|
+
): number {
|
|
216
|
+
if (typeof type === 'string') {
|
|
217
|
+
return getLeafLayoutInfo(type, layout).size;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
if (Array.isArray(type)) {
|
|
221
|
+
const elementType = type[0] as CompositeShaderType;
|
|
222
|
+
const length = type[1] as number;
|
|
223
|
+
|
|
224
|
+
if (Array.isArray(elementType)) {
|
|
225
|
+
throw new Error('Nested arrays are not supported');
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
return getArrayStride(elementType, layout) * length;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
let size = 0;
|
|
232
|
+
for (const memberType of Object.values(type)) {
|
|
233
|
+
const compositeMemberType = memberType as CompositeShaderType;
|
|
234
|
+
size = alignTo(size, getTypeAlignment(compositeMemberType, layout));
|
|
235
|
+
size += getTypeSize(compositeMemberType, layout);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
return alignTo(size, getTypeAlignment(type, layout));
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Returns the required alignment of a composite type in 32-bit words.
|
|
243
|
+
*/
|
|
244
|
+
function getTypeAlignment(
|
|
245
|
+
type: CompositeShaderType,
|
|
246
|
+
layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'
|
|
247
|
+
): 1 | 2 | 4 {
|
|
248
|
+
if (typeof type === 'string') {
|
|
249
|
+
return getLeafLayoutInfo(type, layout).alignment;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
if (Array.isArray(type)) {
|
|
253
|
+
const elementType = type[0] as CompositeShaderType;
|
|
254
|
+
const elementAlignment = getTypeAlignment(elementType, layout);
|
|
255
|
+
return uses16ByteArrayAlignment(layout)
|
|
256
|
+
? (Math.max(elementAlignment, 4) as 1 | 2 | 4)
|
|
257
|
+
: elementAlignment;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
let maxAlignment: 1 | 2 | 4 = 1;
|
|
261
|
+
for (const memberType of Object.values(type)) {
|
|
262
|
+
const memberAlignment = getTypeAlignment(memberType as CompositeShaderType, layout);
|
|
263
|
+
maxAlignment = Math.max(maxAlignment, memberAlignment) as 1 | 2 | 4;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
return uses16ByteStructAlignment(layout)
|
|
267
|
+
? (Math.max(maxAlignment, 4) as 1 | 2 | 4)
|
|
268
|
+
: maxAlignment;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Returns the layout metadata for a vector leaf type.
|
|
273
|
+
*/
|
|
274
|
+
function getVectorLayoutInfo(
|
|
275
|
+
components: 2 | 3 | 4,
|
|
276
|
+
shaderType: VariableShaderType,
|
|
277
|
+
type: PrimitiveDataType,
|
|
278
|
+
layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'
|
|
279
|
+
): Omit<ShaderBlockLayoutEntry, 'offset'> & {alignment: 1 | 2 | 4} {
|
|
280
|
+
return {
|
|
281
|
+
alignment: components === 2 ? 2 : 4,
|
|
282
|
+
size: components === 3 ? 3 : components,
|
|
283
|
+
components,
|
|
284
|
+
columns: 1,
|
|
285
|
+
rows: components,
|
|
286
|
+
columnStride: components === 3 ? 3 : components,
|
|
287
|
+
shaderType,
|
|
288
|
+
type
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Returns the stride of an array element in 32-bit words.
|
|
294
|
+
*
|
|
295
|
+
* This includes any layout-specific padding between adjacent array elements.
|
|
296
|
+
*/
|
|
297
|
+
function getArrayStride(
|
|
298
|
+
elementType: CompositeShaderType,
|
|
299
|
+
layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'
|
|
300
|
+
): number {
|
|
301
|
+
const elementSize = getTypeSize(elementType, layout);
|
|
302
|
+
const elementAlignment = getTypeAlignment(elementType, layout);
|
|
303
|
+
return getArrayLikeStride(elementSize, elementAlignment, layout);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Returns the common stride rule shared by array-like elements in the target layout.
|
|
308
|
+
*/
|
|
309
|
+
function getArrayLikeStride(
|
|
310
|
+
size: number,
|
|
311
|
+
alignment: 1 | 2 | 4,
|
|
312
|
+
layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'
|
|
313
|
+
): number {
|
|
314
|
+
return alignTo(size, uses16ByteArrayAlignment(layout) ? 4 : alignment);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* Returns the stride of a matrix column in 32-bit words.
|
|
319
|
+
*/
|
|
320
|
+
function getMatrixColumnStride(
|
|
321
|
+
size: number,
|
|
322
|
+
alignment: 1 | 2 | 4,
|
|
323
|
+
layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'
|
|
324
|
+
): number {
|
|
325
|
+
return layout === 'std140' ? 4 : alignTo(size, alignment);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* Returns `true` when arrays must be rounded up to 16-byte boundaries.
|
|
330
|
+
*/
|
|
331
|
+
function uses16ByteArrayAlignment(layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'): boolean {
|
|
332
|
+
return layout === 'std140' || layout === 'wgsl-uniform';
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* Returns `true` when structs must be rounded up to 16-byte boundaries.
|
|
337
|
+
*/
|
|
338
|
+
function uses16ByteStructAlignment(layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'): boolean {
|
|
339
|
+
return layout === 'std140' || layout === 'wgsl-uniform';
|
|
340
|
+
}
|