GPUQueue: onSubmittedWorkDone() 方法
onSubmittedWorkDone()
是 GPUQueue
接口的一个方法,它返回一个 Promise
,当通过此 GPUQueue
提交给 GPU 的所有工作(在调用该方法时)都被处理时,该 Promise 会被解决。
这包括在调用 onSubmittedWorkDone()
之前,完成对提交到队列的命令中使用的 GPUBuffer
上执行的任何 mapAsync()
调用。
注意:在大多数情况下,您**无需**调用 onSubmittedWorkDone()
。您**无需**为映射缓冲区调用它。mapAsync
保证在调用 mapAsync
之前提交到队列的工作在 mapAsync
返回之前发生(请参阅 WebGPU 规范:第 5.2 节)
onSubmittedWorkDone
的两种用例
- 等待多个缓冲区映射(缓慢)js
// good await Promise.all([ buffer1.mapAsync(), buffer2.mapAsync(), buffer3.mapAsync(), ]); data1 = buffer1.getMappedRange(); data2 = buffer2.getMappedRange(); data3 = buffer3.getMappedRange();
第二种方法缓慢的原因是,实现可能能够在所有提交的工作完成之前映射缓冲区。例如,如果所有缓冲区都已完成使用,但更多(与缓冲区无关的)工作已被提交,那么使用第二种方法等待的时间将比第一种方法长。js// works but slow buffer1.mapAsync(); buffer2.mapAsync(); buffer3.mapAsync(); await device.queue.onSubmittedWorkDone(); data1 = buffer1.getMappedRange(); data2 = buffer2.getMappedRange(); data3 = buffer3.getMappedRange();
- 限制工作 如果您正在执行繁重的计算工作并且一次提交了太多工作,浏览器可能会终止您的工作。您可以通过仅在已提交的工作完成后再提交更多工作来限制工作。
语法
js
device.queue.onSubmittedWorkDone()
参数
无。
返回值
示例
js
device.queue.submit([commandEncoder.finish()]);
device.queue.onSubmittedWorkDone().then(() => {
console.log("All submitted commands processed.");
});
规范
规范 |
---|
WebGPU # dom-gpuqueue-onsubmittedworkdone |
浏览器兼容性
BCD 表仅在启用 JavaScript 的浏览器中加载。
另请参阅
- The WebGPU API