GPUDevice: createRenderPipeline() 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 createRenderPipeline()
-Methode der GPUDevice
-Schnittstelle erstellt eine GPURenderPipeline
, die die Vertex- und Fragment-Shader-Phasen steuern und in einem GPURenderPassEncoder
oder GPURenderBundleEncoder
verwendet werden kann.
Syntax
createRenderPipeline(descriptor)
Parameter
descriptor
-
Ein Objekt mit den folgenden Eigenschaften:
depthStencil
Optional-
Ein Objekt (siehe
depthStencil
Objektstruktur), das die Depth-Stencil-Eigenschaften einschließlich Tests, Operationen und Bias beschreibt. fragment
Optional-
Ein Objekt (siehe
fragment
Objektstruktur), das den Einstiegspunkt des Fragment-Shaders der Pipeline und seine Ausgabefarben beschreibt. Wenn kein Einstiegspunkt des Fragment-Shaders definiert ist, wird die Pipeline keine Farbanhang-Ausgaben erzeugen, jedoch weiterhin Rasterisierung durchführen und Tiefenwerte basierend auf der Ausgabe der Vertex-Position erzeugen. Tiefentests und Stencil-Operationen können weiterhin verwendet werden. label
Optional-
Ein String, der ein Label bereitstellt, das verwendet werden kann, um das Objekt zu identifizieren, zum Beispiel in
GPUError
-Meldungen oder Konsolenwarnungen. layout
-
Definiert das Layout (Struktur, Zweck und Typ) aller GPU-Ressourcen (Puffer, Texturen etc.), die während der Ausführung der Pipeline verwendet werden. Mögliche Werte sind:
- Ein
GPUPipelineLayout
-Objekt, das mitGPUDevice.createPipelineLayout()
erstellt wurde und der GPU ermöglicht, im Voraus herauszufinden, wie die Pipeline am effizientesten ausgeführt wird. - Ein String
"auto"
, der die Pipeline dazu veranlasst, ein implizites Bind-Group-Layout basierend auf allen im Shader-Code definierten Bindungen zu generieren. Wenn"auto"
verwendet wird, dürfen die generierten Bind-Group-Layouts nur mit der aktuellen Pipeline verwendet werden.
- Ein
multisample
Optional-
Ein Objekt (siehe
multisample
Objektstruktur), das beschreibt, wie die Pipeline mit den Multisample-Anhängen eines Render-Passes interagiert. primitive
Optional-
Ein Objekt (siehe
primitive
Objektstruktur), das beschreibt, wie eine Pipeline Primitive aus ihren Vertex-Eingaben konstruiert und rastert. vertex
-
Ein Objekt (siehe
vertex
Objektstruktur), das den Einstiegspunkt des Vertex-Shaders der Pipeline und seine Eingabepuffer-Layouts beschreibt.
depthStencil
Objektstruktur
Das depthStencil
Objekt kann die folgenden Eigenschaften enthalten:
depthBias
Optional-
Eine Zahl, die einen konstanten Tiefen-Bias darstellt, der zu jedem Fragment addiert wird. Wenn nicht angegeben, ist
depthBias
standardmäßig 0.Hinweis: Die Eigenschaften
depthBias
,depthBiasClamp
unddepthBiasSlopeScale
müssen auf0
gesetzt werden für Linien- und Punkt-Topologien, d.h. wenntopology
auf"line-list"
,"line-strip"
oder"point-list"
gesetzt ist. Andernfalls wird einGPUValidationError
erzeugt und die zurückgegebeneGPURenderPipeline
wird ungültig sein. depthBiasClamp
Optional-
Eine Zahl, die den maximalen Tiefen-Bias eines Fragments darstellt. Wenn nicht angegeben, ist
depthBiasClamp
standardmäßig 0. depthBiasSlopeScale
Optional-
Eine Zahl, die einen Tiefen-Bias darstellt, der mit der Neigung des Fragments skaliert wird. Wenn nicht angegeben, ist
depthBiasSlopeScale
standardmäßig 0. depthCompare
Optional-
Ein enumerierter Wert, der die Vergleichsoperation angibt, die verwendet wird, um Fragments-Tiefen gegen
depthStencilAttachment
-Tiefenwerte zu testen. Mögliche Werte sind:"never"
: Vergleichstests schlagen immer fehl."less"
: Ein angegebener Wert besteht den Vergleichstest, wenn er kleiner ist als der abgetastete Wert."equal"
: Ein angegebener Wert besteht den Vergleichstest, wenn er gleich dem abgetasteten Wert ist."less-equal"
: Ein angegebener Wert besteht den Vergleichstest, wenn er kleiner oder gleich dem abgetasteten Wert ist."greater"
: Ein angegebener Wert besteht den Vergleichstest, wenn er größer ist als der abgetastete Wert."not-equal"
: Ein angegebener Wert besteht den Vergleichstest, wenn er nicht gleich dem abgetasteten Wert ist."greater-equal"
: Ein angegebener Wert besteht den Vergleichstest, wenn er größer oder gleich dem abgetasteten Wert ist."always"
: Vergleichstests bestehen immer.
depthCompare
ist nicht erforderlich, wenn das angegebeneformat
keine Tiefenkomponente hat oder wenn die Vergleichsoperation nicht verwendet wird. depthWriteEnabled
Optional-
Ein boolescher Wert. Ein Wert von
true
gibt an, dass dieGPURenderPipeline
depthStencilAttachment
-Tiefenwerte nach der Erstellung ändern kann. Wenn es auffalse
gesetzt wird, bedeutet das, dass sie dies nicht kann.depthWriteEnabled
ist nicht erforderlich, wenn das angegebeneformat
keine Tiefenkomponente hat. format
-
Ein enumerierter Wert, der das
depthStencilAttachment
-Format angibt, mit dem dieGPURenderPipeline
kompatibel sein wird. Siehe den Abschnitt Texture Formats der Spezifikation für alle verfügbarenformat
-Werte. stencilBack
Optional-
Ein Objekt, das definiert, wie Stencil-Vergleiche und -Operationen für rückseitige Primitive durchgeführt werden. Seine Eigenschaften können umfassen:
compare
Optional-
Ein enumerierter Wert, der die Vergleichsoperation angibt, die beim Testen von Fragmenten gegen
depthStencilAttachment
-Stencil-Werte verwendet wird. Mögliche Werte sind dieselben wie für diedepthCompare
-Eigenschaft; siehe oben. Wenn nicht angegeben, istcompare
standardmäßig"always"
. depthFailOp
Optional-
Ein enumerierter Wert, der die Stencil-Operation angibt, die durchgeführt wird, wenn der Tiefenvergleich des Fragments, wie durch
depthCompare
beschrieben, fehlschlägt. Mögliche Werte sind:"decrement-clamp"
: Verringert den aktuellen Renderstatus-Stencil-Wert und klemmt ihn auf 0."decrement-wrap"
: Verringert den aktuellen Renderstatus-Stencil-Wert und setzt ihn auf den maximal darstellbaren Wert desdepthStencilAttachment
-Stencil-Aspekts zurück, wenn der Wert unter 0 sinkt."invert"
: Bitweises Invertieren des aktuellen Renderstatus-Stencil-Werts."increment-clamp"
: Erhöht den aktuellen Renderstatus-Stencil-Wert und klemmt ihn auf den maximal darstellbaren Wert desdepthStencilAttachment
-Stencil-Aspekts."increment-wrap"
: Erhöht den aktuellen Renderstatus-Stencil-Wert und setzt ihn auf null zurück, wenn der Wert den maximal darstellbaren Wert desdepthStencilAttachment
-Stencil-Aspekts überschreitet."keep"
: Behält den aktuellen Stencil-Wert bei."replace"
: Setzt den Stencil-Wert auf den aktuellen Renderstatus-Stencil-Wert."zero"
: Setzt den Stencil-Wert auf 0.
Wenn nicht angegeben, ist
depthFailOp
standardmäßig"keep"
.Hinweis: Der Renderstatus-Stencil-Wert wird zu Beginn eines Render-Passes auf 0 gesetzt.
failOp
Optional-
Ein enumerierter Wert, der die Stencil-Operation angibt, die durchgeführt wird, wenn der Stencil-Vergleichstest des Fragments, wie durch
compare
beschrieben, fehlschlägt. Mögliche und Standardwerte sind die gleichen wie fürdepthFailOp
. passOp
Optional-
Ein enumerierter Wert, der die Stencil-Operation angibt, die durchgeführt wird, wenn der Stencil-Vergleichstest des Fragments, wie durch
compare
beschrieben, besteht. Mögliche und Standardwerte sind die gleichen wie fürdepthFailOp
.
stencilFront
Optional-
Ein Objekt, das definiert, wie Stencil-Vergleiche und -Operationen für vorderseitige Primitive durchgeführt werden. Seine Eigenschaften sind dieselben wie für
stencilBack
. stencilReadMask
Optional-
Eine Bitmaske, die steuert, welche
depthStencilAttachment
-Stencilwert-Bits gelesen werden, wenn Stencil-Vergleichstests durchgeführt werden. Wenn nicht angegeben, iststencilReadMask
standardmäßig0xFFFFFFFF
. stencilWriteMask
Optional-
Eine Bitmaske, die steuert, welche
depthStencilAttachment
-Stencilwert-Bits geschrieben werden, wenn Stencil-Operationen durchgeführt werden. Wenn nicht angegeben, iststencilWriteMask
standardmäßig0xFFFFFFFF
.
Hinweis:>depthStencilAttachment
-Werte werden während GPUCommandEncoder.beginRenderPass()
-Aufrufen angegeben, wenn die GPURenderPipeline
tatsächlich verwendet wird, um einen Render-Pass auszuführen.
fragment
Objektstruktur
Das fragment
Objekt enthält ein Array von Objekten, die jeweils die folgenden Eigenschaften haben können:
constants
Optional-
Eine Sequenz von Record-Typen mit der Struktur
(id, value)
, die Override-Werte für WGSL-Konstanten enthält, die in der Pipeline überschrieben werden können. Diese verhalten sich ähnlich wie geordnete Maps. In jedem Fall istid
ein Schlüssel, der verwendet wird, um den Record zu identifizieren oder auszuwählen, undconstant
ist ein enumerierter Wert, der einen WGSL darstellt.Abhängig davon, welche Konstante Sie überschreiben möchten, kann
id
die Form der numerischen ID der Konstante annehmen, wenn eine angegeben ist, oder sonst den Identifier-Namen der Konstante.Ein Code-Snippet, das Override-Werte für mehrere überschreibbare Konstanten bereitstellt, könnte so aussehen:
js({ // … constants: { 0: false, 1200: 3.0, 1300: 2.0, width: 20, depth: -1, height: 15, }, });
entryPoint
Optional-
Der Name der Funktion im
module
, die diese Phase verwenden wird, um ihre Arbeit auszuführen. Die entsprechende Shader-Funktion muss das@fragment
-Attribute haben, um als dieser Einstiegspunkt identifiziert zu werden. Weitere Informationen finden Sie unter Entry Point Declaration.Sie können die
entryPoint
-Eigenschaft weglassen, wenn Ihr Shader-Code eine einzelne Funktion mit dem@fragment
-Attribute enthält — der Browser verwendet diese als den Standard-Einstiegspunkt. FallsentryPoint
weggelassen wird und der Browser keinen Standard-Einstiegspunkt bestimmen kann, wird einGPUValidationError
erzeugt und die resultierendeGPURenderPipeline
wird ungültig. module
-
Ein
GPUShaderModule
-Objekt, das den WGSL-Code enthält, den diese programmierbare Phase ausführen wird. targets
-
Ein Array von Objekten, die Farbzustände darstellen, welche Konfigurationsdetails für die Farben darstellen, die von der Fragment-Shader-Phase ausgegeben werden. Diese Objekte können die folgenden Eigenschaften umfassen:
blend
Optional-
Ein Objekt, das einen Blend-Modus beschreibt, der auf die Ausgabefarbe angewendet werden soll.
blend
hat zwei Eigenschaften:Sowohl
alpha
als auchcolor
erwarten ein Objekt als Wert, das die folgenden Eigenschaften enthalten kann:dstFactor
Optional-
Ein enumerierter Wert, der die Blend-Faktor-Operation definiert, die auf Werte aus dem Zielanhang angewendet werden soll. Mögliche Werte sind:
"constant"
"dst"
"dst-alpha"
"one"
"one-minus-dst"
"one-minus-src"
"one-minus-src1"
"one-minus-src-alpha"
"one-minus-src1-alpha"
"one-minus-dst-alpha"
"one-minus-constant"
"src"
"src1"
"src-alpha"
"src1-alpha"
"src-alpha-saturated"
"zero"
Wenn nicht angegeben, ist
dstFactor
standardmäßig"zero"
.Hinweis: Die
dual-source-blending
Fähigkeit muss aktiviert sein, damit die Blend-Faktor-Operationensrc1
,one-minus-src1
,src1-alpha
undone-minus-src1-alpha
erfolgreich genutzt werden können. Andernfalls wird einGPUValidationError
erzeugt. operation
Optional-
Ein enumerierter Wert, der den Algorithmus definiert, der verwendet wird, um Quell- und Ziel-Blend-Faktoren zu kombinieren, um die endgültigen Werte zu berechnen, die in die Zielanhang-Komponenten geschrieben werden. Mögliche Werte sind:
"add"
"max"
"min"
"reverse-subtract"
"subtract"
Wenn nicht angegeben, ist
operation
standardmäßig"add"
. srcFactor
Optional-
Ein enumerierter Wert, der die Blend-Faktor-Operation definiert, die auf Werte aus dem Fragment-Shader angewendet werden soll. Mögliche Werte sind dieselben wie für
dstFactor
. Wenn nicht angegeben, istsrcFactor
standardmäßig"one"
.
Hinweis: Für eine detaillierte Erklärung der Algorithmen, die von jedem
dstFactor
/srcFactor
undoperation
-Wert definiert werden, sehen Sie bitte im Abschnitt Blend State der Spezifikation nach. format
-
Ein enumerierter Wert, der das erforderliche Format für Ausgabefarben angibt. Siehe den Abschnitt Texture Formats der Spezifikation für alle verfügbaren
format
-Werte. writeMask
Optional-
Eine oder mehrere bitweise Flags, die die Schreibmaske definieren, die auf den Farbzielzustand angewendet werden soll. Mögliche Flag-Werte sind:
GPUColorWrite.RED
GPUColorWrite.GREEN
GPUColorWrite.BLUE
GPUColorWrite.ALPHA
GPUColorWrite.ALL
Wenn nicht angegeben, ist
writeMask
standardmäßigGPUColorWrite.ALL
.Beachten Sie, dass mehrere Flags angegeben werden können, indem Werte mit bitweise OR getrennt werden, zum Beispiel:
GPUColorWrite.RED | GPUColorWrite.ALPHA
.
multisample
Objektstruktur
Das multisample
Objekt kann die folgenden Eigenschaften enthalten:
alphaToCoverageEnabled
Optional-
Ein boolescher Wert. Ein Wert von
true
gibt an, dass der Alphakanal eines Fragments verwendet werden sollte, um eine Sample-Abdeckungsmaske zu erzeugen. Wenn nicht angegeben, istalphaToCoverageEnabled
standardmäßigfalse
. count
Optional-
Eine Zahl, die die Anzahl der Samples pro Pixel definiert. Die Pipeline wird nur mit Anhang-Texturen (
colorAttachment
s unddepthStencilAttachment
s) kompatibel sein, die übereinstimmendesampleCounts
aufweisen (sieheGPUTexture
).Wenn nicht angegeben, ist
count
standardmäßig 1. mask
Optional-
Eine Bitmaske, die bestimmt, welche Samples geschrieben werden. Wenn nicht angegeben, ist
mask
standardmäßig0xFFFFFFFF
.
Hinweis:>colorAttachment
und depthStencilAttachment
Werte werden während GPUCommandEncoder.beginRenderPass()
-Aufrufen angegeben, wenn die GPURenderPipeline
tatsächlich verwendet wird, um einen Render-Pass auszuführen.
primitive
Objektstruktur
Das primitive
Objekt kann die folgenden Eigenschaften enthalten:
cullMode
Optional-
Ein enumerierter Wert, der festlegt, welche Polygonorientierung gegebenenfalls gekappt wird. Mögliche Werte sind:
"back"
: Rückseitige Polygone werden gekappt."front"
: Vorderseitige Polygone werden gekappt."none"
: Keine Polygone werden gekappt.
Wenn nicht angegeben, ist
cullMode
standardmäßig"none"
. frontFace
Optional-
Ein enumerierter Wert, der festlegt, welche Polygone als vorderseitig betrachtet werden. Mögliche Werte sind:
"ccw"
: Polygone mit Vertizes, deren Framebuffer-Koordinaten in gegen den Uhrzeigersinn angegebener Reihenfolge vorliegen."cw"
: Polygone mit Vertizes, deren Framebuffer-Koordinaten in Uhrzeigersinn angegebener Reihenfolge vorliegen.
Wenn nicht angegeben, ist
frontFace
standardmäßig"ccw"
.Hinweis: Die Werte
frontFace
undcullMode
haben keine Auswirkungen auf die Topologien"point-list"
,"line-list"
oder"line-strip"
. stripIndexFormat
Optional-
Ein enumerierter Wert, der das Indexbuffer-Format und den Primitive-Restart-Wert für Pipelines mit Streifentopologien (
"line-strip"
oder"triangle-strip"
) bestimmt. Der Primitive-Restart-Wert gibt an, welcher Indexwert anzeigt, dass ein neues Primitive gestartet werden soll, anstatt den Streifen mit den vorher indexierten Vertizes fortzusetzen. Mögliche Werte sind:"uint16"
: Gibt eine Byte-Größe von 2 und einen Primitive-Restart-Wert von0xFFFF
an."uint32"
: Gibt eine Byte-Größe von 4 und einen Primitive-Restart-Wert von0xFFFFFFFF
an.
GPU-Primitivzustände, die eine Streifenprimitiv-Topologie angeben, müssen ein Streifenindex-Format angeben, wenn sie für indizierte Zeichnungen verwendet werden (zum Beispiel über
GPURenderPassEncoder.drawIndexed()
), damit der Primitive-Restart-Wert, der verwendet werden soll, zum Zeitpunkt der Pipeline-Erstellung bekannt ist. Pipelines mit Listenprimitiv-Topologien ("line-list"
,"point-list"
oder"triangle-list"
) sollten keinenstripIndexFormat
-Wert angeben. Stattdessen verwenden sie das Indexformat, das zum Beispiel anGPURenderPassEncoder.setIndexBuffer()
übergeben wurde, wenn sie indizierte Rendering ausführen. topology
Optional-
Ein enumerierter Wert, der den Typ des zu konstruierenden Primitives aus den angegebenen
vertex
-Eingaben definiert. Mögliche Werte sind:"line-list"
: Jedes aufeinanderfolgende Paar von zwei Vertizes definiert ein Linienprimitiv."line-strip"
: Jeder Vertex nach dem ersten definiert ein Linienprimitiv zwischen ihm und dem vorherigen Vertex."point-list"
: Jeder Vertex definiert ein Punktprimitiv."triangle-list"
: Jedes aufeinanderfolgende Tripel aus drei Vertizes definiert ein Dreiecksprimitiv."triangle-strip"
: Jeder Vertex nach den ersten beiden definiert ein Dreiecksprimitiv zwischen ihm und den vorhergehenden beiden Vertizes.
Wenn nicht angegeben, ist
topology
standardmäßig"triangle-list"
. unclippedDepth
Optional-
Ein boolescher Wert. Ein Wert von
true
gibt an, dass Tiefenkappung deaktiviert ist. Wenn nicht angegeben, istunclippedDepth
standardmäßigfalse
. Beachten Sie, dass um die Tiefenkappung zu steuern, die Fähigkeitdepth-clip-control
feature imGPUDevice
aktiviert sein muss.Hinweis: Die Fähigkeit
depth-clip-control
feature muss aktiviert sein, damit dieunclippedDepth
-Eigenschaft erfolgreich verwendet werden kann. Andernfalls wird einGPUValidationError
erzeugt.
vertex
Objektstruktur
Das vertex
Objekt kann die folgenden Eigenschaften enthalten:
constants
Optional-
Eine Sequenz von Record-Typen mit der Struktur
(id, value)
, die Override-Werte für WGSL-Konstanten enthält, die in der Pipeline überschrieben werden können. Diese verhalten sich ähnlich wie geordnete Maps. In jedem Fall istid
ein Schlüssel, der verwendet wird, um den Record zu identifizieren oder auszuwählen, undconstant
ist ein enumerierter Wert, der einen WGSL darstellt.Abhängig davon, welche Konstante Sie überschreiben möchten, kann
id
die Form der numerischen ID der Konstante annehmen, wenn eine angegeben ist, oder sonst den Identifier-Namen der Konstante.Ein Code-Snippet, das Override-Werte für mehrere überschreibbare Konstanten bereitstellt, könnte so aussehen:
js({ // … constants: { 0: false, 1200: 3.0, 1300: 2.0, width: 20, depth: -1, height: 15, }, });
entryPoint
Optional-
Der Name der Funktion im
module
, die diese Phase verwenden wird, um ihre Arbeit auszuführen. Die entsprechende Shader-Funktion muss das@vertex
-Attribute haben, um als dieser Einstiegspunkt identifiziert zu werden. Weitere Informationen finden Sie unter Entry Point Declaration.Sie können die
entryPoint
-Eigenschaft weglassen, wenn Ihr Shader-Code eine einzelne Funktion mit dem@vertex
-Attribute enthält — der Browser verwendet diese als den Standard-Einstiegspunkt. FallsentryPoint
weggelassen wird und der Browser keinen Standard-Einstiegspunkt bestimmen kann, wird einGPUValidationError
erzeugt und die resultierendeGPURenderPipeline
wird ungültig. module
-
Ein
GPUShaderModule
-Objekt, das den WGSL-Code enthält, den diese programmierbare Phase ausführen wird. buffers
Optional-
Ein Array von Objekten, die jeweils das erwartete Layout eines Vertex-Puffers darstellen, der in der Pipeline verwendet wird. Jedes Objekt kann die folgenden Eigenschaften enthalten:
arrayStride
-
Eine Zahl, die den Abstand in Bytes zwischen den verschiedenen Strukturen (z.B. Vertizes) innerhalb des Puffers darstellt.
attributes
-
Ein Array von Objekten, das das Layout der Vertex-Attribute innerhalb jeder Struktur definiert. Jedes Objekt hat die folgenden Eigenschaften:
format
-
Ein enumerierter Wert, der das Format des Vertex spezifiziert. Für alle verfügbaren Werte siehe die Definition der
GPUVertexFormat
in der Spezifikation. offset
-
Eine Zahl, die den Versatz in Bytes vom Anfang der Struktur zu den Daten für das Attribut spezifiziert.
shaderLocation
-
Der numerische Ort, der diesem Attribut zugeordnet ist und der mit einem
@location
Attribut übereinstimmen wird, das im WGSL-Code des zugehörigenGPUShaderModule
deklariert ist, das in dermodule
-Eigenschaft desvertex
-Objekts referenziert wird.
stepMode
Optional-
Ein enumerierter Wert, der definiert, ob die separate Strukturen im Puffer Vertizes oder Instanzen darstellen. Mögliche Werte sind:
"instance"
: Jede Struktur ist eine Instanz — die Adresse wird für jede Instanz umarrayStride
erhöht."vertex"
: Jede Struktur ist ein Vertex — die Adresse wird für jeden Vertex umarrayStride
erhöht und zwischen den Instanzen zurückgesetzt.
Wenn nicht angegeben, ist
stepMode
standardmäßig"vertex"
.
Rückgabewert
Eine Instanz des GPURenderPipeline
-Objekts.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn createRenderPipeline()
aufgerufen wird, ansonsten wird ein GPUValidationError
erzeugt und ein ungültiges GPURenderPipeline
-Objekt wird zurückgegeben:
- Für
depthStencil
Objekte:format
ist eindepth-or-stencil
Format.- Die Eigenschaften
depthBias
,depthBiasClamp
unddepthBiasSlopeScale
sind auf0
gesetzt für Linien- und Punkt-Topologien, d.h. wenntopology
auf"line-list"
,"line-strip"
, oder"point-list"
gesetzt ist. - Wenn
depthWriteEnabled
true
ist oderdepthCompare
nicht"always"
ist, hatformat
eine Tiefenkomponente. - Wenn die Eigenschaften von
stencilFront
oderstencilBack
nicht auf ihren Standardwerten sind, hatformat
eine Stencil-Komponente.
- Für
fragment
Objekte:targets.length
ist kleiner oder gleich demmaxColorAttachments
Limit desGPUDevice
.- Für jedes
target
ist der numerische Wert vonwriteMask
kleiner als 16. - Wenn eine der verwendeten Blend-Faktor-Operationen den Alphakanal der Quelle verwenden (z.B.
"src-alpha-saturated"
), hat die Ausgabe einen Alphakanal (d.h. es muss einvec4
sein). - Wenn die
src1
,one-minus-src1
,src1-alpha
oderone-minus-src1-alpha
Blend-Faktor-Operationen verwendet werden, ist die Fähigkeitdual-source-blending
feature aktiviert. - Wenn die
entryPoint
-Eigenschaft ausgelassen wird, enthält der Shader-Code eine einzelne Fragment-Shader-Einstiegspunktfunktion, die der Browser als Standard-Einstiegspunkt verwenden kann.
- Für
primitive
Objekte:- Wenn die
unclippedDepth
-Eigenschaft verwendet wird, ist die Fähigkeitdepth-clip-control
feature aktiviert.
- Wenn die
- Für
vertex
Objekte:- Wenn die
entryPoint
-Eigenschaft ausgelassen wird, enthält der Shader-Code eine einzelne Vertex-Shader-Einstiegspunktfunktion, die der Browser als Standard-Einstiegspunkt verwenden kann.
- Wenn die
Beispiele
Hinweis: Die WebGPU-Beispiele bieten viele weitere Beispiele.
Einfaches Beispiel
Unser einfaches Render-Demo bietet ein Beispiel für die Konstruktion eines gültigen Render-Pipeline-Deskriptor-Objekts, das dann verwendet wird, um eine GPURenderPipeline
über einen createRenderPipeline()
-Aufruf zu erstellen.
// …
const vertexBuffers = [
{
attributes: [
{
shaderLocation: 0, // position
offset: 0,
format: "float32x4",
},
{
shaderLocation: 1, // color
offset: 16,
format: "float32x4",
},
],
arrayStride: 32,
stepMode: "vertex",
},
];
const pipelineDescriptor = {
vertex: {
module: shaderModule,
entryPoint: "vertex_main",
buffers: vertexBuffers,
},
fragment: {
module: shaderModule,
entryPoint: "fragment_main",
targets: [
{
format: navigator.gpu.getPreferredCanvasFormat(),
},
],
},
primitive: {
topology: "triangle-list",
},
layout: "auto",
};
const renderPipeline = device.createRenderPipeline(pipelineDescriptor);
// …
Spezifikationen
Specification |
---|
WebGPU # dom-gpudevice-createrenderpipeline |
Browser-Kompatibilität
Siehe auch
- Die WebGPU-API