@luma.gl/webgpu 9.3.0-alpha.2 → 9.3.0-alpha.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/helpers/cpu-hotspot-profiler.d.ts +54 -0
- package/dist/adapter/helpers/cpu-hotspot-profiler.d.ts.map +1 -0
- package/dist/adapter/helpers/cpu-hotspot-profiler.js +26 -0
- package/dist/adapter/helpers/cpu-hotspot-profiler.js.map +1 -0
- package/dist/adapter/helpers/generate-mipmaps-webgpu.d.ts +7 -0
- package/dist/adapter/helpers/generate-mipmaps-webgpu.d.ts.map +1 -0
- package/dist/adapter/helpers/generate-mipmaps-webgpu.js +490 -0
- package/dist/adapter/helpers/generate-mipmaps-webgpu.js.map +1 -0
- package/dist/adapter/helpers/get-bind-group.d.ts +2 -1
- package/dist/adapter/helpers/get-bind-group.d.ts.map +1 -1
- package/dist/adapter/helpers/get-bind-group.js +31 -21
- package/dist/adapter/helpers/get-bind-group.js.map +1 -1
- package/dist/adapter/resources/webgpu-buffer.d.ts +7 -0
- package/dist/adapter/resources/webgpu-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-buffer.js +58 -15
- package/dist/adapter/resources/webgpu-buffer.js.map +1 -1
- package/dist/adapter/resources/webgpu-command-buffer.js +1 -1
- package/dist/adapter/resources/webgpu-command-buffer.js.map +1 -1
- package/dist/adapter/resources/webgpu-command-encoder.d.ts +5 -4
- package/dist/adapter/resources/webgpu-command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-command-encoder.js +23 -5
- package/dist/adapter/resources/webgpu-command-encoder.js.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pass.d.ts +1 -1
- package/dist/adapter/resources/webgpu-compute-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pass.js +14 -6
- package/dist/adapter/resources/webgpu-compute-pass.js.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pipeline.js +19 -3
- package/dist/adapter/resources/webgpu-compute-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgpu-framebuffer.d.ts +6 -0
- package/dist/adapter/resources/webgpu-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-framebuffer.js +16 -0
- package/dist/adapter/resources/webgpu-framebuffer.js.map +1 -1
- package/dist/adapter/resources/webgpu-pipeline-layout.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-pipeline-layout.js +1 -2
- package/dist/adapter/resources/webgpu-pipeline-layout.js.map +1 -1
- package/dist/adapter/resources/webgpu-query-set.d.ts +33 -4
- package/dist/adapter/resources/webgpu-query-set.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-query-set.js +145 -4
- package/dist/adapter/resources/webgpu-query-set.js.map +1 -1
- package/dist/adapter/resources/webgpu-render-pass.d.ts +3 -0
- package/dist/adapter/resources/webgpu-render-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-render-pass.js +74 -30
- package/dist/adapter/resources/webgpu-render-pass.js.map +1 -1
- package/dist/adapter/resources/webgpu-render-pipeline.d.ts +7 -4
- package/dist/adapter/resources/webgpu-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-render-pipeline.js +26 -15
- package/dist/adapter/resources/webgpu-render-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgpu-sampler.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-sampler.js +4 -0
- package/dist/adapter/resources/webgpu-sampler.js.map +1 -1
- package/dist/adapter/resources/webgpu-texture-view.d.ts +6 -0
- package/dist/adapter/resources/webgpu-texture-view.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-texture-view.js +47 -11
- package/dist/adapter/resources/webgpu-texture-view.js.map +1 -1
- package/dist/adapter/resources/webgpu-texture.d.ts +10 -4
- package/dist/adapter/resources/webgpu-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-texture.js +116 -57
- package/dist/adapter/resources/webgpu-texture.js.map +1 -1
- package/dist/adapter/resources/webgpu-vertex-array.js +1 -1
- package/dist/adapter/resources/webgpu-vertex-array.js.map +1 -1
- package/dist/adapter/webgpu-canvas-context.d.ts +2 -0
- package/dist/adapter/webgpu-canvas-context.d.ts.map +1 -1
- package/dist/adapter/webgpu-canvas-context.js +78 -19
- package/dist/adapter/webgpu-canvas-context.js.map +1 -1
- package/dist/adapter/webgpu-device.d.ts +5 -1
- package/dist/adapter/webgpu-device.d.ts.map +1 -1
- package/dist/adapter/webgpu-device.js +113 -9
- package/dist/adapter/webgpu-device.js.map +1 -1
- package/dist/adapter/webgpu-presentation-context.d.ts +25 -0
- package/dist/adapter/webgpu-presentation-context.d.ts.map +1 -0
- package/dist/adapter/webgpu-presentation-context.js +144 -0
- package/dist/adapter/webgpu-presentation-context.js.map +1 -0
- package/dist/dist.dev.js +2864 -1702
- package/dist/dist.min.js +167 -8
- package/dist/index.cjs +1363 -225
- package/dist/index.cjs.map +4 -4
- package/package.json +5 -5
- package/src/adapter/helpers/cpu-hotspot-profiler.ts +70 -0
- package/src/adapter/helpers/generate-mipmaps-webgpu.ts +583 -0
- package/src/adapter/helpers/get-bind-group.ts +37 -22
- package/src/adapter/resources/webgpu-buffer.ts +61 -15
- package/src/adapter/resources/webgpu-command-buffer.ts +1 -1
- package/src/adapter/resources/webgpu-command-encoder.ts +32 -6
- package/src/adapter/resources/webgpu-compute-pass.ts +14 -6
- package/src/adapter/resources/webgpu-compute-pipeline.ts +21 -3
- package/src/adapter/resources/webgpu-framebuffer.ts +21 -0
- package/src/adapter/resources/webgpu-pipeline-layout.ts +1 -2
- package/src/adapter/resources/webgpu-query-set.ts +185 -9
- package/src/adapter/resources/webgpu-render-pass.ts +82 -34
- package/src/adapter/resources/webgpu-render-pipeline.ts +36 -19
- package/src/adapter/resources/webgpu-sampler.ts +5 -0
- package/src/adapter/resources/webgpu-texture-view.ts +51 -11
- package/src/adapter/resources/webgpu-texture.ts +142 -93
- package/src/adapter/resources/webgpu-vertex-array.ts +1 -1
- package/src/adapter/webgpu-canvas-context.ts +91 -26
- package/src/adapter/webgpu-device.ts +128 -9
- package/src/adapter/webgpu-presentation-context.ts +180 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// luma.gl
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
|
-
import { Buffer, Sampler, Texture, log } from '@luma.gl/core';
|
|
4
|
+
import { Buffer, Sampler, Texture, TextureView, log } from '@luma.gl/core';
|
|
5
5
|
/**
|
|
6
6
|
* Create a WebGPU "bind group layout" from an array of luma.gl bindings
|
|
7
7
|
* @note bind groups can be automatically generated by WebGPU.
|
|
@@ -19,14 +19,12 @@ export function makeBindGroupLayout(device, layout, bindings) {
|
|
|
19
19
|
export function getBindGroup(device, bindGroupLayout, shaderLayout, bindings) {
|
|
20
20
|
const entries = getBindGroupEntries(bindings, shaderLayout);
|
|
21
21
|
device.pushErrorScope('validation');
|
|
22
|
-
const bindGroup = device.createBindGroup({
|
|
22
|
+
const bindGroup = device.handle.createBindGroup({
|
|
23
23
|
layout: bindGroupLayout,
|
|
24
24
|
entries
|
|
25
25
|
});
|
|
26
|
-
device.popErrorScope(
|
|
27
|
-
|
|
28
|
-
log.error(`bindGroup creation: ${error.message}`, bindGroup)();
|
|
29
|
-
}
|
|
26
|
+
device.popErrorScope((error) => {
|
|
27
|
+
log.error(`bindGroup creation: ${error.message}`, bindGroup)();
|
|
30
28
|
});
|
|
31
29
|
return bindGroup;
|
|
32
30
|
}
|
|
@@ -45,29 +43,35 @@ export function getShaderLayoutBinding(shaderLayout, bindingName, options) {
|
|
|
45
43
|
function getBindGroupEntries(bindings, shaderLayout) {
|
|
46
44
|
const entries = [];
|
|
47
45
|
for (const [bindingName, value] of Object.entries(bindings)) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
const exactBindingLayout = shaderLayout.bindings.find(binding => binding.name === bindingName);
|
|
47
|
+
const bindingLayout = exactBindingLayout || getShaderLayoutBinding(shaderLayout, bindingName);
|
|
48
|
+
const isShadowedAlias = !exactBindingLayout && bindingLayout ? bindingLayout.name in bindings : false;
|
|
49
|
+
// Mirror the WebGL path: when both `foo` and `fooUniforms` exist in the bindings map,
|
|
50
|
+
// prefer the exact shader binding name and ignore the alias entry.
|
|
51
|
+
if (!isShadowedAlias) {
|
|
52
|
+
const entry = bindingLayout
|
|
53
|
+
? getBindGroupEntry(value, bindingLayout.location, undefined, bindingName)
|
|
54
|
+
: null;
|
|
51
55
|
if (entry) {
|
|
52
56
|
entries.push(entry);
|
|
53
57
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if (
|
|
63
|
-
entries.push(
|
|
58
|
+
// TODO - hack to automatically bind samplers to supplied texture default samplers
|
|
59
|
+
if (value instanceof Texture) {
|
|
60
|
+
const samplerBindingLayout = getShaderLayoutBinding(shaderLayout, `${bindingName}Sampler`, {
|
|
61
|
+
ignoreWarnings: true
|
|
62
|
+
});
|
|
63
|
+
const samplerEntry = samplerBindingLayout
|
|
64
|
+
? getBindGroupEntry(value, samplerBindingLayout.location, { sampler: true }, bindingName)
|
|
65
|
+
: null;
|
|
66
|
+
if (samplerEntry) {
|
|
67
|
+
entries.push(samplerEntry);
|
|
64
68
|
}
|
|
65
69
|
}
|
|
66
70
|
}
|
|
67
71
|
}
|
|
68
72
|
return entries;
|
|
69
73
|
}
|
|
70
|
-
function getBindGroupEntry(binding, index, options) {
|
|
74
|
+
function getBindGroupEntry(binding, index, options, bindingName = 'unknown') {
|
|
71
75
|
if (binding instanceof Buffer) {
|
|
72
76
|
return {
|
|
73
77
|
binding: index,
|
|
@@ -82,6 +86,12 @@ function getBindGroupEntry(binding, index, options) {
|
|
|
82
86
|
resource: binding.handle
|
|
83
87
|
};
|
|
84
88
|
}
|
|
89
|
+
if (binding instanceof TextureView) {
|
|
90
|
+
return {
|
|
91
|
+
binding: index,
|
|
92
|
+
resource: binding.handle
|
|
93
|
+
};
|
|
94
|
+
}
|
|
85
95
|
if (binding instanceof Texture) {
|
|
86
96
|
if (options?.sampler) {
|
|
87
97
|
return {
|
|
@@ -94,7 +104,7 @@ function getBindGroupEntry(binding, index, options) {
|
|
|
94
104
|
resource: binding.view.handle
|
|
95
105
|
};
|
|
96
106
|
}
|
|
97
|
-
log.warn(`invalid binding ${
|
|
107
|
+
log.warn(`invalid binding ${bindingName}`, binding);
|
|
98
108
|
return null;
|
|
99
109
|
}
|
|
100
110
|
//# sourceMappingURL=get-bind-group.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-bind-group.js","sourceRoot":"","sources":["../../../src/adapter/helpers/get-bind-group.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"get-bind-group.js","sourceRoot":"","sources":["../../../src/adapter/helpers/get-bind-group.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import { Buffer, type BufferProps, type BufferMapCallback } from '@luma.gl/core';
|
|
2
2
|
import { type WebGPUDevice } from "../webgpu-device.js";
|
|
3
|
+
/**
|
|
4
|
+
* WebGPU implementation of Buffer
|
|
5
|
+
* For byte alignment requirements see:
|
|
6
|
+
* @see https://www.w3.org/TR/webgpu/#dom-gpubuffer-mapasync
|
|
7
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/GPUBuffer/mapAsync
|
|
8
|
+
*/
|
|
3
9
|
export declare class WebGPUBuffer extends Buffer {
|
|
4
10
|
readonly device: WebGPUDevice;
|
|
5
11
|
readonly handle: GPUBuffer;
|
|
6
12
|
readonly byteLength: number;
|
|
13
|
+
readonly paddedByteLength: number;
|
|
7
14
|
constructor(device: WebGPUDevice, props: BufferProps);
|
|
8
15
|
destroy(): void;
|
|
9
16
|
write(data: ArrayBufferLike | ArrayBufferView | SharedArrayBuffer, byteOffset?: number): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-buffer.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-buffer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAM,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAC,MAAM,eAAe,CAAC;AACpF,OAAO,EAAC,KAAK,YAAY,EAAC,4BAAyB;AAEnD,qBAAa,YAAa,SAAQ,MAAM;IACtC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"webgpu-buffer.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-buffer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAM,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAC,MAAM,eAAe,CAAC;AACpF,OAAO,EAAC,KAAK,YAAY,EAAC,4BAAyB;AAEnD;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,MAAM;IACtC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;gBAEtB,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW;IA0D3C,OAAO,IAAI,IAAI;IAexB,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,GAAG,iBAAiB,EAAE,UAAU,SAAI;IAoB3E,gBAAgB,CACpB,QAAQ,EAAE,iBAAiB,CAAC,IAAI,CAAC,EACjC,UAAU,GAAE,MAAU,EACtB,UAAU,GAAE,MAAqC,GAChD,OAAO,CAAC,IAAI,CAAC;IAkCV,SAAS,CACb,UAAU,GAAE,MAAU,EACtB,UAAU,SAA+B,GACxC,OAAO,CAAC,UAAU,CAAC;IAQhB,eAAe,CAAC,CAAC,EACrB,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC9B,UAAU,SAAI,EACd,UAAU,SAA+B,GACxC,OAAO,CAAC,CAAC,CAAC;IA0Db,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC;IAMhF;;;OAGG;IACH,SAAS,CAAC,kBAAkB,CAC1B,KAAK,EAAE,MAAM,EAAE,sCAAsC;IACrD,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,YAAY;IAOf,SAAS,CAAC,WAAW,CACnB,YAAY,EAAE,YAAY,EAC1B,UAAU,GAAE,MAAU,EACtB,UAAU,GAAE,MAAwB;CAmBvC"}
|
|
@@ -2,17 +2,25 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
import { log, Buffer } from '@luma.gl/core';
|
|
5
|
+
/**
|
|
6
|
+
* WebGPU implementation of Buffer
|
|
7
|
+
* For byte alignment requirements see:
|
|
8
|
+
* @see https://www.w3.org/TR/webgpu/#dom-gpubuffer-mapasync
|
|
9
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/GPUBuffer/mapAsync
|
|
10
|
+
*/
|
|
5
11
|
export class WebGPUBuffer extends Buffer {
|
|
6
12
|
device;
|
|
7
13
|
handle;
|
|
8
14
|
byteLength;
|
|
15
|
+
paddedByteLength;
|
|
9
16
|
constructor(device, props) {
|
|
10
17
|
super(device, props);
|
|
11
18
|
this.device = device;
|
|
12
19
|
this.byteLength = props.byteLength || props.data?.byteLength || 0;
|
|
20
|
+
this.paddedByteLength = Math.ceil(this.byteLength / 4) * 4;
|
|
13
21
|
const mappedAtCreation = Boolean(this.props.onMapped || props.data);
|
|
14
22
|
// WebGPU buffers must be aligned to 4 bytes
|
|
15
|
-
const size =
|
|
23
|
+
const size = this.paddedByteLength;
|
|
16
24
|
this.device.pushErrorScope('out-of-memory');
|
|
17
25
|
this.device.pushErrorScope('validation');
|
|
18
26
|
this.handle =
|
|
@@ -53,11 +61,27 @@ export class WebGPUBuffer extends Buffer {
|
|
|
53
61
|
this.device.reportError(new Error(`${this} creation failed ${error.message}`), this)();
|
|
54
62
|
this.device.debug();
|
|
55
63
|
});
|
|
64
|
+
if (!this.props.handle) {
|
|
65
|
+
this.trackAllocatedMemory(size);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
this.trackReferencedMemory(size, 'Buffer');
|
|
69
|
+
}
|
|
56
70
|
}
|
|
57
71
|
destroy() {
|
|
58
|
-
this.handle
|
|
59
|
-
|
|
60
|
-
|
|
72
|
+
if (!this.destroyed && this.handle) {
|
|
73
|
+
this.removeStats();
|
|
74
|
+
if (!this.props.handle) {
|
|
75
|
+
this.trackDeallocatedMemory();
|
|
76
|
+
this.handle.destroy();
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
this.trackDeallocatedReferencedMemory('Buffer');
|
|
80
|
+
}
|
|
81
|
+
this.destroyed = true;
|
|
82
|
+
// @ts-expect-error readonly
|
|
83
|
+
this.handle = null;
|
|
84
|
+
}
|
|
61
85
|
}
|
|
62
86
|
write(data, byteOffset = 0) {
|
|
63
87
|
const arrayBuffer = ArrayBuffer.isView(data) ? data.buffer : data;
|
|
@@ -71,10 +95,11 @@ export class WebGPUBuffer extends Buffer {
|
|
|
71
95
|
});
|
|
72
96
|
}
|
|
73
97
|
async mapAndWriteAsync(callback, byteOffset = 0, byteLength = this.byteLength - byteOffset) {
|
|
98
|
+
const alignedByteLength = Math.ceil(byteLength / 4) * 4;
|
|
74
99
|
// Unless the application created and supplied a mappable buffer, a staging buffer is needed
|
|
75
100
|
const isMappable = (this.usage & Buffer.MAP_WRITE) !== 0;
|
|
76
101
|
const mappableBuffer = !isMappable
|
|
77
|
-
? this._getMappableBuffer(Buffer.MAP_WRITE | Buffer.COPY_SRC, 0, this.
|
|
102
|
+
? this._getMappableBuffer(Buffer.MAP_WRITE | Buffer.COPY_SRC, 0, this.paddedByteLength)
|
|
78
103
|
: null;
|
|
79
104
|
const writeBuffer = mappableBuffer || this;
|
|
80
105
|
// const isWritable = this.usage & Buffer.MAP_WRITE;
|
|
@@ -82,13 +107,15 @@ export class WebGPUBuffer extends Buffer {
|
|
|
82
107
|
this.device.pushErrorScope('validation');
|
|
83
108
|
try {
|
|
84
109
|
await this.device.handle.queue.onSubmittedWorkDone();
|
|
85
|
-
await writeBuffer.handle.mapAsync(GPUMapMode.WRITE, byteOffset,
|
|
86
|
-
const
|
|
110
|
+
await writeBuffer.handle.mapAsync(GPUMapMode.WRITE, byteOffset, alignedByteLength);
|
|
111
|
+
const mappedRange = writeBuffer.handle.getMappedRange(byteOffset, alignedByteLength);
|
|
112
|
+
const arrayBuffer = mappedRange.slice(0, byteLength);
|
|
87
113
|
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
88
114
|
await callback(arrayBuffer, 'mapped');
|
|
115
|
+
new Uint8Array(mappedRange).set(new Uint8Array(arrayBuffer), 0);
|
|
89
116
|
writeBuffer.handle.unmap();
|
|
90
117
|
if (mappableBuffer) {
|
|
91
|
-
this._copyBuffer(mappableBuffer, byteOffset,
|
|
118
|
+
this._copyBuffer(mappableBuffer, byteOffset, alignedByteLength);
|
|
92
119
|
}
|
|
93
120
|
}
|
|
94
121
|
finally {
|
|
@@ -103,16 +130,29 @@ export class WebGPUBuffer extends Buffer {
|
|
|
103
130
|
return this.mapAndReadAsync(arrayBuffer => new Uint8Array(arrayBuffer.slice(0)), byteOffset, byteLength);
|
|
104
131
|
}
|
|
105
132
|
async mapAndReadAsync(callback, byteOffset = 0, byteLength = this.byteLength - byteOffset) {
|
|
133
|
+
const requestedEnd = byteOffset + byteLength;
|
|
134
|
+
if (requestedEnd > this.byteLength) {
|
|
135
|
+
throw new Error('Mapping range exceeds buffer size');
|
|
136
|
+
}
|
|
137
|
+
let mappedByteOffset = byteOffset;
|
|
138
|
+
let mappedByteLength = byteLength;
|
|
139
|
+
let sliceByteOffset = 0;
|
|
140
|
+
let lifetime = 'mapped';
|
|
141
|
+
// WebGPU mapAsync requires 8-byte offsets and 4-byte lengths.
|
|
106
142
|
if (byteOffset % 8 !== 0 || byteLength % 4 !== 0) {
|
|
107
|
-
|
|
143
|
+
mappedByteOffset = Math.floor(byteOffset / 8) * 8;
|
|
144
|
+
const alignedEnd = Math.ceil(requestedEnd / 4) * 4;
|
|
145
|
+
mappedByteLength = alignedEnd - mappedByteOffset;
|
|
146
|
+
sliceByteOffset = byteOffset - mappedByteOffset;
|
|
147
|
+
lifetime = 'copied';
|
|
108
148
|
}
|
|
109
|
-
if (
|
|
149
|
+
if (mappedByteOffset + mappedByteLength > this.paddedByteLength) {
|
|
110
150
|
throw new Error('Mapping range exceeds buffer size');
|
|
111
151
|
}
|
|
112
152
|
// Unless the application created and supplied a mappable buffer, a staging buffer is needed
|
|
113
153
|
const isMappable = (this.usage & Buffer.MAP_READ) !== 0;
|
|
114
154
|
const mappableBuffer = !isMappable
|
|
115
|
-
? this._getMappableBuffer(Buffer.MAP_READ | Buffer.COPY_DST, 0, this.
|
|
155
|
+
? this._getMappableBuffer(Buffer.MAP_READ | Buffer.COPY_DST, 0, this.paddedByteLength)
|
|
116
156
|
: null;
|
|
117
157
|
const readBuffer = mappableBuffer || this;
|
|
118
158
|
// Map the temp buffer and read the data.
|
|
@@ -120,12 +160,15 @@ export class WebGPUBuffer extends Buffer {
|
|
|
120
160
|
try {
|
|
121
161
|
await this.device.handle.queue.onSubmittedWorkDone();
|
|
122
162
|
if (mappableBuffer) {
|
|
123
|
-
mappableBuffer._copyBuffer(this);
|
|
163
|
+
mappableBuffer._copyBuffer(this, mappedByteOffset, mappedByteLength);
|
|
124
164
|
}
|
|
125
|
-
await readBuffer.handle.mapAsync(GPUMapMode.READ,
|
|
126
|
-
const arrayBuffer = readBuffer.handle.getMappedRange(
|
|
165
|
+
await readBuffer.handle.mapAsync(GPUMapMode.READ, mappedByteOffset, mappedByteLength);
|
|
166
|
+
const arrayBuffer = readBuffer.handle.getMappedRange(mappedByteOffset, mappedByteLength);
|
|
167
|
+
const mappedRange = lifetime === 'mapped'
|
|
168
|
+
? arrayBuffer
|
|
169
|
+
: arrayBuffer.slice(sliceByteOffset, sliceByteOffset + byteLength);
|
|
127
170
|
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
128
|
-
const result = await callback(
|
|
171
|
+
const result = await callback(mappedRange, lifetime);
|
|
129
172
|
readBuffer.handle.unmap();
|
|
130
173
|
return result;
|
|
131
174
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-buffer.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-buffer.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,GAAG,EAAE,MAAM,EAA2C,MAAM,eAAe,CAAC;AAGpF,MAAM,OAAO,YAAa,SAAQ,MAAM;IAC7B,MAAM,CAAe;IACrB,MAAM,CAAY;IAClB,UAAU,CAAS;
|
|
1
|
+
{"version":3,"file":"webgpu-buffer.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-buffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ export class WebGPUCommandBuffer extends CommandBuffer {
|
|
|
6
6
|
device;
|
|
7
7
|
handle;
|
|
8
8
|
constructor(commandEncoder, props) {
|
|
9
|
-
super(commandEncoder.device,
|
|
9
|
+
super(commandEncoder.device, props);
|
|
10
10
|
this.device = commandEncoder.device;
|
|
11
11
|
this.handle =
|
|
12
12
|
this.props.handle ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-command-buffer.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-command-buffer.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,aAAa,EAAC,MAAM,eAAe,CAAC;AAK5C,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IAC3C,MAAM,CAAe;IACrB,MAAM,CAAmB;IAElC,YAAY,cAAoC,EAAE,KAAyB;QACzE,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"webgpu-command-buffer.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-command-buffer.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,aAAa,EAAC,MAAM,eAAe,CAAC;AAK5C,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IAC3C,MAAM,CAAe;IACrB,MAAM,CAAmB;IAElC,YAAY,cAAoC,EAAE,KAAyB;QACzE,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,MAAM;YACT,IAAI,CAAC,KAAK,CAAC,MAAM;gBACjB,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;oBAC3B,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,wBAAwB;iBAC7C,CAAC,CAAC;IACP,CAAC;CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { RenderPassProps, ComputePassProps, CopyTextureToTextureOptions, CopyTextureToBufferOptions } from '@luma.gl/core';
|
|
1
|
+
import type { CommandBufferProps, RenderPassProps, ComputePassProps, CopyTextureToTextureOptions, CopyTextureToBufferOptions } from '@luma.gl/core';
|
|
2
2
|
import { CommandEncoder, CommandEncoderProps, Buffer, Texture } from '@luma.gl/core';
|
|
3
3
|
import { WebGPUDevice } from "../webgpu-device.js";
|
|
4
4
|
import { WebGPUCommandBuffer } from "./webgpu-command-buffer.js";
|
|
@@ -10,13 +10,13 @@ export declare class WebGPUCommandEncoder extends CommandEncoder {
|
|
|
10
10
|
readonly handle: GPUCommandEncoder;
|
|
11
11
|
constructor(device: WebGPUDevice, props?: CommandEncoderProps);
|
|
12
12
|
destroy(): void;
|
|
13
|
-
finish(props?:
|
|
13
|
+
finish(props?: CommandBufferProps): WebGPUCommandBuffer;
|
|
14
14
|
/**
|
|
15
15
|
* Allows a render pass to begin against a canvas context
|
|
16
16
|
* @todo need to support a "Framebuffer" equivalent (aka preconfigured RenderPassDescriptors?).
|
|
17
17
|
*/
|
|
18
|
-
beginRenderPass(props
|
|
19
|
-
beginComputePass(props
|
|
18
|
+
beginRenderPass(props?: RenderPassProps): WebGPURenderPass;
|
|
19
|
+
beginComputePass(props?: ComputePassProps): WebGPUComputePass;
|
|
20
20
|
copyBufferToBuffer(options: {
|
|
21
21
|
sourceBuffer: Buffer;
|
|
22
22
|
sourceOffset?: number;
|
|
@@ -45,5 +45,6 @@ export declare class WebGPUCommandEncoder extends CommandEncoder {
|
|
|
45
45
|
queryCount?: number;
|
|
46
46
|
destinationOffset?: number;
|
|
47
47
|
}): void;
|
|
48
|
+
writeTimestamp(querySet: WebGPUQuerySet, queryIndex: number): void;
|
|
48
49
|
}
|
|
49
50
|
//# sourceMappingURL=webgpu-command-encoder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-command-encoder.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-command-encoder.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,2BAA2B,EAC3B,0BAA0B,EAC3B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAE,MAAM,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AACnF,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAC9C,OAAO,EAAC,mBAAmB,EAAC,mCAAgC;AAE5D,OAAO,EAAC,gBAAgB,EAAC,gCAA6B;AACtD,OAAO,EAAC,iBAAiB,EAAC,iCAA8B;AAExD,OAAO,EAAC,cAAc,EAAC,8BAA2B;AAElD,qBAAa,oBAAqB,SAAQ,cAAc;IACtD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;gBAEvB,MAAM,EAAE,YAAY,EAAE,KAAK,GAAE,mBAAwB;IAaxD,OAAO,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"webgpu-command-encoder.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-command-encoder.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,2BAA2B,EAC3B,0BAA0B,EAC3B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAE,MAAM,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AACnF,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAC9C,OAAO,EAAC,mBAAmB,EAAC,mCAAgC;AAE5D,OAAO,EAAC,gBAAgB,EAAC,gCAA6B;AACtD,OAAO,EAAC,iBAAiB,EAAC,iCAA8B;AAExD,OAAO,EAAC,cAAc,EAAC,8BAA2B;AAElD,qBAAa,oBAAqB,SAAQ,cAAc;IACtD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;gBAEvB,MAAM,EAAE,YAAY,EAAE,KAAK,GAAE,mBAAwB;IAaxD,OAAO,IAAI,IAAI;IAIxB,MAAM,CAAC,KAAK,CAAC,EAAE,kBAAkB,GAAG,mBAAmB;IAcvD;;;OAGG;IACH,eAAe,CAAC,KAAK,GAAE,eAAoB,GAAG,gBAAgB;IAI9D,gBAAgB,CAAC,KAAK,GAAE,gBAAqB,GAAG,iBAAiB;IAOjE,kBAAkB,CAAC,OAAO,EAC1B;QACE,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,IAAI;IAYR,mBAAmB,CAAC,OAAO,EAC3B;QACE,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QAErB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,KAAK,GAAG,cAAc,GAAG,YAAY,CAAC;QAE/C,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KAC9C,GAAG,IAAI;IAyBR,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI;IAW9D,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,IAAI;IAWvD,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIxC,aAAa,IAAI,IAAI;IAIrB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAI5C,eAAe,CACtB,QAAQ,EAAE,cAAc,EACxB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,GACA,IAAI;IAYP,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;CAqBnE"}
|
|
@@ -20,7 +20,9 @@ export class WebGPUCommandEncoder extends CommandEncoder {
|
|
|
20
20
|
});
|
|
21
21
|
this.handle.label = this.props.id;
|
|
22
22
|
}
|
|
23
|
-
destroy() {
|
|
23
|
+
destroy() {
|
|
24
|
+
this.destroyResource();
|
|
25
|
+
}
|
|
24
26
|
finish(props) {
|
|
25
27
|
this.device.pushErrorScope('validation');
|
|
26
28
|
const commandBuffer = new WebGPUCommandBuffer(this, {
|
|
@@ -31,17 +33,18 @@ export class WebGPUCommandEncoder extends CommandEncoder {
|
|
|
31
33
|
this.device.reportError(new Error(message), this)();
|
|
32
34
|
this.device.debug();
|
|
33
35
|
});
|
|
36
|
+
this.destroy();
|
|
34
37
|
return commandBuffer;
|
|
35
38
|
}
|
|
36
39
|
/**
|
|
37
40
|
* Allows a render pass to begin against a canvas context
|
|
38
41
|
* @todo need to support a "Framebuffer" equivalent (aka preconfigured RenderPassDescriptors?).
|
|
39
42
|
*/
|
|
40
|
-
beginRenderPass(props) {
|
|
41
|
-
return new WebGPURenderPass(this.device, props);
|
|
43
|
+
beginRenderPass(props = {}) {
|
|
44
|
+
return new WebGPURenderPass(this.device, this._applyTimeProfilingToPassProps(props));
|
|
42
45
|
}
|
|
43
|
-
beginComputePass(props) {
|
|
44
|
-
return new WebGPUComputePass(this.device, props);
|
|
46
|
+
beginComputePass(props = {}) {
|
|
47
|
+
return new WebGPUComputePass(this.device, this._applyTimeProfilingToPassProps(props));
|
|
45
48
|
}
|
|
46
49
|
// beginRenderPass(GPURenderPassDescriptor descriptor): GPURenderPassEncoder;
|
|
47
50
|
// beginComputePass(optional GPUComputePassDescriptor descriptor = {}): GPUComputePassEncoder;
|
|
@@ -104,6 +107,21 @@ export class WebGPUCommandEncoder extends CommandEncoder {
|
|
|
104
107
|
const webgpuBuffer = destination;
|
|
105
108
|
this.handle.resolveQuerySet(webgpuQuerySet.handle, options?.firstQuery || 0, options?.queryCount || querySet.props.count - (options?.firstQuery || 0), webgpuBuffer.handle, options?.destinationOffset || 0);
|
|
106
109
|
}
|
|
110
|
+
writeTimestamp(querySet, queryIndex) {
|
|
111
|
+
querySet._invalidateResults();
|
|
112
|
+
const writeTimestamp = this.handle.writeTimestamp;
|
|
113
|
+
if (writeTimestamp) {
|
|
114
|
+
writeTimestamp.call(this.handle, querySet.handle, queryIndex);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const computePass = this.handle.beginComputePass({
|
|
118
|
+
timestampWrites: {
|
|
119
|
+
querySet: querySet.handle,
|
|
120
|
+
beginningOfPassWriteIndex: queryIndex
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
computePass.end();
|
|
124
|
+
}
|
|
107
125
|
}
|
|
108
126
|
/*
|
|
109
127
|
// setDataFromTypedArray(data): this {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-command-encoder.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-command-encoder.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;
|
|
1
|
+
{"version":3,"file":"webgpu-command-encoder.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-command-encoder.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AASpC,OAAO,EAAC,cAAc,EAAuC,MAAM,eAAe,CAAC;AAEnF,OAAO,EAAC,mBAAmB,EAAC,mCAAgC;AAE5D,OAAO,EAAC,gBAAgB,EAAC,gCAA6B;AACtD,OAAO,EAAC,iBAAiB,EAAC,iCAA8B;AAIxD,MAAM,OAAO,oBAAqB,SAAQ,cAAc;IAC7C,MAAM,CAAe;IACrB,MAAM,CAAoB;IAEnC,YAAY,MAAoB,EAAE,QAA6B,EAAE;QAC/D,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM;YACT,KAAK,CAAC,MAAM;gBACZ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC;oBACtC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;oBACpB,qCAAqC;oBACrC,wDAAwD;iBACzD,CAAC,CAAC;QACL,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IACpC,CAAC;IAEQ,OAAO;QACd,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,KAA0B;QAC/B,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACzC,MAAM,aAAa,GAAG,IAAI,mBAAmB,CAAC,IAAI,EAAE;YAClD,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,wBAAwB;SAC1C,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,KAAe,EAAE,EAAE;YAC5C,MAAM,OAAO,GAAG,GAAG,IAAI,sBAAsB,KAAK,CAAC,OAAO,8CAA8C,CAAC;YACzG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,QAAyB,EAAE;QACzC,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,gBAAgB,CAAC,QAA0B,EAAE;QAC3C,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,6EAA6E;IAC7E,8FAA8F;IAE9F,kBAAkB,CAAC,OAOlB;QACC,MAAM,kBAAkB,GAAG,OAAO,CAAC,YAA4B,CAAC;QAChE,MAAM,uBAAuB,GAAG,OAAO,CAAC,iBAAiC,CAAC;QAC1E,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAC5B,kBAAkB,CAAC,MAAM,EACzB,OAAO,CAAC,YAAY,IAAI,CAAC,EACzB,uBAAuB,CAAC,MAAM,EAC9B,OAAO,CAAC,iBAAiB,IAAI,CAAC,EAC9B,OAAO,CAAC,IAAI,IAAI,CAAC,CAClB,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,OAanB;QACC,MAAM,kBAAkB,GAAG,OAAO,CAAC,YAA4B,CAAC;QAChE,MAAM,wBAAwB,GAAG,OAAO,CAAC,kBAAmC,CAAC;QAC7E,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAC7B;YACE,MAAM,EAAE,kBAAkB,CAAC,MAAM;YACjC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC;YAC3B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,EACD;YACE,OAAO,EAAE,wBAAwB,CAAC,MAAM;YACxC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC;YAC/B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;YAC5B,yBAAyB;SAC1B,EACD;YACE,aAAa;YACb,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC3B,kBAAkB,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;SACxC,CACF,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,OAAmC;QACrD,mCAAmC;QACnC,cAAc;QACd,QAAQ;QACR,mBAAmB;QACnB,QAAQ;QACR,gBAAgB;QAChB,OAAO;QACP,KAAK;IACP,CAAC;IAED,oBAAoB,CAAC,OAAoC;QACvD,oCAAoC;QACpC,cAAc;QACd,QAAQ;QACR,mBAAmB;QACnB,QAAQ;QACR,gBAAgB;QAChB,OAAO;QACP,KAAK;IACP,CAAC;IAEQ,cAAc,CAAC,UAAkB;QACxC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAEQ,aAAa;QACpB,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC;IAEQ,iBAAiB,CAAC,WAAmB;QAC5C,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAEQ,eAAe,CACtB,QAAwB,EACxB,WAAmB,EACnB,OAIC;QAED,MAAM,cAAc,GAAG,QAAQ,CAAC;QAChC,MAAM,YAAY,GAAG,WAA2B,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,eAAe,CACzB,cAAc,CAAC,MAAM,EACrB,OAAO,EAAE,UAAU,IAAI,CAAC,EACxB,OAAO,EAAE,UAAU,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,UAAU,IAAI,CAAC,CAAC,EACxE,YAAY,CAAC,MAAM,EACnB,OAAO,EAAE,iBAAiB,IAAI,CAAC,CAChC,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,QAAwB,EAAE,UAAkB;QACzD,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAC9B,MAAM,cAAc,GAClB,IAAI,CAAC,MAGN,CAAC,cAAc,CAAC;QAEjB,IAAI,cAAc,EAAE,CAAC;YACnB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAC/C,eAAe,EAAE;gBACf,QAAQ,EAAE,QAAQ,CAAC,MAAM;gBACzB,yBAAyB,EAAE,UAAU;aACtC;SACF,CAAC,CAAC;QACH,WAAW,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC;CACF;AAED;;;;;;;;;;;;;;;;GAgBG"}
|
|
@@ -5,7 +5,7 @@ export declare class WebGPUComputePass extends ComputePass {
|
|
|
5
5
|
readonly device: WebGPUDevice;
|
|
6
6
|
readonly handle: GPUComputePassEncoder;
|
|
7
7
|
_webgpuPipeline: WebGPUComputePipeline | null;
|
|
8
|
-
constructor(device: WebGPUDevice, props
|
|
8
|
+
constructor(device: WebGPUDevice, props?: ComputePassProps);
|
|
9
9
|
/** @note no WebGPU destroy method, just gc */
|
|
10
10
|
destroy(): void;
|
|
11
11
|
end(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-compute-pass.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-compute-pass.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAE9C,OAAO,EAAC,qBAAqB,EAAC,qCAAkC;AAGhE,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAEvC,eAAe,EAAE,qBAAqB,GAAG,IAAI,CAAQ;gBAEzC,MAAM,EAAE,YAAY,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"webgpu-compute-pass.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-compute-pass.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAE9C,OAAO,EAAC,qBAAqB,EAAC,qCAAkC;AAGhE,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAEvC,eAAe,EAAE,qBAAqB,GAAG,IAAI,CAAQ;gBAEzC,MAAM,EAAE,YAAY,EAAE,KAAK,GAAE,gBAAqB;IA2B9D,8CAA8C;IACrC,OAAO,IAAI,IAAI;IAIxB,GAAG,IAAI,IAAI;IAQX,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAO5C;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI;IAMtC;;;;;OAKG;IACH,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAIjD;;;;;;OAMG;IACH,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,kBAAkB,GAAE,MAAU,GAAG,IAAI;IAK9E,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIxC,aAAa,IAAI,IAAI;IAIrB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;CAG7C"}
|
|
@@ -6,18 +6,20 @@ export class WebGPUComputePass extends ComputePass {
|
|
|
6
6
|
device;
|
|
7
7
|
handle;
|
|
8
8
|
_webgpuPipeline = null;
|
|
9
|
-
constructor(device, props) {
|
|
9
|
+
constructor(device, props = {}) {
|
|
10
10
|
super(device, props);
|
|
11
11
|
this.device = device;
|
|
12
|
+
const { props: computePassProps } = this;
|
|
12
13
|
// Set up queries
|
|
13
14
|
let timestampWrites;
|
|
14
|
-
if (
|
|
15
|
-
const webgpuQuerySet =
|
|
15
|
+
if (computePassProps.timestampQuerySet) {
|
|
16
|
+
const webgpuQuerySet = computePassProps.timestampQuerySet;
|
|
16
17
|
if (webgpuQuerySet) {
|
|
18
|
+
webgpuQuerySet._invalidateResults();
|
|
17
19
|
timestampWrites = {
|
|
18
20
|
querySet: webgpuQuerySet.handle,
|
|
19
|
-
beginningOfPassWriteIndex:
|
|
20
|
-
endOfPassWriteIndex:
|
|
21
|
+
beginningOfPassWriteIndex: computePassProps.beginTimestampIndex,
|
|
22
|
+
endOfPassWriteIndex: computePassProps.endTimestampIndex
|
|
21
23
|
};
|
|
22
24
|
}
|
|
23
25
|
}
|
|
@@ -29,9 +31,15 @@ export class WebGPUComputePass extends ComputePass {
|
|
|
29
31
|
});
|
|
30
32
|
}
|
|
31
33
|
/** @note no WebGPU destroy method, just gc */
|
|
32
|
-
destroy() {
|
|
34
|
+
destroy() {
|
|
35
|
+
this.destroyResource();
|
|
36
|
+
}
|
|
33
37
|
end() {
|
|
38
|
+
if (this.destroyed) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
34
41
|
this.handle.end();
|
|
42
|
+
this.destroy();
|
|
35
43
|
}
|
|
36
44
|
setPipeline(pipeline) {
|
|
37
45
|
const wgpuPipeline = pipeline;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-compute-pass.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-compute-pass.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,WAAW,EAAqD,MAAM,eAAe,CAAC;AAM9F,MAAM,OAAO,iBAAkB,SAAQ,WAAW;IACvC,MAAM,CAAe;IACrB,MAAM,CAAwB;IAEvC,eAAe,GAAiC,IAAI,CAAC;IAErD,YAAY,MAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"webgpu-compute-pass.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-compute-pass.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,WAAW,EAAqD,MAAM,eAAe,CAAC;AAM9F,MAAM,OAAO,iBAAkB,SAAQ,WAAW;IACvC,MAAM,CAAe;IACrB,MAAM,CAAwB;IAEvC,eAAe,GAAiC,IAAI,CAAC;IAErD,YAAY,MAAoB,EAAE,QAA0B,EAAE;QAC5D,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,MAAM,EAAC,KAAK,EAAE,gBAAgB,EAAC,GAAG,IAAI,CAAC;QAEvC,iBAAiB;QACjB,IAAI,eAA0D,CAAC;QAC/D,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,CAAC;YACvC,MAAM,cAAc,GAAG,gBAAgB,CAAC,iBAAmC,CAAC;YAC5E,IAAI,cAAc,EAAE,CAAC;gBACnB,cAAc,CAAC,kBAAkB,EAAE,CAAC;gBACpC,eAAe,GAAG;oBAChB,QAAQ,EAAE,cAAc,CAAC,MAAM;oBAC/B,yBAAyB,EAAE,gBAAgB,CAAC,mBAAmB;oBAC/D,mBAAmB,EAAE,gBAAgB,CAAC,iBAAiB;iBACxD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM;YACT,IAAI,CAAC,KAAK,CAAC,MAAM;gBACjB,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,gBAAgB,CAAC;oBAC5C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;oBACpB,eAAe;iBAChB,CAAC,CAAC;IACP,CAAC;IAED,8CAA8C;IACrC,OAAO;QACd,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,GAAG;QACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,WAAW,CAAC,QAAyB;QACnC,MAAM,YAAY,GAAG,QAAiC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,QAAmB;QAC7B,mBAAmB;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACzC,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,CAAS,EAAE,CAAU,EAAE,CAAU;QACxC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;OAMG;IACH,gBAAgB,CAAC,cAAsB,EAAE,qBAA6B,CAAC;QACrE,MAAM,YAAY,GAAG,cAA8B,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,0BAA0B,CAAC,YAAY,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAClF,CAAC;IAED,cAAc,CAAC,UAAkB;QAC/B,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAED,aAAa;QACX,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC;IAED,iBAAiB,CAAC,WAAmB;QACnC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-compute-pipeline.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-compute-pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,eAAe,EAAE,oBAAoB,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AAE7E,OAAO,EAAC,YAAY,EAAC,4BAAyB;
|
|
1
|
+
{"version":3,"file":"webgpu-compute-pipeline.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-compute-pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,eAAe,EAAE,oBAAoB,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AAE7E,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAO9C,4DAA4D;AAC5D,qBAAa,qBAAsB,SAAQ,eAAe;IACxD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAEpC,4CAA4C;IAC5C,OAAO,CAAC,gBAAgB,CAAmC;IAC3D,OAAO,CAAC,UAAU,CAA6B;IAC/C,4CAA4C;IAC5C,OAAO,CAAC,SAAS,CAA0B;gBAE/B,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,oBAAoB;IAqB7D;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAkBpD,iDAAiD;IACjD,aAAa;CAWd"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
import { ComputePipeline } from '@luma.gl/core';
|
|
5
5
|
import { getBindGroup } from "../helpers/get-bind-group.js";
|
|
6
|
+
const EMPTY_BINDINGS = {};
|
|
6
7
|
// COMPUTE PIPELINE
|
|
7
8
|
/** Creates a new compute pipeline when parameters change */
|
|
8
9
|
export class WebGPUComputePipeline extends ComputePipeline {
|
|
@@ -12,7 +13,7 @@ export class WebGPUComputePipeline extends ComputePipeline {
|
|
|
12
13
|
_bindGroupLayout = null;
|
|
13
14
|
_bindGroup = null;
|
|
14
15
|
/** For internal use to create BindGroups */
|
|
15
|
-
_bindings
|
|
16
|
+
_bindings;
|
|
16
17
|
constructor(device, props) {
|
|
17
18
|
super(device, props);
|
|
18
19
|
this.device = device;
|
|
@@ -28,13 +29,28 @@ export class WebGPUComputePipeline extends ComputePipeline {
|
|
|
28
29
|
},
|
|
29
30
|
layout: 'auto'
|
|
30
31
|
});
|
|
32
|
+
this._bindings = EMPTY_BINDINGS;
|
|
31
33
|
}
|
|
32
34
|
/**
|
|
33
35
|
* @todo Use renderpass.setBindings() ?
|
|
34
36
|
* @todo Do we want to expose BindGroups in the API and remove this?
|
|
35
37
|
*/
|
|
36
38
|
setBindings(bindings) {
|
|
37
|
-
|
|
39
|
+
let bindingsChanged = false;
|
|
40
|
+
for (const [name, binding] of Object.entries(bindings)) {
|
|
41
|
+
if (this._bindings[name] !== binding) {
|
|
42
|
+
if (!bindingsChanged) {
|
|
43
|
+
if (this._bindings === EMPTY_BINDINGS) {
|
|
44
|
+
this._bindings = {};
|
|
45
|
+
}
|
|
46
|
+
bindingsChanged = true;
|
|
47
|
+
}
|
|
48
|
+
this._bindings[name] = binding;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (bindingsChanged) {
|
|
52
|
+
this._bindGroup = null;
|
|
53
|
+
}
|
|
38
54
|
}
|
|
39
55
|
/** Return a bind group created by setBindings */
|
|
40
56
|
_getBindGroup() {
|
|
@@ -43,7 +59,7 @@ export class WebGPUComputePipeline extends ComputePipeline {
|
|
|
43
59
|
// Set up the bindings
|
|
44
60
|
this._bindGroup =
|
|
45
61
|
this._bindGroup ||
|
|
46
|
-
getBindGroup(this.device
|
|
62
|
+
getBindGroup(this.device, this._bindGroupLayout, this.shaderLayout, this._bindings);
|
|
47
63
|
return this._bindGroup;
|
|
48
64
|
}
|
|
49
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-compute-pipeline.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-compute-pipeline.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,eAAe,EAAgC,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAC,YAAY,EAAC,qCAAkC;AAIvD,mBAAmB;AAEnB,4DAA4D;AAC5D,MAAM,OAAO,qBAAsB,SAAQ,eAAe;IAC/C,MAAM,CAAe;IACrB,MAAM,CAAqB;IAEpC,4CAA4C;IACpC,gBAAgB,GAA8B,IAAI,CAAC;IACnD,UAAU,GAAwB,IAAI,CAAC;IAC/C,4CAA4C;IACpC,SAAS,
|
|
1
|
+
{"version":3,"file":"webgpu-compute-pipeline.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-compute-pipeline.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,eAAe,EAAgC,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAC,YAAY,EAAC,qCAAkC;AAIvD,MAAM,cAAc,GAA4B,EAAE,CAAC;AAEnD,mBAAmB;AAEnB,4DAA4D;AAC5D,MAAM,OAAO,qBAAsB,SAAQ,eAAe;IAC/C,MAAM,CAAe;IACrB,MAAM,CAAqB;IAEpC,4CAA4C;IACpC,gBAAgB,GAA8B,IAAI,CAAC;IACnD,UAAU,GAAwB,IAAI,CAAC;IAC/C,4CAA4C;IACpC,SAAS,CAA0B;IAE3C,YAAY,MAAoB,EAAE,KAA2B;QAC3D,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAsB,CAAC;QAEvD,IAAI,CAAC,MAAM;YACT,IAAI,CAAC,KAAK,CAAC,MAAM;gBACjB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;oBACvC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;oBACpB,OAAO,EAAE;wBACP,MAAM,EAAE,YAAY,CAAC,MAAM;wBAC3B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;wBACjC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;qBAChC;oBACD,MAAM,EAAE,MAAM;iBACf,CAAC,CAAC;QAEL,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,QAAiC;QAC3C,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvD,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;gBACrC,IAAI,CAAC,eAAe,EAAE,CAAC;oBACrB,IAAI,IAAI,CAAC,SAAS,KAAK,cAAc,EAAE,CAAC;wBACtC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;oBACtB,CAAC;oBACD,eAAe,GAAG,IAAI,CAAC;gBACzB,CAAC;gBACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;YACjC,CAAC;QACH,CAAC;QACD,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,aAAa;QACX,8GAA8G;QAC9G,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAEnF,sBAAsB;QACtB,IAAI,CAAC,UAAU;YACb,IAAI,CAAC,UAAU;gBACf,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEtF,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -13,5 +13,11 @@ export declare class WebGPUFramebuffer extends Framebuffer {
|
|
|
13
13
|
readonly depthStencilAttachment: WebGPUTextureView | null;
|
|
14
14
|
constructor(device: WebGPUDevice, props: FramebufferProps);
|
|
15
15
|
protected updateAttachments(): void;
|
|
16
|
+
/**
|
|
17
|
+
* Internal-only hook for the cached CanvasContext/PresentationContext swapchain path.
|
|
18
|
+
* Rebinds the long-lived default framebuffer wrapper to the current per-frame color view
|
|
19
|
+
* and optional depth attachment without allocating a new luma.gl Framebuffer object.
|
|
20
|
+
*/
|
|
21
|
+
_reinitialize(colorAttachment: WebGPUTextureView, depthStencilAttachment: WebGPUTextureView | null): void;
|
|
16
22
|
}
|
|
17
23
|
//# sourceMappingURL=webgpu-framebuffer.d.ts.map
|