GPUCommandEncoder: beginRenderPass()-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, bevor Sie diese produktiv verwenden.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Hinweis: Dieses Feature ist verfügbar in Web Workers.
Die beginRenderPass()
-Methode des GPUCommandEncoder
-Interfaces beginnt mit der Kodierung eines Render-Passes und gibt einen GPURenderPassEncoder
zurück, der zur Steuerung des Renderings verwendet werden kann.
Syntax
beginRenderPass(descriptor)
Parameter
descriptor
-
Ein Objekt, das die folgenden Eigenschaften enthält:
colorAttachments
-
Ein Array von Objekten (siehe Struktur des Farbanhang-Objekts), die die Farbanhänge definieren, zu denen beim Ausführen dieses Render-Passes ausgegeben wird.
depthStencilAttachment
Optional-
Ein Objekt (siehe Struktur des Tiefen-/Stencil-Anhang-Objekts), das den Tiefen-/Stencil-Anhang definiert, zu dem ausgegeben wird und gegen den getestet wird, wenn dieser Render-Pass ausgeführt wird.
label
Optional-
Ein String, der ein Label bereitstellt, das verwendet werden kann, um das Objekt zu identifizieren, beispielsweise in
GPUError
-Meldungen oder Konsolenwarnungen. maxDrawCount
Optional-
Eine Zahl, die die maximale Anzahl an Zeichnungsaufrufen angibt, die im Render-Pass durchgeführt werden. Diese wird von einigen Implementierungen verwendet, um Arbeiten zu dimensionieren, die vor dem Render-Pass eingefügt werden. Sie sollten den Standardwert — 50000000 — beibehalten, es sei denn, Sie wissen, dass mehr Zeichnungsaufrufe durchgeführt werden.
occlusionQuerySet
Optional-
Der
GPUQuerySet
, der die Ergebnisse der Okklusionsabfrage für diesen Pass speichern wird. timestampWrites
Optional-
Ein Array von Objekten, das definiert, wo und wann Zeitstempel-Abfragewerte für diesen Pass geschrieben werden. Diese Objekte haben die folgenden Eigenschaften:
-
location
: Ein enumerierter Wert, der angibt, wann der Zeitstempel ausgeführt wird. Verfügbare Werte sind:"beginning"
: Der Zeitstempel wird zusammen mit den anderen kodierten Befehlen im Compute-Pass ausgeführt, sobald der entsprechendeGPUCommandBuffer
übermittelt wird."end"
: Der Zeitstempel wird als Teil einer separaten Liste von Zeitstempel-Anhängen ausgeführt, sobald der Pass endet.
-
queryIndex
: Eine Zahl, die die Indexposition imquerySet
angibt, an die der Zeitstempel geschrieben wird. -
querySet
: DerGPUQuerySet
, in den der Zeitstempel geschrieben wird.
Hinweis: Die
timestamp-query
-Funktion muss aktiviert sein, um Zeitstempel-Abfragen zu verwenden. -
Struktur des Farbanhang-Objekts
Farbannhang-Objekte können die folgenden Eigenschaften haben:
clearValue
Optional-
Ein Farbwert, um die
view
-Textur vor der Ausführung des Render-Passes zu löschen. Dieser Wert wird ignoriert, wennloadOp
nicht auf"clear"
gesetzt ist.clearValue
nimmt ein Array oder Objekt an, das die vier Farbkomponentenr
,g
,b
unda
als Dezimalzahlen darstellt.Was folgt, ist ein Beispiel-Array:
jsclearValue: [0.0, 0.5, 1.0, 1.0];
Das entsprechende Objekt würde folgendermaßen aussehen:
jsclearValue: { r: 0.0, g: 0.5, b: 1.0, a: 1.0 }
Wenn
clearValue
weggelassen wird, lautet der Standardwert{r: 0, g: 0, b: 0, a: 0}
. depthSlice
Optional-
Eine Zahl, die den Index des 3D-Tiefen-Slices angibt, zu dem für diesen Farbanhang ausgegeben wird, im Falle einer 3D-
GPUTextureView
-view
. Wenn angegeben, ermöglicht dies WebGPU direktes Rendern zu Slices von 3D-Texturen innerhalb von Render-Pässen. loadOp
-
Ein enumerierter Wert, der die Ladeoperation angibt, die auf
view
vor der Ausführung des Render-Passes durchgeführt werden soll. Mögliche Werte sind:-
"clear"
: Lädt denclearValue
für diesen Anhang in den Render-Pass. -
"load"
: Lädt den vorhandenen Wert für diesen Anhang in den Render-Pass.
Hinweis: Es wird empfohlen, immer
"clear"
zu verwenden, in Fällen, in denen der Anfangswert keine Rolle spielt, da dies auf einigen Geräten wie Mobiltelefonen eine bessere Leistung bietet. -
storeOp
-
Ein enumerierter Wert, der die Speicheroperation angibt, die auf
view
nach der Ausführung des Render-Passes durchgeführt werden soll. Mögliche Werte sind:"discard"
: Verwirft den resultierenden Wert des Render-Passes für diesen Anhang."store"
: Speichert den resultierenden Wert des Render-Passes für diesen Anhang.
resolveTarget
Optional-
Ein
GPUTextureView
-Objekt, das die Textur-Unterressource darstellt, die die aufgelöste Ausgabe für diesen Farbanhang erhält, wennview
Multisampled ist. view
-
Ein
GPUTextureView
-Objekt, das die Textur-Unterressource darstellt, zu der für diesen Farbanhang ausgegeben wird.Hinweis: Jeder Farb- oder Tiefen-/Stencil-Anhang muss eine eindeutige Textur-Unterressource sein, und Textur-Unterressourcen, die als Anhänge verwendet werden, können nicht innerhalb des Render-Passes verwendet werden.
Struktur des Tiefen-/Stencil-Anhang-Objekts
Das depthStencilAttachment
-Objekt kann die folgenden Eigenschaften haben:
depthClearValue
Optional-
Eine Zahl, die den Wert angibt, um die
view
-Tiefenkomponente vor der Ausführung des Render-Passes zu löschen. Dies wird ignoriert, wenndepthLoadOp
nicht auf"clear"
gesetzt ist.Der Wert muss zwischen 0,0 und 1,0 liegen, einschließlich.
depthLoadOp
Optional-
Ein enumerierter Wert, der die Ladeoperation angibt, die auf die
view
-Tiefenkomponente vor der Ausführung des Render-Passes durchgeführt werden soll. Mögliche Werte sind:-
"clear"
: Lädt denclearValue
für diesen Anhang in den Render-Pass. -
"load"
: Lädt den vorhandenen Wert für diesen Anhang in den Render-Pass.
Hinweis: Es wird empfohlen, immer
"clear"
zu verwenden, in Fällen, in denen der Anfangswert keine Rolle spielt, da dies auf einigen Geräten wie Mobiltelefonen eine bessere Leistung bietet. -
depthReadOnly
Optional-
Ein Boolean. Wenn der Wert auf
true
gesetzt wird, ist die Tiefenkomponente vonview
schreibgeschützt. WenndepthReadOnly
weggelassen wird, lautet der Standardwertfalse
. depthStoreOp
Optional-
Ein enumerierter Wert, der die Speicheroperation angibt, die auf die
view
-Tiefenkomponente nach der Ausführung des Render-Passes durchgeführt werden soll. Mögliche Werte sind:"discard"
: Verwirft den resultierenden Wert des Render-Passes für diesen Anhang."store"
: Speichert den resultierenden Wert des Render-Passes für diesen Anhang.
stencilClearValue
Optional-
Eine Zahl, die den Wert angibt, um die
view
-Stencil-Komponente vor der Ausführung des Render-Passes zu löschen. Dies wird ignoriert, wennstencilLoadOp
nicht auf"clear"
gesetzt ist.Wenn
stencilClearValue
weggelassen wird, lautet der Standardwert 0. stencilLoadOp
Optional-
Ein enumerierter Wert, der die Ladeoperation angibt, die auf die
view
-Stencil-Komponente vor der Ausführung des Render-Passes durchgeführt werden soll. Mögliche Werte sind:-
"clear"
: Lädt denclearValue
für diesen Anhang in den Render-Pass. -
"load"
: Lädt den vorhandenen Wert für diesen Anhang in den Render-Pass.
Hinweis: Es wird empfohlen, immer
"clear"
zu verwenden, in Fällen, in denen der Anfangswert keine Rolle spielt, da dies auf einigen Geräten wie Mobiltelefonen eine bessere Leistung bietet. -
stencilReadOnly
Optional-
Ein Boolean. Wenn der Wert auf
true
gesetzt wird, ist die Stencil-Komponente vonview
schreibgeschützt. WennstencilReadOnly
weggelassen wird, lautet der Standardwertfalse
. stencilStoreOp
Optional-
Ein enumerierter Wert, der die Speicheroperation angibt, die auf die
view
-Stencil-Komponente nach der Ausführung des Render-Passes durchgeführt werden soll. Mögliche Werte sind:"discard"
: Verwirft den resultierenden Wert des Render-Passes für diesen Anhang."store"
: Speichert den resultierenden Wert des Render-Passes für diesen Anhang.
view
-
Ein
GPUTextureView
-Objekt, das die Textur-Unterressource darstellt, zu der und von der für diesen Tiefen-/Stencil-Anhang ausgegeben und gelesen wird.
Rückgabewert
Eine Instanz des GPURenderPassEncoder
-Objekts.
Validierung
Die folgenden Kriterien müssen beim Aufrufen von beginRenderPass()
erfüllt sein, ansonsten wird ein GPUValidationError
generiert und ein ungültiger GPURenderPassEncoder
zurückgegeben.
Allgemein:
colorAttachments.length
ist kleiner oder gleich demmaxColorAttachments
-Limit desGPUDevice
.- Wenn
colorAttachments
nurnull
-Werte enthält, wirddepthStencilAttachment
bereitgestellt. - Alle
view
s incolorAttachments
unddepthStencilAttachment
haben gleicheGPUTexture.sampleCount
-Werte und Render-Ausmaße (GPUTexture.height
,GPUTexture.width
undGPUTexture.depthOrArrayLayers
). - Wenn
occlusionQuerySet
festgelegt ist, hat der referenzierteGPUQuerySet
einentype
von"occlusion"
.
Für Farbanhang-Objekte:
- Die
view
ist renderbar, und das Format derview
(d.h. im Descriptor des ursprünglichenGPUTexture.createView()
-Aufrufs angegeben) ist ein Farb-Render-Format. - Wenn
resolveTarget
bereitgestellt wird:- Der
view
's ursprünglicherGPUTexture
'ssampleCount
ist größer als 1. - Der
resolveTarget
's ursprünglicherGPUTexture
'ssampleCount
ist 1. resolveTarget
ist renderbar.- Die Größen der Unterressourcen, für die
view
undresolveTarget
eine Ansicht bieten, stimmen überein. view
's undresolveTarget
's Formate stimmen überein.
- Der
- Color attachments bytes per sample ist kleiner oder gleich dem
maxColorAttachmentBytesPerSample
-Limit desGPUDevice
.
Für Tiefen-/Stencil-Anhänge-Objekte:
- Die
view
ist renderbar, und ihr Format ist ein depth-or-stencil-Format. - Wenn
depthLoadOp
auf"clear"
gesetzt ist, wird ein gültigerdepthClearValue
bereitgestellt. - Wenn das Format der
view
ein kombiniertes Tiefen- oder Stencil-Format ist, entsprichtdepthReadOnly
demstencilReadOnly
. - Wenn das Format der
view
einen Tiefenaspekt aufweist unddepthReadOnly
false
ist, werdendepthLoadOp
unddepthStoreOp
bereitgestellt. - Wenn das Format der
view
einen Tiefenaspekt aufweist unddepthReadOnly
true
ist, werdendepthLoadOp
unddepthStoreOp
nicht bereitgestellt. - Wenn das Format der
view
einen Stencilaspekt aufweist undstencilReadOnly
false
ist, werdenstencilLoadOp
undstencilStoreOp
bereitgestellt. - Wenn das Format der
view
einen Stencilaspekt aufweist undstencilReadOnly
true
ist, werdenstencilLoadOp
undstencilStoreOp
nicht bereitgestellt.
Für Zeitstempel-Abfragen:
- Die
timestamp-query
-Funktion ist imGPUDevice
aktiviert. - Keine zwei
timestampWrites
-Objekte haben die gleichelocation
. In der Praxis bedeutet dies, dass nur zwei Zeitstempel-Abfragen pro Render-Pass ausgeführt werden können. - Für jede Zeitstempel-Abfrage hat der
querySet
GPUQuerySet.type
den Wert"timestamp"
, und derqueryIndex
-Wert ist kleiner als dieGPUQuerySet.count
. - Keine zwei
timestampWrites
-Objekte haben dasselbequeryIndex
undquerySet
-Paar.
Beispiele
In unserem Grundlegenden Render-Demo werden mehrere Befehle über einen GPUCommandEncoder
aufgezeichnet. Diese Befehle stammen von dem GPURenderPassEncoder
, der über beginRenderPass()
erstellt wurde:
// ...
// 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();
device.queue.submit([commandEncoder.finish()]);
// ...
Spezifikationen
Specification |
---|
WebGPU # dom-gpucommandencoder-beginrenderpass |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
- Die WebGPU API