GPUQueue: onSubmittedWorkDone() 方法
注意:此功能在 Web Workers 中可用。
GPUQueue 介面的 onSubmittedWorkDone() 方法返回一個 Promise,當呼叫該方法時,透過此 GPUQueue 提交的所有 GPU 工作都已處理完畢時,該 Promise 會解析。
這包括在呼叫 onSubmittedWorkDone() 之前,在佇列中提交的命令所使用的 GPUBuffer 上進行的任何 mapAsync() 呼叫的完成。
注意:在大多數情況下,您 不需要 呼叫 onSubmittedWorkDone()。您 不需要 呼叫它來對映緩衝區。mapAsync 保證在呼叫 mapAsync 之前提交到佇列的工作會在 mapAsync 返回之前完成(請參閱 WebGPU 規範)。
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();第二個方法之所以慢,是因為實現可能能夠在所有提交的工作完成之前對映緩衝區。例如,如果所有緩衝區的使用都已完成,但還有更多(與緩衝區無關的)工作已提交,那麼使用第二個方法將比使用第一個方法花費更長的等待時間。
-
節流工作
如果您正在進行繁重計算工作並一次提交過多工作,瀏覽器可能會終止您的工作。您可以透過僅在已提交的工作完成後才提交更多工作來節流工作。