GPUDevice: Methode createRenderBundleEncoder()
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 Methode createRenderBundleEncoder() des Interfaces GPUDevice erstellt einen GPURenderBundleEncoder, mit dem Befehlsbündel vorab aufgezeichnet werden können. Diese lassen sich über die Methode executeBundles() beliebig oft in GPURenderPassEncoder-Instanzen wiederverwenden.
Syntax
createRenderBundleEncoder(descriptor)
Parameter
descriptor-
Ein Objekt mit den folgenden Eigenschaften:
colorFormats-
Ein Array von Enum-Werten, das die erwarteten Farbformate für Renderziele angibt. Mögliche Werte finden Sie in der Definition von
GPUTextureFormatin der Spezifikation. depthReadOnlyOptional-
Ein boolescher Wert. Wenn
true, wird die Tiefenkomponente vondepthStencilFormatbei der Ausführung eines vomGPURenderBundleEncodererstelltenGPURenderBundlenicht verändert. WirddepthReadOnlyweggelassen, ist der Standardwertfalse. depthStencilFormatOptional-
Ein Enum-Wert, der das erwartete Tiefen- oder Stencil-Format für Renderziele angibt. Mögliche Werte finden Sie im Abschnitt Tiefen-Stencil-Formate der Spezifikation.
labelOptional-
Ein String mit einer Bezeichnung, anhand derer das Objekt beispielsweise in
GPUError-Meldungen oder Konsolenwarnungen identifiziert werden kann. sampleCountOptional-
Eine Zahl, die die erwartete Anzahl von Samples für Renderziele angibt.
stencilReadOnlyOptional-
Ein boolescher Wert. Wenn
true, wird die Stencil-Komponente vondepthStencilFormatbei der Ausführung eines vomGPURenderBundleEncodererstelltenGPURenderBundlenicht verändert. WirdstencilReadOnlyweggelassen, ist der Standardwertfalse.
Rückgabewert
Eine Instanz des Objekts GPURenderBundleEncoder.
Beispiele
Im Animometer-Beispiel der WebGPU Samples werden zahlreiche ähnliche Operationen gleichzeitig an vielen verschiedenen Objekten ausgeführt. Mit der folgenden Funktion wird ein Befehlsbündel kodiert:
// passEncoder is a GPURenderBundleEncoder or a GPURenderPassEncoder
function recordRenderPass(passEncoder) {
if (settings.dynamicOffsets) {
passEncoder.setPipeline(dynamicPipeline);
} else {
passEncoder.setPipeline(pipeline);
}
passEncoder.setVertexBuffer(0, vertexBuffer);
passEncoder.setBindGroup(0, timeBindGroup);
const dynamicOffsets = [0];
for (let i = 0; i < numTriangles; ++i) {
if (settings.dynamicOffsets) {
dynamicOffsets[0] = i * alignedUniformBytes;
passEncoder.setBindGroup(1, dynamicBindGroup, dynamicOffsets);
} else {
passEncoder.setBindGroup(1, bindGroups[i]);
}
passEncoder.draw(3, 1, 0, 0);
}
}
Später wird mit createRenderBundleEncoder() ein GPURenderBundleEncoder erstellt, die Funktion aufgerufen und das Befehlsbündel mit GPURenderBundleEncoder.finish() in einem GPURenderBundle aufgezeichnet:
const renderBundleEncoder = device.createRenderBundleEncoder({
colorFormats: [presentationFormat],
});
recordRenderPass(renderBundleEncoder);
const renderBundle = renderBundleEncoder.finish();
Anschließend wird GPURenderPassEncoder.executeBundles() verwendet, um die aufgezeichneten Befehle über mehrere Renderdurchläufe hinweg wiederzuverwenden und so die Leistung zu verbessern. Den vollständigen Zusammenhang entnehmen Sie dem Beispielcode.
// …
return function doDraw(timestamp) {
if (startTime === undefined) {
startTime = timestamp;
}
uniformTime[0] = (timestamp - startTime) / 1000;
device.queue.writeBuffer(uniformBuffer, timeOffset, uniformTime.buffer);
renderPassDescriptor.colorAttachments[0].view = context
.getCurrentTexture()
.createView();
const commandEncoder = device.createCommandEncoder();
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
if (settings.renderBundles) {
passEncoder.executeBundles([renderBundle]);
} else {
recordRenderPass(passEncoder);
}
passEncoder.end();
device.queue.submit([commandEncoder.finish()]);
};
// …
Spezifikationen
| Spezifikation |
|---|
| WebGPU> # dom-gpudevice-createrenderbundleencoder> |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API