GPUQueue: onSubmittedWorkDone() Methode

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.

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 der GPUQueue Schnittstelle gibt ein Promise zurück, das aufgelöst wird, wenn alle Arbeiten, die zu diesem Zeitpunkt über diese GPUQueue an die GPU übermittelt wurden, verarbeitet wurden.

Dies schließt den Abschluss aller mapAsync() Aufrufe ein, die auf GPUBuffer-Objekten gemacht wurden, die in den an die Warteschlange übermittelten Befehlen verwendet wurden, bevor onSubmittedWorkDone() aufgerufen wird.

Hinweis: In den meisten Fällen ist es nicht erforderlich, onSubmittedWorkDone() aufzurufen. Sie müssen dies nicht tun, um einen Puffer zuzuordnen. mapAsync garantiert, dass Arbeiten, die der Warteschlange vor dem Aufruf von mapAsync übermittelt wurden, vor der Rückgabe von mapAsync abgeschlossen sind (siehe WebGPU-Spezifikation: Abschnitt 5.2).

Die zwei Anwendungsfälle für onSubmittedWorkDone:

  1. Warten auf mehrere Pufferzuordnungen (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 die Puffer zuordnen kann, bevor alle übermittelten Arbeiten abgeschlossen sind. Zum Beispiel, wenn alle Puffer nicht mehr verwendet werden, aber weitere Arbeiten (die nicht mit den Puffern zusammenhängen) bereits übermittelt wurden, dann werden Sie mit der zweiten Methode länger warten als mit der ersten.

  2. Drosseln der Arbeit

    Wenn Sie schwere Rechenaufgaben erledigen und zu viel Arbeit auf einmal übermitteln, kann der Browser Ihre Arbeit beenden. Sie können die Arbeit drosseln, indem Sie nur mehr Arbeit einreichen, wenn die bereits übermittelte Arbeit erledigt ist.

Syntax

js
onSubmittedWorkDone()

Parameter

Keine.

Rückgabewert

Ein Promise, das sich mit Undefined auflöst.

Beispiele

js
device.queue.submit([commandEncoder.finish()]);
device.queue.onSubmittedWorkDone().then(() => {
  console.log("All submitted commands processed.");
});

Spezifikationen

Specification
WebGPU
# dom-gpuqueue-onsubmittedworkdone

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
onSubmittedWorkDone
Experimental

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
In development. Supported in a pre-release version.
In development. Supported in a pre-release version.
No support
No support
Experimental. Expect behavior to change in the future.
See implementation notes.
User must explicitly enable this feature.
Has more compatibility info.

Siehe auch