@luma.gl/core 9.2.6 → 9.3.0-alpha.10
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 +191 -10
- package/dist/adapter/device.js.map +1 -1
- package/dist/adapter/luma.js +1 -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 +2686 -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 +79 -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 +2422 -554
- 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 +2 -1
- 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 +109 -37
- 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 +10 -9
- 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 +106 -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 +308 -24
- 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 +139 -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 +2 -1
- 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 +166 -45
- package/src/shadertypes/{textures → texture-types}/texture-format-generics.ts +42 -48
- package/src/shadertypes/{textures → texture-types}/texture-format-table.ts +10 -9
- 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 +131 -0
- package/src/shadertypes/vertex-types/vertex-formats.ts +183 -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
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import type
|
|
6
|
-
import
|
|
7
|
-
VariableShaderType,
|
|
8
|
-
AttributeShaderType
|
|
9
|
-
} from '../../shadertypes/
|
|
10
|
-
import type
|
|
11
|
-
import type
|
|
12
|
-
import type
|
|
13
|
-
import type
|
|
5
|
+
import {type TextureFormat} from '../../shadertypes/texture-types/texture-formats';
|
|
6
|
+
import {
|
|
7
|
+
type VariableShaderType,
|
|
8
|
+
type AttributeShaderType
|
|
9
|
+
} from '../../shadertypes/shader-types/shader-types';
|
|
10
|
+
import {type Buffer} from '../resources/buffer';
|
|
11
|
+
import {type Sampler} from '../resources/sampler';
|
|
12
|
+
import {type Texture} from '../resources/texture';
|
|
13
|
+
import {type TextureView} from '../resources/texture-view';
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Describes all shader binding points for a `RenderPipeline` or `ComputePipeline`
|
|
@@ -166,6 +166,12 @@ export type Binding =
|
|
|
166
166
|
| Buffer
|
|
167
167
|
| {buffer: Buffer; offset?: number; size?: number};
|
|
168
168
|
|
|
169
|
+
/** Named binding map */
|
|
170
|
+
export type Bindings = Record<string, Binding>;
|
|
171
|
+
|
|
172
|
+
/** Bindings partitioned by bind-group index */
|
|
173
|
+
export type BindingsByGroup = Partial<Record<number, Bindings>>;
|
|
174
|
+
|
|
169
175
|
// SHADER LAYOUTS
|
|
170
176
|
|
|
171
177
|
/**
|
|
@@ -8,3 +8,15 @@ import {NumericArray} from '@math.gl/types';
|
|
|
8
8
|
|
|
9
9
|
/** Valid values for uniforms. @note boolean values get converted to 0 or 1 before setting */
|
|
10
10
|
export type UniformValue = number | boolean | Readonly<NumericArray>; // Float32Array> | Readonly<Int32Array> | Readonly<Uint32Array> | Readonly<number[]>;
|
|
11
|
+
|
|
12
|
+
/** Recursive uniform value tree used by uniform-buffer packing utilities. */
|
|
13
|
+
export type CompositeUniformValue =
|
|
14
|
+
| UniformValue
|
|
15
|
+
| CompositeUniformValueStruct
|
|
16
|
+
| CompositeUniformValueArray;
|
|
17
|
+
|
|
18
|
+
export type CompositeUniformValueStruct = {
|
|
19
|
+
[name: string]: CompositeUniformValue | undefined;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export type CompositeUniformValueArray = ReadonlyArray<CompositeUniformValue | undefined>;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {
|
|
6
|
+
BindingDeclaration,
|
|
7
|
+
Bindings,
|
|
8
|
+
BindingsByGroup,
|
|
9
|
+
ComputeShaderLayout,
|
|
10
|
+
ShaderLayout
|
|
11
|
+
} from '../adapter/types/shader-layout';
|
|
12
|
+
import {log} from '../utils/log';
|
|
13
|
+
|
|
14
|
+
type AnyShaderLayout = Pick<ShaderLayout | ComputeShaderLayout, 'bindings'>;
|
|
15
|
+
|
|
16
|
+
export function getShaderLayoutBinding(
|
|
17
|
+
shaderLayout: AnyShaderLayout,
|
|
18
|
+
bindingName: string,
|
|
19
|
+
options?: {ignoreWarnings?: boolean}
|
|
20
|
+
): BindingDeclaration | null {
|
|
21
|
+
const bindingLayout = shaderLayout.bindings.find(
|
|
22
|
+
binding =>
|
|
23
|
+
binding.name === bindingName ||
|
|
24
|
+
`${binding.name.toLocaleLowerCase()}uniforms` === bindingName.toLocaleLowerCase()
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
if (!bindingLayout && !options?.ignoreWarnings) {
|
|
28
|
+
log.warn(`Binding ${bindingName} not set: Not found in shader layout.`)();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return bindingLayout || null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function normalizeBindingsByGroup(
|
|
35
|
+
shaderLayout: AnyShaderLayout,
|
|
36
|
+
bindingsOrBindGroups?: Bindings | BindingsByGroup
|
|
37
|
+
): BindingsByGroup {
|
|
38
|
+
if (!bindingsOrBindGroups) {
|
|
39
|
+
return {};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (areBindingsGrouped(bindingsOrBindGroups)) {
|
|
43
|
+
const bindGroups = bindingsOrBindGroups as BindingsByGroup;
|
|
44
|
+
return Object.fromEntries(
|
|
45
|
+
Object.entries(bindGroups).map(([group, bindings]) => [Number(group), {...bindings}])
|
|
46
|
+
) as BindingsByGroup;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const bindGroups: BindingsByGroup = {};
|
|
50
|
+
for (const [bindingName, binding] of Object.entries(bindingsOrBindGroups as Bindings)) {
|
|
51
|
+
const bindingLayout = getShaderLayoutBinding(shaderLayout, bindingName);
|
|
52
|
+
const group = bindingLayout?.group ?? 0;
|
|
53
|
+
bindGroups[group] ||= {};
|
|
54
|
+
bindGroups[group][bindingName] = binding;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return bindGroups;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function flattenBindingsByGroup(bindGroups: BindingsByGroup): Bindings {
|
|
61
|
+
const bindings: Bindings = {};
|
|
62
|
+
for (const groupBindings of Object.values(bindGroups)) {
|
|
63
|
+
Object.assign(bindings, groupBindings);
|
|
64
|
+
}
|
|
65
|
+
return bindings;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function areBindingsGrouped(bindingsOrBindGroups: Bindings | BindingsByGroup): boolean {
|
|
69
|
+
const keys = Object.keys(bindingsOrBindGroups);
|
|
70
|
+
return keys.length > 0 && keys.every(key => /^\d+$/.test(key));
|
|
71
|
+
}
|
|
@@ -21,25 +21,33 @@ export function formatCompilerLog(
|
|
|
21
21
|
switch (options?.showSourceCode || 'no') {
|
|
22
22
|
case 'all':
|
|
23
23
|
// Parse the error - note: browser and driver dependent
|
|
24
|
-
let
|
|
24
|
+
let currentMessageIndex = 0;
|
|
25
25
|
for (let lineNum = 1; lineNum <= lines.length; lineNum++) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
formattedLog +=
|
|
26
|
+
const line = lines[lineNum - 1];
|
|
27
|
+
const currentMessage = log[currentMessageIndex];
|
|
28
|
+
if (line && currentMessage) {
|
|
29
|
+
formattedLog += getNumberedLine(line, lineNum, options);
|
|
30
|
+
}
|
|
31
|
+
while (log.length > currentMessageIndex && currentMessage.lineNum === lineNum) {
|
|
32
|
+
const message = log[currentMessageIndex++];
|
|
33
|
+
if (message) {
|
|
34
|
+
formattedLog += formatCompilerMessage(message, lines, message.lineNum, {
|
|
35
|
+
...options,
|
|
36
|
+
inlineSource: false
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Print any remaining messages
|
|
42
|
+
while (log.length > currentMessageIndex) {
|
|
43
|
+
const message = log[currentMessageIndex++];
|
|
44
|
+
if (message) {
|
|
45
|
+
formattedLog += formatCompilerMessage(message, [], 0, {
|
|
30
46
|
...options,
|
|
31
47
|
inlineSource: false
|
|
32
48
|
});
|
|
33
49
|
}
|
|
34
50
|
}
|
|
35
|
-
// Print any remaining messages
|
|
36
|
-
while (log.length > currentMessage) {
|
|
37
|
-
const message = log[currentMessage++];
|
|
38
|
-
formattedLog += formatCompilerMessage(message, [], 0, {
|
|
39
|
-
...options,
|
|
40
|
-
inlineSource: false
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
51
|
return formattedLog;
|
|
44
52
|
|
|
45
53
|
case 'issues':
|
|
@@ -75,9 +83,9 @@ ${numberedLines}${positionIndicator}${message.type.toUpperCase()}: ${message.mes
|
|
|
75
83
|
|
|
76
84
|
`;
|
|
77
85
|
}
|
|
78
|
-
const color = message.type === 'error' ? 'red' : '
|
|
86
|
+
const color = message.type === 'error' ? 'red' : 'orange';
|
|
79
87
|
return options?.html
|
|
80
|
-
? `<div class='luma-compiler-log
|
|
88
|
+
? `<div class='luma-compiler-log-${message.type}' style="color:${color};"><b> ${message.type.toUpperCase()}: ${
|
|
81
89
|
message.message
|
|
82
90
|
}</b></div>`
|
|
83
91
|
: `${message.type.toUpperCase()}: ${message.message}`;
|
|
@@ -4,13 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
import {log} from '../utils/log';
|
|
6
6
|
import type {PrimitiveDataType, NormalizedDataType} from '../shadertypes/data-types/data-types';
|
|
7
|
-
import type {AttributeShaderType} from '../shadertypes/
|
|
8
|
-
import type {VertexFormat} from '../shadertypes/vertex-
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
getVertexFormatInfo,
|
|
12
|
-
getCompatibleVertexFormat
|
|
13
|
-
} from '../shadertypes/vertex-arrays/decode-vertex-format';
|
|
7
|
+
import type {AttributeShaderType} from '../shadertypes/shader-types/shader-types';
|
|
8
|
+
import type {VertexFormat} from '../shadertypes/vertex-types/vertex-formats';
|
|
9
|
+
import {shaderTypeDecoder} from '../shadertypes/shader-types/shader-type-decoder';
|
|
10
|
+
import {vertexFormatDecoder} from '../shadertypes/vertex-types/vertex-format-decoder';
|
|
14
11
|
import type {ShaderLayout, AttributeDeclaration} from '../adapter/types/shader-layout';
|
|
15
12
|
import type {BufferLayout} from '../adapter/types/buffer-layout';
|
|
16
13
|
|
|
@@ -112,10 +109,10 @@ function getAttributeInfoFromLayouts(
|
|
|
112
109
|
return null;
|
|
113
110
|
}
|
|
114
111
|
|
|
115
|
-
const attributeTypeInfo = getAttributeShaderTypeInfo(shaderDeclaration.type);
|
|
116
|
-
const defaultVertexFormat = getCompatibleVertexFormat(attributeTypeInfo);
|
|
112
|
+
const attributeTypeInfo = shaderTypeDecoder.getAttributeShaderTypeInfo(shaderDeclaration.type);
|
|
113
|
+
const defaultVertexFormat = vertexFormatDecoder.getCompatibleVertexFormat(attributeTypeInfo);
|
|
117
114
|
const vertexFormat = bufferMapping?.vertexFormat || defaultVertexFormat;
|
|
118
|
-
const vertexFormatInfo = getVertexFormatInfo(vertexFormat);
|
|
115
|
+
const vertexFormatInfo = vertexFormatDecoder.getVertexFormatInfo(vertexFormat);
|
|
119
116
|
|
|
120
117
|
return {
|
|
121
118
|
attributeName: bufferMapping?.attributeName || shaderDeclaration.name,
|
|
@@ -217,7 +214,7 @@ function getAttributeFromAttributesList(
|
|
|
217
214
|
// Calculate a default byte stride if not provided
|
|
218
215
|
if (typeof bufferLayout.byteStride !== 'number') {
|
|
219
216
|
for (const attributeMapping of bufferLayout.attributes || []) {
|
|
220
|
-
const info = getVertexFormatInfo(attributeMapping.format);
|
|
217
|
+
const info = vertexFormatDecoder.getVertexFormatInfo(attributeMapping.format);
|
|
221
218
|
// @ts-ignore
|
|
222
219
|
byteStride += info.byteLength;
|
|
223
220
|
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {
|
|
6
|
+
Bindings,
|
|
7
|
+
BindingsByGroup,
|
|
8
|
+
ComputeShaderLayout,
|
|
9
|
+
ShaderLayout
|
|
10
|
+
} from '../adapter/types/shader-layout';
|
|
11
|
+
import type {Device} from '../adapter/device';
|
|
12
|
+
import type {ComputePipeline} from '../adapter/resources/compute-pipeline';
|
|
13
|
+
import type {RenderPipeline} from '../adapter/resources/render-pipeline';
|
|
14
|
+
import {normalizeBindingsByGroup} from '../adapter-utils/bind-groups';
|
|
15
|
+
|
|
16
|
+
type AnyPipeline = RenderPipeline | ComputePipeline;
|
|
17
|
+
type AnyShaderLayout = ShaderLayout | ComputeShaderLayout;
|
|
18
|
+
type BindGroupCacheKeys = Partial<Record<number, object>>;
|
|
19
|
+
type BindGroupMap = Partial<Record<number, unknown>>;
|
|
20
|
+
type LayoutCache = Partial<Record<number, object>>;
|
|
21
|
+
type LayoutBindGroupCache = {
|
|
22
|
+
bindGroupsBySource: WeakMap<object, unknown | null>;
|
|
23
|
+
emptyBindGroup?: unknown;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export class BindGroupFactory {
|
|
27
|
+
readonly device: Device;
|
|
28
|
+
|
|
29
|
+
private readonly _layoutCacheByPipeline: WeakMap<AnyPipeline, LayoutCache> = new WeakMap();
|
|
30
|
+
private readonly _bindGroupCacheByLayout: WeakMap<object, LayoutBindGroupCache> = new WeakMap();
|
|
31
|
+
|
|
32
|
+
constructor(device: Device) {
|
|
33
|
+
this.device = device;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
getBindGroups(
|
|
37
|
+
pipeline: AnyPipeline,
|
|
38
|
+
bindings?: Bindings | BindingsByGroup,
|
|
39
|
+
bindGroupCacheKeys?: BindGroupCacheKeys
|
|
40
|
+
): BindGroupMap {
|
|
41
|
+
if (this.device.type !== 'webgpu' || pipeline.shaderLayout.bindings.length === 0) {
|
|
42
|
+
return {};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const bindingsByGroup = normalizeBindingsByGroup(pipeline.shaderLayout, bindings);
|
|
46
|
+
const resolvedBindGroups: BindGroupMap = {};
|
|
47
|
+
|
|
48
|
+
for (const group of getBindGroupIndicesUpToMax(pipeline.shaderLayout.bindings)) {
|
|
49
|
+
const groupBindings = bindingsByGroup[group];
|
|
50
|
+
const bindGroupLayout = this._getBindGroupLayout(pipeline, group);
|
|
51
|
+
|
|
52
|
+
if (!groupBindings || Object.keys(groupBindings).length === 0) {
|
|
53
|
+
if (!hasBindingsInGroup(pipeline.shaderLayout.bindings, group)) {
|
|
54
|
+
resolvedBindGroups[group] = this._getEmptyBindGroup(
|
|
55
|
+
bindGroupLayout,
|
|
56
|
+
pipeline.shaderLayout,
|
|
57
|
+
group
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const bindGroupCacheKey = bindGroupCacheKeys?.[group];
|
|
64
|
+
if (bindGroupCacheKey) {
|
|
65
|
+
const layoutCache = this._getLayoutBindGroupCache(bindGroupLayout);
|
|
66
|
+
if (layoutCache.bindGroupsBySource.has(bindGroupCacheKey)) {
|
|
67
|
+
resolvedBindGroups[group] = layoutCache.bindGroupsBySource.get(bindGroupCacheKey) || null;
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const bindGroup = this.device._createBindGroupWebGPU(
|
|
72
|
+
bindGroupLayout,
|
|
73
|
+
pipeline.shaderLayout,
|
|
74
|
+
groupBindings,
|
|
75
|
+
group
|
|
76
|
+
);
|
|
77
|
+
layoutCache.bindGroupsBySource.set(bindGroupCacheKey, bindGroup);
|
|
78
|
+
resolvedBindGroups[group] = bindGroup;
|
|
79
|
+
} else {
|
|
80
|
+
resolvedBindGroups[group] = this.device._createBindGroupWebGPU(
|
|
81
|
+
bindGroupLayout,
|
|
82
|
+
pipeline.shaderLayout,
|
|
83
|
+
groupBindings,
|
|
84
|
+
group
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return resolvedBindGroups;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
private _getBindGroupLayout(pipeline: AnyPipeline, group: number): object {
|
|
93
|
+
let layoutCache = this._layoutCacheByPipeline.get(pipeline);
|
|
94
|
+
if (!layoutCache) {
|
|
95
|
+
layoutCache = {};
|
|
96
|
+
this._layoutCacheByPipeline.set(pipeline, layoutCache);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
layoutCache[group] ||= this.device._createBindGroupLayoutWebGPU(pipeline, group) as object;
|
|
100
|
+
return layoutCache[group];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
private _getEmptyBindGroup(
|
|
104
|
+
bindGroupLayout: object,
|
|
105
|
+
shaderLayout: AnyShaderLayout,
|
|
106
|
+
group: number
|
|
107
|
+
): unknown {
|
|
108
|
+
const layoutCache = this._getLayoutBindGroupCache(bindGroupLayout);
|
|
109
|
+
layoutCache.emptyBindGroup ||=
|
|
110
|
+
this.device._createBindGroupWebGPU(bindGroupLayout, shaderLayout, {}, group) || null;
|
|
111
|
+
return layoutCache.emptyBindGroup;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
private _getLayoutBindGroupCache(bindGroupLayout: object): LayoutBindGroupCache {
|
|
115
|
+
let layoutCache = this._bindGroupCacheByLayout.get(bindGroupLayout);
|
|
116
|
+
if (!layoutCache) {
|
|
117
|
+
layoutCache = {bindGroupsBySource: new WeakMap()};
|
|
118
|
+
this._bindGroupCacheByLayout.set(bindGroupLayout, layoutCache);
|
|
119
|
+
}
|
|
120
|
+
return layoutCache;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export function _getDefaultBindGroupFactory(device: Device): BindGroupFactory {
|
|
125
|
+
device._factories.bindGroupFactory ||= new BindGroupFactory(device);
|
|
126
|
+
return device._factories.bindGroupFactory as BindGroupFactory;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function getBindGroupIndicesUpToMax(bindings: AnyShaderLayout['bindings']): number[] {
|
|
130
|
+
const maxGroup = bindings.reduce(
|
|
131
|
+
(highestGroup, binding) => Math.max(highestGroup, binding.group),
|
|
132
|
+
-1
|
|
133
|
+
);
|
|
134
|
+
return Array.from({length: maxGroup + 1}, (_, group) => group);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function hasBindingsInGroup(bindings: AnyShaderLayout['bindings'], group: number): boolean {
|
|
138
|
+
return bindings.some(binding => binding.group === group);
|
|
139
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {PipelineFactory} from './pipeline-factory';
|
|
6
|
+
import type {ShaderFactory} from './shader-factory';
|
|
7
|
+
|
|
8
|
+
export type CoreModuleState = {
|
|
9
|
+
defaultPipelineFactory?: PipelineFactory;
|
|
10
|
+
defaultShaderFactory?: ShaderFactory;
|
|
11
|
+
};
|