GPUQueue: onSubmittedWorkDone() Methode
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die onSubmittedWorkDone()
Methode des GPUQueue
Interface gibt ein Promise
zurück, das aufgelöst wird, wenn alle Arbeiten, die über diese GPUQueue
an die GPU übergeben wurden, zu dem Zeitpunkt, an dem die Methode aufgerufen wird, verarbeitet wurden.
Dies schließt den Abschluss aller mapAsync()
Aufrufe ein, die auf GPUBuffer
s durchgeführt wurden, die in Befehlen verwendet wurden, die an die Queue übergeben wurden, bevor onSubmittedWorkDone()
aufgerufen wird.
Hinweis:
In den meisten Fällen müssen Sie onSubmittedWorkDone()
nicht aufrufen. Sie müssen es nicht für das Mapping eines Buffers aufrufen. mapAsync
garantiert, dass die Arbeit, die vor dem Aufruf von mapAsync
an die Queue übergeben wurde, bevor mapAsync
zurückkehrt, abgeschlossen ist (siehe WebGPU-Spezifikation).
Die zwei Anwendungsfälle für onSubmittedWorkDone
-
Warten auf mehrere Buffer-Mappings (langsam)
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();
Der Grund, warum die zweite Methode langsam ist, liegt darin, dass die Implementierung möglicherweise in der Lage ist, die Buffer zu mappen, bevor alle eingereichten Arbeiten abgeschlossen sind. Zum Beispiel, wenn alle Buffer beendet sind, aber mehr Arbeit (nicht in Zusammenhang mit den Buffern) bereits eingereicht wurde, dann werden Sie mit der zweiten Methode länger warten als mit der ersten.
-
Drosselung der Arbeit
Wenn Sie schwere Rechenarbeiten durchführen und zu viel Arbeit auf einmal einreichen, kann der Browser Ihre Arbeit beenden. Sie können die Arbeit drosseln, indem Sie nur dann mehr Arbeit einreichen, wenn die bereits eingereichte Arbeit abgeschlossen ist.
Syntax
onSubmittedWorkDone()
Parameter
Keine.
Rückgabewert
Beispiele
device.queue.submit([commandEncoder.finish()]);
device.queue.onSubmittedWorkDone().then(() => {
console.log("All submitted commands processed.");
});
Spezifikationen
Specification |
---|
WebGPU # dom-gpuqueue-onsubmittedworkdone |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API