GPUQueue: submit() 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 submit()-Methode des GPUQueue-Interfaces plant die Ausführung von Befehls-Puffern, die durch eines oder mehrere GPUCommandBuffer-Objekte vom GPU repräsentiert werden.

Syntax

js
submit(commandBuffers)

Parameter

commandBuffers

Ein Array von GPUCommandBuffer-Objekten, die die zu verarbeitenden Befehle für die GPU enthalten. Das Array darf keine doppelten GPUCommandBuffer-Objekte enthalten — jedes kann nur einmal pro submit()-Aufruf übermittelt werden.

Rückgabewert

Keiner (Undefined).

Validierung

Die folgenden Kriterien müssen erfüllt sein, wenn submit() aufgerufen wird, andernfalls wird ein GPUValidationError generiert und die GPUQueue wird ungültig:

  • Das Array von GPUCommandBuffer-Objekten, auf das im submit()-Aufruf verwiesen wird, enthält keine Duplikate.
  • Alle GPUBuffer-, GPUTexture- und GPUQuerySet-Objekte, die in den kodierten Befehlen verwendet werden, sind verfügbar, d.h. nicht unzugänglich (z. B. sind GPUBuffers unzugänglich, wenn sie derzeit gemappt sind) oder zerstört (mit der destroy()-Methode).
  • Alle GPUExternalTexture-Objekte, die in den kodierten Befehlen verwendet werden, sind nicht abgelaufen (sie laufen automatisch kurz nach dem Import über importExternalTexture() ab).
  • Wenn ein GPUQuerySet-Objekt, das in einem kodierten Befehl verwendet wird, von Typ "occlusion query" ist, wird es nicht bereits verwendet, außer von GPURenderPassEncoder.beginOcclusionQuery().

Beispiele

In unserem Grundlegendes Render-Demo werden eine Reihe von Befehlen über einen GPUCommandEncoder aufgezeichnet:

js
// …

// 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 durch den GPUCommandEncoder kodierten Befehle werden mithilfe der GPUCommandEncoder.finish()-Methode in einem GPUCommandBuffer neu aufgezeichnet. Der Befehls-Puffer wird dann über einen submit()-Aufruf in die Warteschlange übergeben und ist bereit, von der GPU verarbeitet zu werden.

js
device.queue.submit([commandEncoder.finish()]);

Hinweis: Studieren Sie die WebGPU-Beispiele, um weitere Warteschlangenbeispiele zu finden.

Spezifikationen

Specification
WebGPU
# dom-gpuqueue-submit

Browser-Kompatibilität

Siehe auch