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

Syntax

js
submit(commandBuffers)

Parameter

commandBuffers

Ein Array von GPUCommandBuffer-Objekten, das die Befehle enthält, die zur Verarbeitung durch die GPU in die Warteschlange eingespeist werden sollen. Das Array darf keine doppelten GPUCommandBuffer-Objekte enthalten — jedes kann nur einmal pro submit()-Aufruf übergeben werden.

Rückgabewert

Keiner (Undefined).

Validierung

Die folgenden Kriterien müssen beim Aufruf von submit() erfüllt werden, andernfalls wird ein GPUValidationError erzeugt und die GPUQueue wird ungültig:

  • Das Array von GPUCommandBuffer-Objekten, das im submit()-Aufruf referenziert wird, darf keine Duplikate enthalten.
  • Alle GPUBuffer-, GPUTexture- und GPUQuerySet-Objekte, die in den codierten Befehlen verwendet werden, müssen verfügbar sein, d.h. sie dürfen nicht als nicht verfügbar (so sind GPUBuffer nicht verfügbar, wenn sie derzeit gemappt sind) oder zerstört (mit der destroy()-Methode) markiert sein.
  • Alle GPUExternalTexture-Objekte, die in den codierten Befehlen verwendet werden, dürfen nicht abgelaufen sein (sie laufen automatisch kurz nach dem Import über importExternalTexture() ab).
  • Wenn ein GPUQuerySet-Objekt in einem codierten Befehl vom Typ "occlusion"-Abfrage ist, darf es nicht bereits verwendet sein, es sei denn, es wird von GPURenderPassEncoder.beginOcclusionQuery() genutzt.

Beispiele

In unserem einfachen 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 Befehle, die vom GPUCommandEncoder kodiert wurden, werden mit der GPUCommandEncoder.finish()-Methode in einem GPUCommandBuffer aufgenommen. 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