GPUQueue: submit()-Methode
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Want more browser support for this feature? Tell us why.
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