GPUQueue: submit()-Methode
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
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 submit()-Methode des
GPUQueue-Interfaces plant die Ausführung von Befehlsbuffer, die durch ein oder mehrere GPUCommandBuffer-Objekte dargestellt werden, durch die GPU.
Syntax
submit(commandBuffers)
Parameter
commandBuffers-
Ein Array von
GPUCommandBuffer-Objekten, die die Befehle enthalten, die für die Verarbeitung durch die GPU in die Warteschlange gestellt werden sollen. Das Array darf keine doppeltenGPUCommandBuffer-Objekte enthalten — jedes kann nur einmal prosubmit()-Aufruf übermittelt werden.
Rückgabewert
Keiner (undefined).
Validierung
Die folgenden Kriterien müssen beim Aufruf von submit() erfüllt sein, andernfalls wird ein GPUValidationError erzeugt und der GPUQueue wird ungültig:
- Das Array von
GPUCommandBuffer-Objekten, das imsubmit()-Aufruf referenziert wird, enthält keine Duplikate. - Alle
GPUBuffer-,GPUTexture- undGPUQuerySet-Objekte, die in den kodierten Befehlen verwendet werden, sind verfügbar, d.h. sie sind nicht unzugänglich (GPUBuffersind unzugänglich, wenn sie derzeit gemappt sind) oder zerstört (mit derdestroy()-Methode). - Alle
GPUExternalTexture-Objekte, die in den kodierten Befehlen verwendet werden, sind nicht abgelaufen (sie laufen automatisch ab, kurz nachdem sie überimportExternalTexture()importiert wurden). - Wenn ein
GPUQuerySet-Objekt, das in einem kodierten Befehl verwendet wird, vom Typ „Occlusion“ ist, darf es nicht bereits verwendet werden, außer vonGPURenderPassEncoder.beginOcclusionQuery().
Beispiele
In unserem grundlegenden Render-Demo werden eine Reihe von Befehlen über einen GPUCommandEncoder aufgezeichnet:
// …
// Create GPUCommandEncoder
const commandEncoder = device.createCommandEncoder();
// Create GPURenderPassDescriptor to tell WebGPU which texture to draw into, then initiate render pass
const renderPassDescriptor = {
colorAttachments: [
{
clearValue: clearColor,
loadOp: "clear",
storeOp: "store",
view: context.getCurrentTexture().createView(),
},
],
};
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
// Draw a triangle
passEncoder.setPipeline(renderPipeline);
passEncoder.setVertexBuffer(0, vertexBuffer);
passEncoder.draw(3);
// End the render pass
passEncoder.end();
// …
Die von dem GPUCommandEncoder kodierten Befehle werden mit der Methode GPUCommandEncoder.finish() in einen GPUCommandBuffer umgewandelt. Der Befehlsbuffer wird dann über einen submit()-Aufruf in die Warteschlange eingefügt, bereit zur Verarbeitung durch die GPU.
device.queue.submit([commandEncoder.finish()]);
Hinweis: Studieren Sie die WebGPU-Beispiele, um weitere Beispiele für Warteschlangen zu finden.
Spezifikationen
| Spezifikation |
|---|
| WebGPU> # dom-gpuqueue-submit> |
Browser-Kompatibilität
Siehe auch
- Das WebGPU API