@luma.gl/core 9.0.0-beta.4 → 9.0.0-beta.6
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/attribute-utils/get-attribute-from-layouts.d.ts +4 -4
- package/dist/adapter/attribute-utils/get-attribute-from-layouts.d.ts.map +1 -1
- package/dist/adapter/attribute-utils/get-attribute-from-layouts.js +138 -106
- package/dist/adapter/canvas-context.d.ts +2 -2
- package/dist/adapter/canvas-context.d.ts.map +1 -1
- package/dist/adapter/canvas-context.js +306 -232
- package/dist/adapter/device.d.ts +112 -69
- package/dist/adapter/device.d.ts.map +1 -1
- package/dist/adapter/device.js +145 -94
- package/dist/adapter/resources/buffer.d.ts +3 -3
- package/dist/adapter/resources/buffer.d.ts.map +1 -1
- package/dist/adapter/resources/buffer.js +70 -56
- package/dist/adapter/resources/command-buffer.d.ts +2 -2
- package/dist/adapter/resources/command-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/command-buffer.js +15 -12
- package/dist/adapter/resources/command-encoder.d.ts +22 -7
- package/dist/adapter/resources/command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/command-encoder.js +16 -16
- package/dist/adapter/resources/compute-pass.d.ts +16 -5
- package/dist/adapter/resources/compute-pass.d.ts.map +1 -1
- package/dist/adapter/resources/compute-pass.js +15 -12
- package/dist/adapter/resources/compute-pipeline.d.ts +4 -4
- package/dist/adapter/resources/compute-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/compute-pipeline.js +20 -17
- package/dist/adapter/resources/external-texture.d.ts +2 -2
- package/dist/adapter/resources/external-texture.d.ts.map +1 -1
- package/dist/adapter/resources/external-texture.js +14 -14
- package/dist/adapter/resources/framebuffer.d.ts +9 -8
- package/dist/adapter/resources/framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/framebuffer.js +191 -91
- package/dist/adapter/resources/query-set.d.ts +26 -0
- package/dist/adapter/resources/query-set.d.ts.map +1 -0
- package/dist/adapter/resources/query-set.js +18 -0
- package/dist/adapter/resources/render-pass.d.ts +22 -9
- package/dist/adapter/resources/render-pass.d.ts.map +1 -1
- package/dist/adapter/resources/render-pass.js +34 -20
- package/dist/adapter/resources/render-pipeline.d.ts +22 -18
- package/dist/adapter/resources/render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/render-pipeline.js +50 -33
- package/dist/adapter/resources/resource.d.ts +1 -1
- package/dist/adapter/resources/resource.d.ts.map +1 -1
- package/dist/adapter/resources/resource.js +133 -92
- package/dist/adapter/resources/sampler.d.ts +3 -3
- package/dist/adapter/resources/sampler.d.ts.map +1 -1
- package/dist/adapter/resources/sampler.js +24 -23
- package/dist/adapter/resources/shader.d.ts +8 -6
- package/dist/adapter/resources/shader.d.ts.map +1 -1
- package/dist/adapter/resources/shader.js +98 -74
- package/dist/adapter/resources/texture-view.d.ts +32 -0
- package/dist/adapter/resources/texture-view.d.ts.map +1 -0
- package/dist/adapter/resources/texture-view.js +24 -0
- package/dist/adapter/resources/texture.d.ts +10 -15
- package/dist/adapter/resources/texture.d.ts.map +1 -1
- package/dist/adapter/resources/texture.js +54 -42
- package/dist/adapter/resources/transform-feedback.d.ts +7 -7
- package/dist/adapter/resources/transform-feedback.d.ts.map +1 -1
- package/dist/adapter/resources/transform-feedback.js +15 -14
- package/dist/adapter/resources/vertex-array.d.ts +9 -9
- package/dist/adapter/resources/vertex-array.d.ts.map +1 -1
- package/dist/adapter/resources/vertex-array.js +36 -20
- package/dist/adapter/type-utils/decode-attribute-type.d.ts +2 -2
- package/dist/adapter/type-utils/decode-attribute-type.d.ts.map +1 -1
- package/dist/adapter/type-utils/decode-attribute-type.js +59 -52
- package/dist/adapter/type-utils/decode-data-type.d.ts +1 -1
- package/dist/adapter/type-utils/decode-data-type.d.ts.map +1 -1
- package/dist/adapter/type-utils/decode-data-type.js +39 -35
- package/dist/adapter/type-utils/decode-shader-types.d.ts +1 -1
- package/dist/adapter/type-utils/decode-shader-types.d.ts.map +1 -1
- package/dist/adapter/type-utils/decode-shader-types.js +36 -96
- package/dist/adapter/type-utils/decode-texture-format.d.ts +6 -2
- package/dist/adapter/type-utils/decode-texture-format.d.ts.map +1 -1
- package/dist/adapter/type-utils/decode-texture-format.js +172 -92
- package/dist/adapter/type-utils/decode-vertex-format.d.ts +1 -1
- package/dist/adapter/type-utils/decode-vertex-format.d.ts.map +1 -1
- package/dist/adapter/type-utils/decode-vertex-format.js +30 -22
- package/dist/adapter/type-utils/vertex-format-from-attribute.d.ts +2 -2
- package/dist/adapter/type-utils/vertex-format-from-attribute.d.ts.map +1 -1
- package/dist/adapter/type-utils/vertex-format-from-attribute.js +72 -65
- package/dist/adapter/type-utils/wgsl-utils.d.ts +1 -1
- package/dist/adapter/type-utils/wgsl-utils.d.ts.map +1 -1
- package/dist/adapter/type-utils/wgsl-utils.js +17 -13
- package/dist/adapter/types/accessor.d.ts +1 -1
- package/dist/adapter/types/accessor.d.ts.map +1 -1
- package/dist/adapter/types/accessor.js +3 -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/buffer-layout.js +3 -1
- package/dist/adapter/types/parameters.d.ts +28 -6
- package/dist/adapter/types/parameters.d.ts.map +1 -1
- package/dist/adapter/types/parameters.js +46 -26
- package/dist/adapter/types/shader-layout.d.ts +8 -7
- package/dist/adapter/types/shader-layout.d.ts.map +1 -1
- package/dist/adapter/types/shader-layout.js +3 -1
- package/dist/adapter/types/shader-types.d.ts.map +1 -1
- package/dist/adapter/types/shader-types.js +3 -1
- package/dist/adapter/types/texture-formats.d.ts +2 -2
- package/dist/adapter/types/texture-formats.d.ts.map +1 -1
- package/dist/adapter/types/texture-formats.js +3 -1
- package/dist/adapter/types/types.d.ts +4 -4
- package/dist/adapter/types/types.d.ts.map +1 -1
- package/dist/adapter/types/types.js +3 -1
- package/dist/adapter/types/vertex-formats.d.ts.map +1 -1
- package/dist/adapter/types/vertex-formats.js +3 -1
- package/dist/dist.dev.js +614 -406
- package/dist/index.cjs +344 -369
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +80 -76
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -5
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +30 -17
- package/dist/lib/compiler-log/compiler-message.d.ts.map +1 -1
- package/dist/lib/compiler-log/compiler-message.js +3 -1
- package/dist/lib/compiler-log/format-compiler-log.d.ts +1 -1
- package/dist/lib/compiler-log/format-compiler-log.d.ts.map +1 -1
- package/dist/lib/compiler-log/format-compiler-log.js +69 -48
- package/dist/lib/compiler-log/get-shader-info.d.ts.map +1 -1
- package/dist/lib/compiler-log/get-shader-info.js +23 -19
- package/dist/lib/luma.d.ts +3 -3
- package/dist/lib/luma.d.ts.map +1 -1
- package/dist/lib/luma.js +60 -51
- package/dist/lib/uniforms/uniform-block.d.ts +3 -4
- package/dist/lib/uniforms/uniform-block.d.ts.map +1 -1
- package/dist/lib/uniforms/uniform-block.js +52 -42
- package/dist/lib/uniforms/uniform-buffer-layout.d.ts +2 -2
- package/dist/lib/uniforms/uniform-buffer-layout.d.ts.map +1 -1
- package/dist/lib/uniforms/uniform-buffer-layout.js +86 -66
- package/dist/lib/uniforms/uniform-store.d.ts +6 -6
- package/dist/lib/uniforms/uniform-store.d.ts.map +1 -1
- package/dist/lib/uniforms/uniform-store.js +111 -75
- package/dist/lib/uniforms/uniform.d.ts +2 -2
- package/dist/lib/uniforms/uniform.d.ts.map +1 -1
- package/dist/lib/uniforms/uniform.js +15 -15
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -3
- package/dist/utils/array-equal.d.ts.map +1 -1
- package/dist/utils/array-equal.js +25 -22
- package/dist/utils/array-utils-flat.d.ts +1 -1
- package/dist/utils/array-utils-flat.d.ts.map +1 -1
- package/dist/utils/array-utils-flat.js +29 -28
- package/dist/utils/assert.d.ts.map +1 -1
- package/dist/utils/assert.js +8 -4
- package/dist/utils/cast.d.ts.map +1 -1
- package/dist/utils/cast.js +5 -2
- package/dist/utils/check-props.d.ts.map +1 -1
- package/dist/utils/check-props.js +30 -26
- package/dist/utils/deep-equal.d.ts.map +1 -1
- package/dist/utils/deep-equal.js +42 -32
- package/dist/utils/format-value.d.ts +1 -1
- package/dist/utils/format-value.d.ts.map +1 -1
- package/dist/utils/format-value.js +36 -39
- package/dist/utils/is-array.d.ts +1 -1
- package/dist/utils/is-array.d.ts.map +1 -1
- package/dist/utils/is-array.js +20 -6
- package/dist/utils/load-file.d.ts.map +1 -1
- package/dist/utils/load-file.js +63 -37
- package/dist/utils/log.d.ts.map +1 -1
- package/dist/utils/log.js +5 -4
- package/dist/utils/random.d.ts.map +1 -1
- package/dist/utils/random.js +13 -9
- package/dist/utils/request-animation-frame.d.ts.map +1 -1
- package/dist/utils/request-animation-frame.js +12 -3
- package/dist/utils/stats-manager.d.ts.map +1 -1
- package/dist/utils/stats-manager.js +16 -14
- package/dist/utils/stub-methods.d.ts.map +1 -1
- package/dist/utils/stub-methods.js +15 -12
- package/dist/utils/utils.d.ts +0 -6
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +21 -15
- package/dist.min.js +8 -23
- package/package.json +6 -6
- package/src/adapter/attribute-utils/get-attribute-from-layouts.ts +6 -5
- package/src/adapter/canvas-context.ts +8 -5
- package/src/adapter/device.ts +181 -127
- package/src/adapter/resources/buffer.ts +19 -6
- package/src/adapter/resources/command-buffer.ts +7 -5
- package/src/adapter/resources/command-encoder.ts +40 -29
- package/src/adapter/resources/compute-pass.ts +23 -9
- package/src/adapter/resources/compute-pipeline.ts +5 -2
- package/src/adapter/resources/external-texture.ts +8 -2
- package/src/adapter/resources/framebuffer.ts +115 -102
- package/src/adapter/resources/query-set.ts +41 -0
- package/src/adapter/resources/render-pass.ts +48 -54
- package/src/adapter/resources/render-pipeline.ts +22 -9
- package/src/adapter/resources/resource.ts +13 -10
- package/src/adapter/resources/sampler.ts +4 -3
- package/src/adapter/resources/shader.ts +19 -7
- package/src/adapter/resources/texture-view.ts +51 -0
- package/src/adapter/resources/texture.ts +28 -26
- package/src/adapter/resources/transform-feedback.ts +6 -3
- package/src/adapter/resources/vertex-array.ts +11 -3
- package/src/adapter/type-utils/decode-attribute-type.ts +24 -10
- package/src/adapter/type-utils/decode-data-type.ts +5 -1
- package/src/adapter/type-utils/decode-shader-types.ts +12 -9
- package/src/adapter/type-utils/decode-texture-format.ts +28 -12
- package/src/adapter/type-utils/decode-vertex-format.ts +4 -0
- package/src/adapter/type-utils/vertex-format-from-attribute.ts +4 -1
- package/src/adapter/type-utils/wgsl-utils.ts +6 -2
- package/src/adapter/types/accessor.ts +5 -2
- package/src/adapter/types/buffer-layout.ts +11 -8
- package/src/adapter/types/parameters.ts +98 -93
- package/src/adapter/types/shader-layout.ts +11 -2
- package/src/adapter/types/shader-types.ts +2 -1
- package/src/adapter/types/texture-formats.ts +130 -129
- package/src/adapter/types/types.ts +12 -6
- package/src/adapter/types/vertex-formats.ts +4 -5
- package/src/index.ts +30 -15
- package/src/init.ts +10 -4
- package/src/lib/compiler-log/compiler-message.ts +3 -2
- package/src/lib/compiler-log/format-compiler-log.ts +8 -3
- package/src/lib/compiler-log/get-shader-info.ts +2 -1
- package/src/lib/luma.ts +13 -8
- package/src/lib/uniforms/uniform-block.ts +7 -3
- package/src/lib/uniforms/uniform-buffer-layout.ts +16 -10
- package/src/lib/uniforms/uniform-store.ts +4 -1
- package/src/lib/uniforms/uniform.ts +12 -6
- package/src/types.ts +7 -3
- package/src/utils/array-equal.ts +2 -1
- package/src/utils/array-utils-flat.ts +9 -3
- package/src/utils/assert.ts +4 -0
- package/src/utils/cast.ts +4 -0
- package/src/utils/check-props.ts +9 -1
- package/src/utils/deep-equal.ts +4 -0
- package/src/utils/format-value.ts +9 -2
- package/src/utils/is-array.ts +4 -0
- package/src/utils/load-file.ts +5 -3
- package/src/utils/log.ts +4 -0
- package/src/utils/random.ts +4 -0
- package/src/utils/request-animation-frame.ts +4 -0
- package/src/utils/stats-manager.ts +6 -2
- package/src/utils/stub-methods.ts +10 -1
- package/src/utils/utils.ts +2 -10
- package/dist/adapter/attribute-utils/get-attribute-from-layouts.js.map +0 -1
- package/dist/adapter/canvas-context.js.map +0 -1
- package/dist/adapter/device.js.map +0 -1
- package/dist/adapter/resources/buffer.js.map +0 -1
- package/dist/adapter/resources/command-buffer.js.map +0 -1
- package/dist/adapter/resources/command-encoder.js.map +0 -1
- package/dist/adapter/resources/compute-pass.js.map +0 -1
- package/dist/adapter/resources/compute-pipeline.js.map +0 -1
- package/dist/adapter/resources/external-texture.js.map +0 -1
- package/dist/adapter/resources/framebuffer.js.map +0 -1
- package/dist/adapter/resources/render-pass.js.map +0 -1
- package/dist/adapter/resources/render-pipeline.js.map +0 -1
- package/dist/adapter/resources/resource.js.map +0 -1
- package/dist/adapter/resources/sampler.js.map +0 -1
- package/dist/adapter/resources/shader.js.map +0 -1
- package/dist/adapter/resources/texture.js.map +0 -1
- package/dist/adapter/resources/transform-feedback.js.map +0 -1
- package/dist/adapter/resources/vertex-array.js.map +0 -1
- package/dist/adapter/type-utils/decode-attribute-type.js.map +0 -1
- package/dist/adapter/type-utils/decode-data-type.js.map +0 -1
- package/dist/adapter/type-utils/decode-shader-types.js.map +0 -1
- package/dist/adapter/type-utils/decode-texture-format.js.map +0 -1
- package/dist/adapter/type-utils/decode-vertex-format.js.map +0 -1
- package/dist/adapter/type-utils/vertex-format-from-attribute.js.map +0 -1
- package/dist/adapter/type-utils/wgsl-utils.js.map +0 -1
- package/dist/adapter/types/accessor.js.map +0 -1
- package/dist/adapter/types/buffer-layout.js.map +0 -1
- package/dist/adapter/types/parameters.js.map +0 -1
- package/dist/adapter/types/shader-layout.js.map +0 -1
- package/dist/adapter/types/shader-types.js.map +0 -1
- package/dist/adapter/types/texture-formats.js.map +0 -1
- package/dist/adapter/types/types.js.map +0 -1
- package/dist/adapter/types/vertex-formats.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/init.js.map +0 -1
- package/dist/lib/compiler-log/compiler-message.js.map +0 -1
- package/dist/lib/compiler-log/format-compiler-log.js.map +0 -1
- package/dist/lib/compiler-log/get-shader-info.js.map +0 -1
- package/dist/lib/luma.js.map +0 -1
- package/dist/lib/uniforms/uniform-block.js.map +0 -1
- package/dist/lib/uniforms/uniform-buffer-layout.js.map +0 -1
- package/dist/lib/uniforms/uniform-store.js.map +0 -1
- package/dist/lib/uniforms/uniform.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils/array-equal.js.map +0 -1
- package/dist/utils/array-utils-flat.js.map +0 -1
- package/dist/utils/assert.js.map +0 -1
- package/dist/utils/cast.js.map +0 -1
- package/dist/utils/check-props.js.map +0 -1
- package/dist/utils/deep-equal.js.map +0 -1
- package/dist/utils/format-value.js.map +0 -1
- package/dist/utils/is-array.js.map +0 -1
- package/dist/utils/load-file.js.map +0 -1
- package/dist/utils/log.js.map +0 -1
- package/dist/utils/random.js.map +0 -1
- package/dist/utils/request-animation-frame.js.map +0 -1
- package/dist/utils/stats-manager.js.map +0 -1
- package/dist/utils/stub-methods.js.map +0 -1
- package/dist/utils/utils.js.map +0 -1
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
// luma.gl
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
2
5
|
import {isBrowser} from '@probe.gl/env';
|
|
3
6
|
import type {Device} from './device';
|
|
4
7
|
import type {Framebuffer} from './resources/framebuffer';
|
|
@@ -120,7 +123,7 @@ export abstract class CanvasContext {
|
|
|
120
123
|
|
|
121
124
|
// React to size changes
|
|
122
125
|
if (this.canvas instanceof HTMLCanvasElement && props.autoResize) {
|
|
123
|
-
this.resizeObserver = new ResizeObserver(
|
|
126
|
+
this.resizeObserver = new ResizeObserver(entries => {
|
|
124
127
|
for (const entry of entries) {
|
|
125
128
|
if (entry.target === this.canvas) {
|
|
126
129
|
this.update();
|
|
@@ -145,7 +148,7 @@ export abstract class CanvasContext {
|
|
|
145
148
|
|
|
146
149
|
useDevicePixels = useDevicePixels === undefined ? this.props.useDevicePixels : useDevicePixels;
|
|
147
150
|
|
|
148
|
-
if (!useDevicePixels || useDevicePixels as number <= 0) {
|
|
151
|
+
if (!useDevicePixels || (useDevicePixels as number) <= 0) {
|
|
149
152
|
return 1;
|
|
150
153
|
}
|
|
151
154
|
|
|
@@ -320,7 +323,7 @@ function getPageLoadPromise(): Promise<void> {
|
|
|
320
323
|
if (isPageLoaded() || typeof window === 'undefined') {
|
|
321
324
|
return Promise.resolve();
|
|
322
325
|
}
|
|
323
|
-
return new Promise(
|
|
326
|
+
return new Promise(resolve => {
|
|
324
327
|
window.addEventListener('load', () => resolve());
|
|
325
328
|
});
|
|
326
329
|
}
|
|
@@ -387,7 +390,7 @@ function scalePixels(
|
|
|
387
390
|
height: number;
|
|
388
391
|
} {
|
|
389
392
|
const point = pixel as [number, number];
|
|
390
|
-
|
|
393
|
+
|
|
391
394
|
const x = scaleX(point[0], ratio, width);
|
|
392
395
|
let y = scaleY(point[1], ratio, height, yInvert);
|
|
393
396
|
|
package/src/adapter/device.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
// luma.gl
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
2
5
|
import {VERSION} from '../init';
|
|
3
6
|
import {StatsManager, lumaStats} from '../utils/stats-manager';
|
|
4
7
|
import {log} from '../utils/log';
|
|
@@ -19,40 +22,9 @@ import type {ComputePass, ComputePassProps} from './resources/compute-pass';
|
|
|
19
22
|
import type {CommandEncoder, CommandEncoderProps} from './resources/command-encoder';
|
|
20
23
|
import type {VertexArray, VertexArrayProps} from './resources/vertex-array';
|
|
21
24
|
import type {TransformFeedback, TransformFeedbackProps} from './resources/transform-feedback';
|
|
25
|
+
import type {QuerySet, QuerySetProps} from './resources/query-set';
|
|
22
26
|
|
|
23
|
-
|
|
24
|
-
export type DeviceProps = {
|
|
25
|
-
id?: string;
|
|
26
|
-
|
|
27
|
-
type?: 'webgl' | 'webgl1' | 'webgl2' | 'webgpu' | 'best-available';
|
|
28
|
-
|
|
29
|
-
// Common parameters
|
|
30
|
-
canvas?: HTMLCanvasElement | OffscreenCanvas | string | null; // A canvas element or a canvas string id
|
|
31
|
-
container?: HTMLElement | string | null;
|
|
32
|
-
width?: number /** width is only used when creating a new canvas */;
|
|
33
|
-
height?: number /** height is only used when creating a new canvas */;
|
|
34
|
-
|
|
35
|
-
// WebGLDevice parameters
|
|
36
|
-
webgl2?: boolean; // Set to false to not create a WebGL2 context (force webgl1)
|
|
37
|
-
webgl1?: boolean; // set to false to not create a WebGL1 context (fails if webgl2 not available)
|
|
38
|
-
|
|
39
|
-
// WebGLContext PARAMETERS - Can only be set on context creation...
|
|
40
|
-
// alpha?: boolean; // Default render target has an alpha buffer.
|
|
41
|
-
// depth?: boolean; // Default render target has a depth buffer of at least 16 bits.
|
|
42
|
-
// stencil?: boolean; // Default render target has a stencil buffer of at least 8 bits.
|
|
43
|
-
// antialias?: boolean; // Boolean that indicates whether or not to perform anti-aliasing.
|
|
44
|
-
// premultipliedAlpha?: boolean; // Boolean that indicates that the page compositor will assume the drawing buffer contains colors with pre-multiplied alpha.
|
|
45
|
-
// preserveDrawingBuffer?: boolean; // Default render target buffers will not be automatically cleared and will preserve their values until cleared or overwritten
|
|
46
|
-
// failIfMajorPerformanceCaveat?: boolean; // Do not create if the system performance is low.
|
|
47
|
-
|
|
48
|
-
// Unclear if these are still supported
|
|
49
|
-
debug?: boolean; // Instrument context (at the expense of performance)
|
|
50
|
-
manageState?: boolean; // Set to false to disable WebGL state management instrumentation
|
|
51
|
-
break?: string[]; // TODO: types
|
|
52
|
-
|
|
53
|
-
// @deprecated Attach to existing context
|
|
54
|
-
gl?: WebGLRenderingContext | WebGL2RenderingContext | null;
|
|
55
|
-
};
|
|
27
|
+
import {isTextureFormatCompressed} from './type-utils/decode-texture-format';
|
|
56
28
|
|
|
57
29
|
/**
|
|
58
30
|
* Identifies the GPU vendor and driver.
|
|
@@ -62,7 +34,7 @@ export type DeviceProps = {
|
|
|
62
34
|
*/
|
|
63
35
|
export type DeviceInfo = {
|
|
64
36
|
/** Type of device */
|
|
65
|
-
type: 'webgl' | '
|
|
37
|
+
type: 'webgl' | 'webgpu';
|
|
66
38
|
/** Vendor (name of GPU vendor, Apple, nVidia etc */
|
|
67
39
|
vendor: string;
|
|
68
40
|
/** Renderer (usually driver name) */
|
|
@@ -81,132 +53,198 @@ export type DeviceInfo = {
|
|
|
81
53
|
fallback?: boolean;
|
|
82
54
|
/** Shader language supported by device.createShader() */
|
|
83
55
|
shadingLanguage: 'wgsl' | 'glsl';
|
|
84
|
-
/** Highest supported shader language version
|
|
56
|
+
/** Highest supported shader language version: GLSL 3.00 = 300, WGSL 1.00 = 100 */
|
|
85
57
|
shadingLanguageVersion: number;
|
|
86
58
|
};
|
|
87
59
|
|
|
88
|
-
/** Limits for a device */
|
|
89
|
-
export
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
60
|
+
/** Limits for a device (max supported sizes of resources, max number of bindings etc) */
|
|
61
|
+
export abstract class DeviceLimits {
|
|
62
|
+
/** max number of TextureDimension1D */
|
|
63
|
+
abstract maxTextureDimension1D: number;
|
|
64
|
+
/** max number of TextureDimension2D */
|
|
65
|
+
abstract maxTextureDimension2D: number;
|
|
66
|
+
/** max number of TextureDimension3D */
|
|
67
|
+
abstract maxTextureDimension3D: number;
|
|
68
|
+
/** max number of TextureArrayLayers */
|
|
69
|
+
abstract maxTextureArrayLayers: number;
|
|
70
|
+
/** max number of BindGroups */
|
|
71
|
+
abstract maxBindGroups: number;
|
|
72
|
+
/** max number of DynamicUniformBuffers per PipelineLayout */
|
|
73
|
+
abstract maxDynamicUniformBuffersPerPipelineLayout: number;
|
|
74
|
+
/** max number of DynamicStorageBuffers per PipelineLayout */
|
|
75
|
+
abstract maxDynamicStorageBuffersPerPipelineLayout: number;
|
|
76
|
+
/** max number of SampledTextures per ShaderStage */
|
|
77
|
+
abstract maxSampledTexturesPerShaderStage: number;
|
|
78
|
+
/** max number of Samplers per ShaderStage */
|
|
79
|
+
abstract maxSamplersPerShaderStage: number;
|
|
80
|
+
/** max number of StorageBuffers per ShaderStage */
|
|
81
|
+
abstract maxStorageBuffersPerShaderStage: number;
|
|
82
|
+
/** max number of StorageTextures per ShaderStage */
|
|
83
|
+
abstract maxStorageTexturesPerShaderStage: number;
|
|
84
|
+
/** max number of UniformBuffers per ShaderStage */
|
|
85
|
+
abstract maxUniformBuffersPerShaderStage: number;
|
|
86
|
+
/** max number of UniformBufferBindingSize */
|
|
87
|
+
abstract maxUniformBufferBindingSize: number;
|
|
88
|
+
/** max number of StorageBufferBindingSize */
|
|
89
|
+
abstract maxStorageBufferBindingSize: number;
|
|
90
|
+
/** min UniformBufferOffsetAlignment */
|
|
91
|
+
abstract minUniformBufferOffsetAlignment: number;
|
|
92
|
+
/** min StorageBufferOffsetAlignment */
|
|
93
|
+
abstract minStorageBufferOffsetAlignment: number;
|
|
94
|
+
/** max number of VertexBuffers */
|
|
95
|
+
abstract maxVertexBuffers: number;
|
|
96
|
+
/** max number of VertexAttributes */
|
|
97
|
+
abstract maxVertexAttributes: number;
|
|
98
|
+
/** max number of VertexBufferArrayStride */
|
|
99
|
+
abstract maxVertexBufferArrayStride: number;
|
|
100
|
+
/** max number of InterStageShaderComponents */
|
|
101
|
+
abstract maxInterStageShaderComponents: number;
|
|
102
|
+
/** max number of ComputeWorkgroupStorageSize */
|
|
103
|
+
abstract maxComputeWorkgroupStorageSize: number;
|
|
104
|
+
/** max number of ComputeInvocations per Workgroup */
|
|
105
|
+
abstract maxComputeInvocationsPerWorkgroup: number;
|
|
106
|
+
/** max ComputeWorkgroupSizeX */
|
|
107
|
+
abstract maxComputeWorkgroupSizeX: number;
|
|
108
|
+
/** max ComputeWorkgroupSizeY */
|
|
109
|
+
abstract maxComputeWorkgroupSizeY: number;
|
|
110
|
+
/** max ComputeWorkgroupSizeZ */
|
|
111
|
+
abstract maxComputeWorkgroupSizeZ: number;
|
|
112
|
+
/** max ComputeWorkgroupsPerDimension */
|
|
113
|
+
abstract maxComputeWorkgroupsPerDimension: number;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** Set-like class for features (lets apps check for WebGL / WebGPU extensions) */
|
|
117
|
+
export class DeviceFeatures {
|
|
118
|
+
protected features: Set<DeviceFeature>;
|
|
119
|
+
|
|
120
|
+
constructor(features: DeviceFeature[] = []) {
|
|
121
|
+
this.features = new Set<DeviceFeature>(features);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
*[Symbol.iterator](): IterableIterator<DeviceFeature> {
|
|
125
|
+
yield* this.features;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
has(feature: DeviceFeature): boolean {
|
|
129
|
+
return this.features.has(feature);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/** Device feature names */
|
|
134
|
+
export type DeviceFeature =
|
|
135
|
+
| WebGPUDeviceFeature
|
|
136
|
+
| WebGLDeviceFeature
|
|
137
|
+
| WebGLCompressedTextureFeatures;
|
|
117
138
|
|
|
118
139
|
export type WebGPUDeviceFeature =
|
|
119
140
|
| 'depth-clip-control'
|
|
141
|
+
| 'indirect-first-instance'
|
|
142
|
+
| 'timestamp-query'
|
|
143
|
+
| 'shader-f16'
|
|
120
144
|
| 'depth24unorm-stencil8'
|
|
121
145
|
| 'depth32float-stencil8'
|
|
122
|
-
| '
|
|
123
|
-
| '
|
|
146
|
+
| 'rg11b10ufloat-renderable' // Is the rg11b10ufloat texture format renderable?
|
|
147
|
+
| 'float32-filterable' // Is the float32 format filterable?
|
|
148
|
+
| 'bgra8unorm-storage' // Can the bgra8unorm texture format be used in storage buffers?
|
|
124
149
|
| 'texture-compression-bc'
|
|
125
150
|
| 'texture-compression-etc2'
|
|
126
151
|
| 'texture-compression-astc';
|
|
127
|
-
|
|
128
|
-
//
|
|
129
|
-
// 'depth-clamping' |
|
|
130
|
-
// 'depth24unorm-stencil8' |
|
|
131
|
-
// 'depth32float-stencil8' |
|
|
132
|
-
// 'pipeline-statistics-query' |
|
|
133
|
-
// 'timestamp-query' |
|
|
134
|
-
// 'texture-compression-bc'
|
|
152
|
+
// | 'depth-clamping' // removed from the WebGPU spec...
|
|
153
|
+
// | 'pipeline-statistics-query' // removed from the WebGPU spec...
|
|
135
154
|
|
|
136
155
|
export type WebGLDeviceFeature =
|
|
137
|
-
|
|
138
|
-
| '
|
|
139
|
-
| 'webgl'
|
|
156
|
+
// webgl extension features
|
|
157
|
+
| 'timer-query-webgl' // unify with WebGPU timestamp-query?
|
|
158
|
+
| 'compilation-status-async-webgl' // Non-blocking shader compile/link status query available
|
|
159
|
+
| 'provoking-vertex-webgl' // parameters.provokingVertex
|
|
160
|
+
| 'polygon-mode-webgl' // parameters.polygonMode and parameters.polygonOffsetLine
|
|
140
161
|
|
|
141
|
-
//
|
|
142
|
-
| '
|
|
143
|
-
| '
|
|
144
|
-
| '
|
|
162
|
+
// GLSL extension features
|
|
163
|
+
| 'shader-noperspective-interpolation-webgl' // Vertex outputs & fragment inputs can have a `noperspective` interpolation qualifier.
|
|
164
|
+
| 'shader-conservative-depth-webgl' // GLSL `gl_FragDepth` qualifiers `depth_unchanged` etc can enable early depth test
|
|
165
|
+
| 'shader-clip-cull-distance-webgl' // Makes gl_ClipDistance and gl_CullDistance available in shaders
|
|
166
|
+
|
|
167
|
+
// texture rendering
|
|
168
|
+
| 'float32-renderable-webgl'
|
|
169
|
+
| 'float16-renderable-webgl'
|
|
170
|
+
| 'rgb9e5ufloat_renderable-webgl'
|
|
171
|
+
| 'snorm8-renderable-webgl'
|
|
172
|
+
| 'norm16-renderable-webgl'
|
|
173
|
+
| 'snorm16-renderable-webgl'
|
|
145
174
|
|
|
146
175
|
// texture filtering
|
|
147
|
-
| '
|
|
148
|
-
| 'texture-
|
|
149
|
-
| 'texture-filter-anisotropic-webgl'
|
|
176
|
+
| 'float16-filterable-webgl'
|
|
177
|
+
| 'texture-filterable-anisotropic-webgl'
|
|
150
178
|
|
|
151
|
-
// texture
|
|
152
|
-
| '
|
|
153
|
-
| 'texture-renderable-float16-webgl'
|
|
154
|
-
| 'texture-renderable-rgba32float-webgl' // TODO - remove
|
|
179
|
+
// texture storage bindings
|
|
180
|
+
| 'bgra8unorm-storage'
|
|
155
181
|
|
|
156
182
|
// texture blending
|
|
157
|
-
| 'texture-blend-float-
|
|
158
|
-
|
|
159
|
-
// texture format support
|
|
160
|
-
| 'texture-formats-norm16-webgl'
|
|
161
|
-
| 'texture-formats-srgb-webgl1'
|
|
162
|
-
| 'texture-formats-depth-webgl1'
|
|
163
|
-
| 'texture-formats-float32-webgl1'
|
|
164
|
-
| 'texture-formats-float16-webgl1'
|
|
165
|
-
|
|
166
|
-
// api support
|
|
167
|
-
| 'vertex-array-object-webgl1'
|
|
168
|
-
| 'instanced-rendering-webgl1'
|
|
169
|
-
| 'multiple-render-targets-webgl1'
|
|
170
|
-
| 'index-uint32-webgl1'
|
|
171
|
-
| 'blend-minmax-webgl1'
|
|
172
|
-
| 'transform-feedback-webgl2'
|
|
173
|
-
|
|
174
|
-
// glsl extensions
|
|
175
|
-
| 'glsl-frag-data'
|
|
176
|
-
| 'glsl-frag-depth'
|
|
177
|
-
| 'glsl-derivatives'
|
|
178
|
-
| 'glsl-texture-lod';
|
|
183
|
+
| 'texture-blend-float-webgl';
|
|
179
184
|
|
|
180
185
|
type WebGLCompressedTextureFeatures =
|
|
181
186
|
| 'texture-compression-bc5-webgl'
|
|
187
|
+
| 'texture-compression-bc7-webgl'
|
|
182
188
|
| 'texture-compression-etc1-webgl'
|
|
183
189
|
| 'texture-compression-pvrtc-webgl'
|
|
184
190
|
| 'texture-compression-atc-webgl';
|
|
185
191
|
|
|
186
|
-
/**
|
|
187
|
-
export type
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
|
192
|
+
/** Device properties */
|
|
193
|
+
export type DeviceProps = {
|
|
194
|
+
id?: string;
|
|
195
|
+
|
|
196
|
+
type?: 'webgl' | 'webgpu' | 'best-available';
|
|
197
|
+
|
|
198
|
+
// Common parameters
|
|
199
|
+
canvas?: HTMLCanvasElement | OffscreenCanvas | string | null; // A canvas element or a canvas string id
|
|
200
|
+
container?: HTMLElement | string | null;
|
|
201
|
+
width?: number /** width is only used when creating a new canvas */;
|
|
202
|
+
height?: number /** height is only used when creating a new canvas */;
|
|
203
|
+
|
|
204
|
+
/** Request a Device with the highest limits supported by platform. */
|
|
205
|
+
requestMaximalLimits?: boolean;
|
|
206
|
+
|
|
207
|
+
// WebGLContext PARAMETERS - Can only be set on context creation...
|
|
208
|
+
// alpha?: boolean; // Default render target has an alpha buffer.
|
|
209
|
+
// depth?: boolean; // Default render target has a depth buffer of at least 16 bits.
|
|
210
|
+
// stencil?: boolean; // Default render target has a stencil buffer of at least 8 bits.
|
|
211
|
+
// antialias?: boolean; // Boolean that indicates whether or not to perform anti-aliasing.
|
|
212
|
+
// premultipliedAlpha?: boolean; // Boolean that indicates that the page compositor will assume the drawing buffer contains colors with pre-multiplied alpha.
|
|
213
|
+
// preserveDrawingBuffer?: boolean; // Default render target buffers will not be automatically cleared and will preserve their values until cleared or overwritten
|
|
214
|
+
// failIfMajorPerformanceCaveat?: boolean; // Do not create if the system performance is low.
|
|
215
|
+
|
|
216
|
+
onError?: (error: Error) => unknown;
|
|
217
|
+
/** Instrument context (at the expense of performance) */
|
|
218
|
+
debug?: boolean;
|
|
219
|
+
/** Initialize the SpectorJS WebGL debugger */
|
|
220
|
+
spector?: boolean;
|
|
221
|
+
|
|
222
|
+
// Unclear if these are still supported
|
|
223
|
+
manageState?: boolean; // Set to false to disable WebGL state management instrumentation
|
|
224
|
+
break?: string[]; // TODO: types
|
|
225
|
+
|
|
226
|
+
// @deprecated Attach to existing context
|
|
227
|
+
gl?: WebGL2RenderingContext | null;
|
|
228
|
+
};
|
|
191
229
|
|
|
192
230
|
/**
|
|
193
231
|
* WebGPU Device/WebGL context abstraction
|
|
194
232
|
*/
|
|
195
233
|
export abstract class Device {
|
|
196
|
-
|
|
197
234
|
static defaultProps: Required<DeviceProps> = {
|
|
198
235
|
id: null!,
|
|
199
236
|
type: 'best-available',
|
|
200
237
|
canvas: null,
|
|
201
238
|
container: null,
|
|
202
|
-
webgl2: true, // Attempt to create a WebGL2 context
|
|
203
|
-
webgl1: true, // Attempt to create a WebGL1 context (false to fail if webgl2 not available)
|
|
204
239
|
manageState: true,
|
|
205
240
|
width: 800, // width are height are only used by headless gl
|
|
206
241
|
height: 600,
|
|
242
|
+
|
|
243
|
+
requestMaximalLimits: true,
|
|
207
244
|
debug: Boolean(log.get('debug')), // Instrument context (at the expense of performance)
|
|
245
|
+
spector: Boolean(log.get('spector')), // Initialize the SpectorJS WebGL debugger
|
|
208
246
|
break: [],
|
|
209
|
-
|
|
247
|
+
|
|
210
248
|
// alpha: undefined,
|
|
211
249
|
// depth: undefined,
|
|
212
250
|
// stencil: undefined,
|
|
@@ -214,10 +252,12 @@ export abstract class Device {
|
|
|
214
252
|
// premultipliedAlpha: undefined,
|
|
215
253
|
// preserveDrawingBuffer: undefined,
|
|
216
254
|
// failIfMajorPerformanceCaveat: undefined
|
|
217
|
-
|
|
218
|
-
gl: null
|
|
255
|
+
|
|
256
|
+
gl: null,
|
|
257
|
+
|
|
258
|
+
// Callbacks
|
|
259
|
+
onError: (error: Error) => log.error(error.message)
|
|
219
260
|
};
|
|
220
|
-
|
|
221
261
|
|
|
222
262
|
get [Symbol.toStringTag](): string {
|
|
223
263
|
return 'Device';
|
|
@@ -249,7 +289,7 @@ export abstract class Device {
|
|
|
249
289
|
abstract info: DeviceInfo;
|
|
250
290
|
|
|
251
291
|
/** Optional capability discovery */
|
|
252
|
-
abstract
|
|
292
|
+
abstract features: DeviceFeatures;
|
|
253
293
|
|
|
254
294
|
/** WebGPU style device limits */
|
|
255
295
|
abstract get limits(): DeviceLimits;
|
|
@@ -263,6 +303,11 @@ export abstract class Device {
|
|
|
263
303
|
/** Check if device supports rendering to a specific texture format */
|
|
264
304
|
abstract isTextureFormatRenderable(format: TextureFormat): boolean;
|
|
265
305
|
|
|
306
|
+
/** Check if a specific texture format is GPU compressed */
|
|
307
|
+
isTextureFormatCompressed(format: TextureFormat): boolean {
|
|
308
|
+
return isTextureFormatCompressed(format);
|
|
309
|
+
}
|
|
310
|
+
|
|
266
311
|
// Device loss
|
|
267
312
|
|
|
268
313
|
/** `true` if device is already lost */
|
|
@@ -348,9 +393,11 @@ export abstract class Device {
|
|
|
348
393
|
/** Get a renderpass that is set up to render to the primary CanvasContext */
|
|
349
394
|
abstract getDefaultRenderPass(): RenderPass;
|
|
350
395
|
|
|
351
|
-
/** Create a transform feedback (immutable set of output buffer bindings). WebGL
|
|
396
|
+
/** Create a transform feedback (immutable set of output buffer bindings). WebGL only. */
|
|
352
397
|
abstract createTransformFeedback(props: TransformFeedbackProps): TransformFeedback;
|
|
353
398
|
|
|
399
|
+
abstract createQuerySet(props: QuerySetProps): QuerySet;
|
|
400
|
+
|
|
354
401
|
createCommandEncoder(props: CommandEncoderProps = {}): CommandEncoder {
|
|
355
402
|
throw new Error('not implemented');
|
|
356
403
|
}
|
|
@@ -375,7 +422,7 @@ export abstract class Device {
|
|
|
375
422
|
): Uint8Array | Uint16Array | Float32Array {
|
|
376
423
|
throw new Error('not implemented');
|
|
377
424
|
}
|
|
378
|
-
|
|
425
|
+
|
|
379
426
|
/** @deprecated - will be removed - should use command encoder */
|
|
380
427
|
readPixelsToBufferWebGL(
|
|
381
428
|
source: Framebuffer | Texture,
|
|
@@ -414,7 +461,14 @@ export abstract class Device {
|
|
|
414
461
|
throw new Error('not implemented');
|
|
415
462
|
}
|
|
416
463
|
|
|
417
|
-
//
|
|
464
|
+
// IMPLEMENTATION
|
|
465
|
+
|
|
466
|
+
// Error Handling
|
|
467
|
+
|
|
468
|
+
/** Report unhandled device errors */
|
|
469
|
+
onError(error: Error) {
|
|
470
|
+
this.props.onError(error);
|
|
471
|
+
}
|
|
418
472
|
|
|
419
473
|
protected _getBufferProps(props: BufferProps | ArrayBuffer | ArrayBufferView): BufferProps {
|
|
420
474
|
if (props instanceof ArrayBuffer || ArrayBuffer.isView(props)) {
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
// luma.gl
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
2
4
|
|
|
3
5
|
import type {Device} from '../device';
|
|
4
6
|
import {Resource, ResourceProps} from './resource';
|
|
@@ -19,7 +21,7 @@ export type BufferProps = ResourceProps & {
|
|
|
19
21
|
|
|
20
22
|
// TBD
|
|
21
23
|
mappedAtCreation?: boolean;
|
|
22
|
-
}
|
|
24
|
+
};
|
|
23
25
|
|
|
24
26
|
/** Abstract GPU buffer */
|
|
25
27
|
export abstract class Buffer extends Resource<BufferProps> {
|
|
@@ -49,7 +51,9 @@ export abstract class Buffer extends Resource<BufferProps> {
|
|
|
49
51
|
static INDIRECT = 0x0100;
|
|
50
52
|
static QUERY_RESOLVE = 0x0200;
|
|
51
53
|
|
|
52
|
-
override get [Symbol.toStringTag](): string {
|
|
54
|
+
override get [Symbol.toStringTag](): string {
|
|
55
|
+
return 'Buffer';
|
|
56
|
+
}
|
|
53
57
|
|
|
54
58
|
/** The usage with which this buffer was created */
|
|
55
59
|
readonly usage: number;
|
|
@@ -82,7 +86,9 @@ export abstract class Buffer extends Resource<BufferProps> {
|
|
|
82
86
|
abstract readAsync(byteOffset?: number, byteLength?: number): Promise<Uint8Array>;
|
|
83
87
|
|
|
84
88
|
/** Read data synchronously. @note WebGL2 only */
|
|
85
|
-
|
|
89
|
+
readSyncWebGL(byteOffset?: number, byteLength?: number): Uint8Array {
|
|
90
|
+
throw new Error('not implemented');
|
|
91
|
+
}
|
|
86
92
|
|
|
87
93
|
// PROTECTED METHODS (INTENDED FOR USE BY OTHER FRAMEWORK CODE ONLY)
|
|
88
94
|
|
|
@@ -92,9 +98,16 @@ export abstract class Buffer extends Resource<BufferProps> {
|
|
|
92
98
|
debugData: ArrayBuffer = new ArrayBuffer(0);
|
|
93
99
|
|
|
94
100
|
/** This doesn't handle partial non-zero offset updates correctly */
|
|
95
|
-
protected _setDebugData(
|
|
101
|
+
protected _setDebugData(
|
|
102
|
+
data: ArrayBufferView | ArrayBuffer | null,
|
|
103
|
+
byteOffset: number,
|
|
104
|
+
byteLength: number
|
|
105
|
+
): void {
|
|
96
106
|
const buffer: ArrayBuffer | null = ArrayBuffer.isView(data) ? data.buffer : data;
|
|
97
|
-
const debugDataLength = Math.min(
|
|
107
|
+
const debugDataLength = Math.min(
|
|
108
|
+
data ? data.byteLength : byteLength,
|
|
109
|
+
Buffer.DEBUG_DATA_MAX_LENGTH
|
|
110
|
+
);
|
|
98
111
|
if (data === null) {
|
|
99
112
|
this.debugData = new ArrayBuffer(debugDataLength);
|
|
100
113
|
} else if (byteOffset === 0 && byteLength === data.byteLength) {
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
// luma.gl
|
|
2
|
-
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import {Device} from '../device';
|
|
3
6
|
import {Resource, ResourceProps} from './resource';
|
|
4
7
|
|
|
5
8
|
// interface Queue {
|
|
@@ -17,8 +20,7 @@ import {Resource, ResourceProps} from './resource';
|
|
|
17
20
|
// // ): void;
|
|
18
21
|
// }
|
|
19
22
|
|
|
20
|
-
export type CommandBufferProps = ResourceProps & {
|
|
21
|
-
};
|
|
23
|
+
export type CommandBufferProps = ResourceProps & {};
|
|
22
24
|
|
|
23
25
|
/**
|
|
24
26
|
* Encodes commands to queue that can be executed later
|
|
@@ -27,7 +29,7 @@ export abstract class CommandBuffer extends Resource<CommandBufferProps> {
|
|
|
27
29
|
static override defaultProps: Required<CommandBufferProps> = {
|
|
28
30
|
...Resource.defaultProps
|
|
29
31
|
};
|
|
30
|
-
|
|
32
|
+
|
|
31
33
|
override get [Symbol.toStringTag](): string {
|
|
32
34
|
return 'CommandBuffer';
|
|
33
35
|
}
|
|
@@ -1,15 +1,19 @@
|
|
|
1
|
-
// luma.gl
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
2
5
|
import {Device} from '../device';
|
|
3
6
|
import {Resource, ResourceProps} from './resource';
|
|
4
7
|
import {Buffer} from './buffer';
|
|
5
8
|
import {Texture} from './texture';
|
|
9
|
+
import {QuerySet} from './query-set';
|
|
6
10
|
|
|
7
11
|
export type WriteBufferOptions = {
|
|
8
|
-
buffer: Buffer
|
|
9
|
-
bufferOffset?: number
|
|
10
|
-
data: BufferSource
|
|
11
|
-
dataOffset?: number
|
|
12
|
-
size?: number
|
|
12
|
+
buffer: Buffer;
|
|
13
|
+
bufferOffset?: number;
|
|
14
|
+
data: BufferSource;
|
|
15
|
+
dataOffset?: number;
|
|
16
|
+
size?: number;
|
|
13
17
|
};
|
|
14
18
|
|
|
15
19
|
export type WriteTextureOptions = {
|
|
@@ -23,7 +27,7 @@ export type WriteTextureOptions = {
|
|
|
23
27
|
bytesPerRow: number;
|
|
24
28
|
rowsPerImage: number;
|
|
25
29
|
size: [number, number, number] | number[];
|
|
26
|
-
}
|
|
30
|
+
};
|
|
27
31
|
|
|
28
32
|
export type CopyBufferToBufferOptions = {
|
|
29
33
|
source: Buffer;
|
|
@@ -37,7 +41,7 @@ export type CopyBufferToTextureOptions = {
|
|
|
37
41
|
source: Buffer;
|
|
38
42
|
byteOffset?: number;
|
|
39
43
|
destination: Texture;
|
|
40
|
-
mipLevel?: number // = 0;
|
|
44
|
+
mipLevel?: number; // = 0;
|
|
41
45
|
origin?: [number, number, number] | number[];
|
|
42
46
|
aspect?: 'all' | 'stencil-only' | 'depth-only';
|
|
43
47
|
bytesPerRow: number;
|
|
@@ -131,7 +135,7 @@ export abstract class CommandEncoder extends Resource<CommandEncoderProps> {
|
|
|
131
135
|
...Resource.defaultProps,
|
|
132
136
|
measureExecutionTime: undefined
|
|
133
137
|
};
|
|
134
|
-
|
|
138
|
+
|
|
135
139
|
override get [Symbol.toStringTag](): string {
|
|
136
140
|
return 'CommandEncoder';
|
|
137
141
|
}
|
|
@@ -139,34 +143,41 @@ export abstract class CommandEncoder extends Resource<CommandEncoderProps> {
|
|
|
139
143
|
constructor(device: Device, props: CommandEncoderProps) {
|
|
140
144
|
super(device, props, CommandEncoder.defaultProps);
|
|
141
145
|
}
|
|
142
|
-
|
|
143
|
-
abstract finish(): void; // TODO - return the CommandBuffer?
|
|
144
146
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
// finish(options?: {id?: string}): GPUCommandBuffer;
|
|
147
|
+
/** Completes recording of the commands sequence */
|
|
148
|
+
abstract finish(): void; // TODO - return the CommandBuffer?
|
|
148
149
|
|
|
150
|
+
/** Add a command that that copies data from a sub-region of a Buffer to a sub-region of another Buffer. */
|
|
149
151
|
abstract copyBufferToBuffer(options: CopyBufferToBufferOptions): void;
|
|
150
152
|
|
|
153
|
+
/** Add a command that copies data from a sub-region of a GPUBuffer to a sub-region of one or multiple continuous texture subresources. */
|
|
151
154
|
abstract copyBufferToTexture(options: CopyBufferToTextureOptions): void;
|
|
152
155
|
|
|
156
|
+
/** Add a command that copies data from a sub-region of one or multiple continuous texture subresources to a sub-region of a Buffer. */
|
|
153
157
|
abstract copyTextureToBuffer(options: CopyTextureToBufferOptions): void;
|
|
154
158
|
|
|
159
|
+
/** Add a command that copies data from a sub-region of one or multiple contiguous texture subresources to another sub-region of one or multiple continuous texture subresources. */
|
|
155
160
|
abstract copyTextureToTexture(options: CopyTextureToTextureOptions): void;
|
|
156
161
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
162
|
+
/** Reads results from a query set into a GPU buffer. Values are 64 bits so byteLength must be querySet.props.count * 8 */
|
|
163
|
+
abstract resolveQuerySet(
|
|
164
|
+
querySet: QuerySet,
|
|
165
|
+
destination: Buffer,
|
|
166
|
+
options?: {
|
|
167
|
+
firstQuery?: number;
|
|
168
|
+
queryCount?: number;
|
|
169
|
+
destinationOffset?: number;
|
|
170
|
+
}
|
|
171
|
+
): void;
|
|
172
|
+
|
|
173
|
+
/** Begins a labeled debug group containing subsequent commands */
|
|
174
|
+
abstract pushDebugGroup(groupLabel: string): void;
|
|
175
|
+
/** Ends the labeled debug group most recently started by pushDebugGroup() */
|
|
176
|
+
abstract popDebugGroup(): void;
|
|
177
|
+
/** Marks a point in a stream of commands with a label */
|
|
178
|
+
abstract insertDebugMarker(markerLabel: string): void;
|
|
179
|
+
|
|
180
|
+
// TODO - luma.gl has these on the device, should we align with WebGPU API?
|
|
181
|
+
// beginRenderPass(GPURenderPassDescriptor descriptor): GPURenderPassEncoder;
|
|
182
|
+
// beginComputePass(optional GPUComputePassDescriptor descriptor = {}): GPUComputePassEncoder;
|
|
172
183
|
}
|