GPUComputePassEncoder

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 GPUComputePassEncoder-Schnittstelle der WebGPU-API kodiert Befehle, die mit der Steuerung der Compute-Shader-Phase verbunden sind und von einer GPUComputePipeline ausgegeben werden. Sie ist Teil der umfassenden Kodierungsaktivität eines GPUCommandEncoder.

Eine Compute-Pipeline enthält eine einzelne Compute-Stufe, in der ein Compute-Shader allgemeine Daten verarbeitet, diese parallel über eine festgelegte Anzahl von Arbeitsgruppen verarbeitet und das Ergebnis in einem oder mehreren Puffern zurückgibt.

Ein GPUComputePassEncoder-Objekt wird über die GPUCommandEncoder.beginComputePass()-Eigenschaft erstellt.

Instanz-Eigenschaften

label

Ein String, der ein Label zur Verfügung stellt, das zur Identifizierung des Objekts verwendet werden kann, beispielsweise in GPUError-Meldungen oder Konsolenwarnungen.

Instanz-Methoden

dispatchWorkgroups()

Sendet ein spezifisches Raster von Arbeitsgruppen, um die Arbeit zu erledigen, die von der aktuellen GPUComputePipeline durchgeführt wird.

dispatchWorkgroupsIndirect()

Sendet ein Raster von Arbeitsgruppen, definiert durch die Parameter eines GPUBuffer, um die Arbeit der aktuellen GPUComputePipeline auszuführen.

end()

Beendet die Aufzeichnung der aktuellen Compute-Pass-Befehlssequenz.

insertDebugMarker()

Markiert einen bestimmten Punkt in einer Serie von kodierten Befehlen mit einem Label.

popDebugGroup()

Beendet eine Debug-Gruppe, die mit einem pushDebugGroup()-Aufruf begonnen wurde.

pushDebugGroup()

Beginnt eine Debug-Gruppe, die mit einem angegebenen Label markiert wird und alle nachfolgenden kodierten Befehle bis zu einer popDebugGroup()-Methode enthält.

setBindGroup()

Stellt die GPUBindGroup ein, die für die folgenden Compute-Befehle für einen gegebenen Index verwendet werden soll.

setPipeline()

Stellt die GPUComputePipeline ein, die für diesen Compute-Pass verwendet werden soll.

Beispiele

In unserem basischen Compute-Demo werden mehrere Befehle über einen GPUCommandEncoder aufgezeichnet. Die meisten dieser Befehle stammen von dem GPUComputePassEncoder, der über GPUCommandEncoder.beginComputePass() erstellt wurde.

js
// …

// Create GPUCommandEncoder to encode commands to issue to the GPU
const commandEncoder = device.createCommandEncoder();

// Create GPUComputePassEncoder to initiate compute pass
const passEncoder = commandEncoder.beginComputePass();

// Issue commands
passEncoder.setPipeline(computePipeline);
passEncoder.setBindGroup(0, bindGroup);
passEncoder.dispatchWorkgroups(Math.ceil(BUFFER_SIZE / 64));

// End the compute pass
passEncoder.end();

// Copy output buffer to staging buffer
commandEncoder.copyBufferToBuffer(
  output,
  0, // Source offset
  stagingBuffer,
  0, // Destination offset
  BUFFER_SIZE,
);

// End frame by passing array of command buffers to command queue for execution
device.queue.submit([commandEncoder.finish()]);

// …

Spezifikationen

Specification
WebGPU
# gpucomputepassencoder

Browser-Kompatibilität

Siehe auch