GPUComputePassEncoder

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 GPUComputePassEncoder-Schnittstelle der WebGPU API codiert Befehle, die sich auf die Steuerung der Compute-Shader-Phase beziehen, wie sie von einer GPUComputePipeline ausgegeben werden. Sie bildet einen Teil der gesamten Codierungsaktivität eines GPUCommandEncoder.

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

Eine Instanz des GPUComputePassEncoder-Objekts wird über die Eigenschaft GPUCommandEncoder.beginComputePass() erstellt.

Instanz-Eigenschaften

label Experimentell

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

Instanz-Methoden

dispatchWorkgroups() Experimentell

Sendet ein spezifisches Raster von Arbeitsgruppen, um die Arbeit auszuführen, die von der aktuellen GPUComputePipeline erledigt wird.

dispatchWorkgroupsIndirect() Experimentell

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

end() Experimentell

Beendet die Aufzeichnung der aktuellen Compute-Pass-Befehlssequenz.

insertDebugMarker() Experimentell

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

popDebugGroup() Experimentell

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

pushDebugGroup() Experimentell

Beginnt eine Debug-Gruppe, die mit einem angegebenen Label markiert ist und alle nachfolgenden codierten Befehle bis zu einer Aufruf von popDebugGroup() enthalten wird.

setBindGroup() Experimentell

Setzt die GPUBindGroup für nachfolgende Compute-Befehle für einen bestimmten Index.

setPipeline() Experimentell

Setzt die GPUComputePipeline für diesen Compute-Pass.

Beispiele

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

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