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, das die folgenden Eigenschaften enthält:
depthStencil
Optional-
Ein Objekt (siehe Aufbau des
depthStencil
-Objekts), das Tiefen-Stencil-Eigenschaften einschließlich Tests, Operationen und Verzerrung beschreibt. fragment
Optional-
Ein Objekt (siehe Aufbau des
fragment
-Objekts), das den Einstiegspunkt des Fragment-Shaders der Pipeline und deren Ausgabe-Farben beschreibt. Wenn kein Fragment-Shader-Einstiegspunkt definiert ist, erzeugt die Pipeline keine Farbausgabe-Anhänge, führt aber dennoch Rasterisierung durch und erzeugt Tiefenwerte basierend auf der Ausgabe der Vertex-Position. Tiefentests und Stencil-Operationen können weiterhin verwendet werden. label
Optional-
Ein String, der ein Label bereitstellt, mit dem das Objekt identifiziert werden kann, zum Beispiel in
GPUError
-Meldungen oder Konsolenwarnungen. layout
-
Definiert das Layout (Struktur, Zweck und Typ) aller GPU-Ressourcen (Puffer, Texturen usw.), die während der Ausführung der Pipeline verwendet werden. Mögliche Werte sind:
- Ein
GPUPipelineLayout
-Objekt, erstellt mitGPUDevice.createPipelineLayout()
, das es der GPU ermöglicht, im Voraus herauszufinden, wie die Pipeline am effizientesten ausgeführt werden kann. - Ein String
"auto"
, der die Pipeline veranlasst, ein implizites Bind-Group-Layout basierend auf den im Shader-Code definierten Bindungen zu generieren. Wenn"auto"
verwendet wird, können die generierten Bind-Group-Layouts nur mit der aktuellen Pipeline verwendet werden.
- Ein
multisample
Optional-
Ein Objekt (siehe Aufbau des
multisample
-Objekts), das beschreibt, wie die Pipeline mit den multisample-Texturen eines Renderpasses interagiert. primitive
Optional-
Ein Objekt (siehe Aufbau des
primitive
-Objekts), das beschreibt, wie eine Pipeline Primitive mit ihren Vertex-Eingaben konstruiert und rasterisiert. vertex
-
Ein Objekt (siehe Aufbau des
vertex
-Objekts), das den Vertex-Shader-Einstiegspunkt der Pipeline und deren Eingabepuffer-Layouts beschreibt.
Aufbau des depthStencil
-Objekts
Das depthStencil
-Objekt kann die folgenden Eigenschaften enthalten:
depthBias
Optional-
Eine Zahl, die eine konstante Tiefen-Verzerrung darstellt, die zu jedem Fragment hinzugefügt wird. Wenn weggelassen, ist der Standardwert von
depthBias
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. Wenn nicht, wird einGPUValidationError
erzeugt und die zurückgegebeneGPURenderPipeline
wird ungültig sein. depthBiasClamp
Optional-
Eine Zahl, die die maximale Tiefen-Verzerrung eines Fragments darstellt. Wenn weggelassen, ist der Standardwert von
depthBiasClamp
0. depthBiasSlopeScale
Optional-
Eine Zahl, die eine Tiefen-Verzerrung darstellt, die mit der Neigung des Fragments skaliert. Wenn weggelassen, ist der Standardwert von
depthBiasSlopeScale
0. depthCompare
Optional-
Ein enumerierter Wert, der die Vergleichsoperation spezifiziert, die verwendet wird, um Fragment-Tiefen gegen
depthStencilAttachment
-Tiefenwerte zu testen. Mögliche Werte sind:"never"
: Vergleichstests bestehen nie."less"
: Ein bereitgestellter Wert besteht den Vergleichstest, wenn er kleiner als der abgetastete Wert ist."equal"
: Ein bereitgestellter Wert besteht den Vergleichstest, wenn er gleich dem abgetasteten Wert ist."less-equal"
: Ein bereitgestellter Wert besteht den Vergleichstest, wenn er kleiner oder gleich dem abgetasteten Wert ist."greater"
: Ein bereitgestellter Wert besteht den Vergleichstest, wenn er größer als der abgetastete Wert ist."not-equal"
: Ein bereitgestellter Wert besteht den Vergleichstest, wenn er ungleich dem abgetasteten Wert ist."greater-equal"
: Ein bereitgestellter 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
nach der ErstellungdepthStencilAttachment
-Tiefenwerte modifizieren kann. Wenn er auffalse
gesetzt ist, bedeutet dies, dass es nicht möglich ist.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 Texturformate der Spezifikation für alle verfügbarenformat
-Werte. stencilBack
Optional-
Ein Objekt, das definiert, wie Stencil-Vergleiche und -Operationen bei rückseitigen Primitiven durchgeführt werden. Seine Eigenschaften können umfassen:
compare
Optional-
Ein enumerierter Wert, der die Vergleichsoperation spezifiziert, die bei der Prüfung von Fragmenten gegen
depthStencilAttachment
-Stencil-Werte verwendet wird. Mögliche Werte sind dieselben wie für diedepthCompare
-Eigenschaft; siehe oben. Wenn weggelassen, ist der Standardwert voncompare
"always"
. depthFailOp
Optional-
Ein enumerierter Wert, der die Stencil-Operation spezifiziert, die ausgeführt wird, wenn der Fragment-Tiefenvergleich, beschrieben durch
depthCompare
, fehlschlägt. Mögliche Werte sind:"decrement-clamp"
: Verringert den aktuellen Stencil-Wert des Render-Zustands, unter Beachtung einer Begrenzung auf 0."decrement-wrap"
: Verringert den aktuellen Stencil-Wert des Render-Zustands, dabei wird er auf den maximal darstellbaren Wert desdepthStencilAttachment
-Stencil-Aspekts gewickelt, wenn der Wert unter 0 fällt."invert"
: Führt eine bitweise Invertierung des aktuellen Stencil-Werts des Render-Zustands durch."increment-clamp"
: Erhöht den aktuellen Stencil-Wert des Render-Zustands, unter Beachtung einer Begrenzung auf den maximal darstellbaren Wert desdepthStencilAttachment
-Stencil-Aspekts."increment-wrap"
: Erhöht den aktuellen Stencil-Wert des Render-Zustands, wickelt ihn auf null, 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 Stencil-Wert des Render-Zustands."zero"
: Setzt den Stencil-Wert auf 0.
Wenn weggelassen, ist der Standardwert von
depthFailOp
"keep"
.Hinweis: Der Stencil-Wert des Render-Zustands wird zu Beginn eines Renderpasses auf 0 initialisiert.
failOp
Optional-
Ein enumerierter Wert, der die Stencil-Operation spezifiziert, die ausgeführt wird, wenn der Fragment-Stencil-Vergleichstest, beschrieben durch
compare
, fehlschlägt. Mögliche und Standardwerte sind dieselben wie fürdepthFailOp
. passOp
Optional-
Ein enumerierter Wert, der die Stencil-Operation spezifiziert, die ausgeführt wird, wenn der Fragment-Stencil-Vergleichstest, beschrieben durch
compare
, besteht. Mögliche und Standardwerte sind dieselben wie fürdepthFailOp
.
stencilFront
Optional-
Ein Objekt, das definiert, wie Stencil-Vergleiche und -Operationen bei vorderseitigen Primitiven durchgeführt werden. Seine Eigenschaften sind dieselben wie bei
stencilBack
. stencilReadMask
Optional-
Ein Bitmaske, die kontrolliert, welche
depthStencilAttachment
-Stencilwertbits beim Ausführen von Stencil-Vergleichstests gelesen werden. Wenn weggelassen, ist der Standardwert vonstencilReadMask
0xFFFFFFFF
. stencilWriteMask
Optional-
Ein Bitmaske, die kontrolliert, welche
depthStencilAttachment
-Stencilwertbits während der Ausgabe von Stencil-Operationen geschrieben werden. Wenn weggelassen, ist der Standardwert vonstencilWriteMask
0xFFFFFFFF
.
Hinweis: depthStencilAttachment
-Werte werden während GPUCommandEncoder.beginRenderPass()
-Aufrufen angegeben, wenn die GPURenderPipeline
tatsächlich verwendet wird, um einen Renderpass durchzuführen.
Aufbau des fragment
-Objekts
Das fragment
-Objekt enthält ein Array von Objekten, von denen jedes die folgenden Eigenschaften enthalten kann:
constants
Optional-
Eine Sequenz von Record-Typen mit der Struktur
(id, value)
, die Überschreibungswerte für WGSL-Konstanten darstellt, die in der Pipeline überschrieben werden können. Diese verhalten sich wie geordneten Maps. In jedem Fall ist dasid
ein Schlüssel zur Identifikation oder Auswahl des Records, und dasconstant
ist ein enumerierter Wert, der eine WGSL darstellt.Abhängig davon, welche Konstante Sie überschreiben möchten, kann das
id
die Form der numerischen ID der Konstante annehmen, falls eine spezifiziert ist, oder ansonsten den Bezeichnernamen der Konstante.Ein Code-Schnipsel, der Überschreibungswerte 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 zur Ausführung ihrer Arbeit verwenden wird. Die entsprechende Shader-Funktion muss das@fragment
-Attribut haben, um als dieser Einstiegspunkt identifiziert zu werden. Siehe Einstiegspunkt-Deklaration für mehr Informationen.Sie können die Eigenschaft
entryPoint
weglassen, wenn Ihr Shader-Code eine einzelne Funktion mit dem@fragment
-Attribut enthält — der Browser wird diese als Standard-Einstiegspunkt verwenden. WennentryPoint
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 Farbstati repräsentieren, die Konfigurationsdetails für die von der Fragment-Shader-Phase ausgegebenen Farben darstellen. Diese Objekte können die folgenden Eigenschaften enthalten:
blend
Optional-
Ein Objekt, das einen Mischmodus beschreibt, der auf die Ausgabefarbe angewendet werden soll.
blend
hat zwei Eigenschaften:alpha
undcolor
nehmen jeweils ein Objekt als Wert an, das die folgenden Eigenschaften enthalten kann:dstFactor
Optional-
Ein enumerierter Wert, der die Mischfaktor-Operation definiert, die auf Werte von der Zielanhang ausgeführt wird. 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 weggelassen, ist der Standardwert von
dstFactor
"zero"
.Hinweis: Die Funktion
dual-source-blending
feature muss aktiviert sein, damit die Blendfaktor-Operationensrc1
,one-minus-src1
,src1-alpha
undone-minus-src1-alpha
erfolgreich verwendet werden können. Wenn nicht, wird einGPUValidationError
erzeugt. operation
Optional-
Ein enumerierter Wert, der den Algorithmus definiert, der verwendet wird, um Quell- und Zielmischfaktoren zu kombinieren, um die finalen Werte zu berechnen, die in die Zielanhangskomponenten geschrieben werden. Mögliche Werte sind:
"add"
"max"
"min"
"reverse-subtract"
"subtract"
Wenn weggelassen, ist der Standardwert von
operation
"add"
. srcFactor
Optional-
Ein enumerierter Wert, der die Mischfaktor-Operation definiert, die auf Werte vom Fragment-Shader ausgeführt wird. Mögliche Werte sind dieselben wie für
dstFactor
. Wenn weggelassen, ist der Standardwert vonsrcFactor
"one"
.
Hinweis: Eine detaillierte Erklärung der durch jeden
dstFactor
/srcFactor
undoperation
definierten Algorithmen finden Sie im Abschnitt Blendzustand der Spezifikation. format
-
Ein enumerierter Wert, der das erforderliche Format für Ausgabefarben angibt. Siehe den Abschnitt Texturformate der Spezifikation für alle verfügbaren
format
-Werte. writeMask
Optional-
Eine oder mehrere bitweise Flags, die die Schreibmaske definieren, die auf den Farbzieltzustand angewendet wird. Mögliche Flag-Werte sind:
GPUColorWrite.RED
GPUColorWrite.GREEN
GPUColorWrite.BLUE
GPUColorWrite.ALPHA
GPUColorWrite.ALL
Wenn weggelassen, ist der Standardwert von
writeMask
GPUColorWrite.ALL
.Beachten Sie, dass mehrere Flags angegeben werden können, indem Werte mit bitwise OR getrennt werden, zum Beispiel:
GPUColorWrite.RED | GPUColorWrite.ALPHA
.
Aufbau des multisample
-Objekts
Das multisample
-Objekt kann die folgenden Eigenschaften enthalten:
alphaToCoverageEnabled
Optional-
Ein boolescher Wert. Ein Wert von
true
gibt an, dass der Alpha-Kanal eines Fragments verwendet werden soll, um eine Sample-Coverage-Maske zu erzeugen. Wenn weggelassen, ist der Standardwert vonalphaToCoverageEnabled
false
. count
Optional-
Eine Zahl, die die Anzahl der Samples pro Pixel definiert. Die Pipeline ist nur mit Anhangstexturen kompatibel (
colorAttachment
s unddepthStencilAttachment
s) mit übereinstimmendensampleCounts
(sieheGPUTexture
).Wenn weggelassen, ist der Standardwert von
count
1. mask
Optional-
Eine Bitmaske, die bestimmt, welche Samples geschrieben werden. Wenn weggelassen, ist der Standardwert von
mask
0xFFFFFFFF
.
Hinweis: colorAttachment
und depthStencilAttachment
-Werte werden während GPUCommandEncoder.beginRenderPass()
-Aufrufen angegeben, wenn die GPURenderPipeline
tatsächlich verwendet wird, um einen Renderpass durchzuführen.
Aufbau des primitive
-Objekts
Das primitive
-Objekt kann die folgenden Eigenschaften enthalten:
cullMode
Optional-
Ein enumerierter Wert, der definiert, welche Polygon-Orientierung, wenn überhaupt, ausgeschlossen wird. Mögliche Werte sind:
"back"
: Rückwärtig gerichtete Polygone werden ausgeschlossen."front"
: Vorwärtig gerichtete Polygone werden ausgeschlossen."none"
: Keine Polygone werden ausgeschlossen.
Wenn weggelassen, ist der Standardwert von
cullMode
"none"
. frontFace
Optional-
Ein enumerierter Wert, der definiert, welche Polygone als vorderseitig betrachtet werden. Mögliche Werte sind:
"ccw"
: Polygone mit Vertizes, deren Framebuffer-Koordinaten in gegen den Uhrzeigersinn gegebener Ordnung liegen."cw"
: Polygone mit Vertizes, deren Framebuffer-Koordinaten in Uhrzeigersinn gegebener Ordnung liegen.
Wenn weggelassen, ist der Standardwert von
frontFace
"ccw"
.Hinweis: Die
frontFace
- undcullMode
-Werte haben keine Wirkung auf die"point-list"
,"line-list"
oder"line-strip"
-Topologien. stripIndexFormat
Optional-
Ein enumerierter Wert, der das Indexpufferformat und den Primitivneustartwert im Fall von Pipelines mit Streifentopologien (
"line-strip"
oder"triangle-strip"
) bestimmt. Der Primitivneustartwert gibt an, welcher Indexwert anzeigt, dass ein neues Primitive gestartet werden soll, anstatt das Streifen mit den vorher indexierten Vertizes weiter zu konstruieren. Mögliche Werte sind:"uint16"
: Gibt eine Bytegröße von 2 und einen Primitivneustartwert von0xFFFF
an."uint32"
: Gibt eine Bytegröße von 4 und einen Primitivneustartwert von0xFFFFFFFF
an.
GPU-Primitiv-Funktionalitäten, die eine Streifentopologie angeben, müssen ein Streifenindexformat angeben, wenn sie für indexierte Zeichnungen verwendet werden (zum Beispiel, über
GPURenderPassEncoder.drawIndexed()
), damit der Primitivneustartwert bekannt ist, wenn die Pipeline erzeugt wird. Pipelines mit Listentopologien ("line-list"
,"point-list"
, oder"triangle-list"
) sollten keinenstripIndexFormat
-Wert angeben. Sie werden stattdessen das Indexformat verwenden, das zum Beispiel anGPURenderPassEncoder.setIndexBuffer()
übergeben wird, wenn indiziertes Rendern durchgeführt wird. topology
Optional-
Ein enumerierter Wert, der die Art des Primitivs definiert, das aus den angegebenen
vertex
-Eingaben konstruiert wird. Mögliche Werte sind:"line-list"
: Jedes aufeinanderfolgende Paar zweier Vertizes definiert ein Linienprimitive."line-strip"
: Jeder Vertex nach dem ersten definiert ein Linienprimitive zwischen ihm und dem vorherigen Vertex."point-list"
: Jeder Vertex definiert ein Punktprimitive."triangle-list"
: Jedes aufeinanderfolgende Triplett von drei Vertizes definiert ein Dreieckprimitive."triangle-strip"
: Jeder Vertex nach den ersten beiden definiert ein Dreieckprimitive zwischen ihm und den vorhergehenden zwei Vertizes.
Wenn weggelassen, ist der Standardwert von
topology
"triangle-list"
. unclippedDepth
Optional-
Ein boolescher Wert. Ein Wert von
true
zeigt an, dass Tiefenüberschneidung deaktiviert ist. Wenn weggelassen, ist der Standardwert vonunclippedDepth
false
. Beachten Sie, dass, um die Tiefenüberschneidung zu steuern, diedepth-clip-control
-Funktion feature imGPUDevice
aktiviert sein muss.Hinweis: Die
depth-clip-control
-Funktion feature muss aktiviert sein, damit dieunclippedDepth
-Eigenschaft erfolgreich verwendet werden kann. Wenn nicht, wird einGPUValidationError
erzeugt.
Aufbau des vertex
-Objekts
Das vertex
-Objekt kann die folgenden Eigenschaften enthalten:
constants
Optional-
Eine Sequenz von Record-Typen mit der Struktur
(id, value)
, die Überschreibungswerte für WGSL-Konstanten darstellen, die in der Pipeline überschrieben werden können. Diese verhalten sich wie geordneten Maps. In jedem Fall ist dasid
ein Schlüssel zur Identifikation oder Auswahl des Records, und dasconstant
ist ein enumerierter Wert, der eine WGSL darstellt.Abhängig davon, welche Konstante Sie überschreiben möchten, kann das
id
die Form der numerischen ID der Konstante annehmen, falls eine spezifiziert ist, oder ansonsten den Bezeichnernamen der Konstante.Ein Code-Schnipsel, der Überschreibungswerte 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 zur Ausführung ihrer Arbeit verwenden wird. Die entsprechende Shader-Funktion muss das@vertex
-Attribut haben, um als dieser Einstiegspunkt identifiziert zu werden. Siehe Einstiegspunkt-Deklaration für mehr Informationen.Sie können die Eigenschaft
entryPoint
weglassen, wenn Ihr Shader-Code eine einzige Funktion mit dem@vertex
-Attribut enthält — der Browser wird diese als Standard-Einstiegspunkt verwenden. WennentryPoint
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, der in der Pipeline verwendet wird, darstellen. Jedes Objekt kann die folgenden Eigenschaften enthalten:
arrayStride
-
Eine Zahl, die die Anzahl der Bytes zwischen den verschiedenen Strukturen (z.B. Vertizes) im Puffer repräsentiert.
attributes
-
Ein Array von Objekten, die das Layout der Vertex-Attribute innerhalb jeder Struktur definieren. Jedes Objekt hat die folgenden Eigenschaften:
format
-
Ein enumerierter Wert, der das Format des Vertex spezifiziert. Für alle verfügbaren Werte siehe die
GPUVertexFormat
-Definition in der Spezifikation. offset
-
Eine Zahl, die den Offset, in Bytes, vom Anfang der Struktur zu den Daten für das Attribut spezifiziert.
shaderLocation
-
Die numerische Position, die diesem Attribut zugeordnet ist und mit einem
@location
-Attribut im WGSL-Code des assoziiertenGPUShaderModule
übereinstimmt, auf das in dervertex
-Objekteigenschaftmodule
verwiesen wird.
stepMode
Optional-
Ein enumerierter Wert, der definiert, ob die separaten Strukturen innerhalb des Puffers Vertizes oder Instanzen darstellen. Mögliche Werte sind:
"instance"
: Jede Struktur ist eine Instanz — die Adresse wird für jede Instanz umarrayStride
vorgerückt."vertex"
: Jede Struktur ist ein Vertex — die Adresse wird für jedes Vertex umarrayStride
vorgerückt und zwischen den Instanzen zurückgesetzt.
Wenn weggelassen, ist der Standardwert von
stepMode
"vertex"
.
Rückgabewert
Eine Instanz des GPURenderPipeline
-Objekts.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn createRenderPipeline()
aufgerufen wird, andernfalls wird ein GPUValidationError
erzeugt und ein ungültiges GPURenderPipeline
-Objekt zurückgegeben:
- Für
depthStencil
-Objekte:format
ist eindepth-or-stencil
-Format.- Die
depthBias
,depthBiasClamp
unddepthBiasSlopeScale
-Eigenschaften 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 dermaxColorAttachments
-Grenze limit desGPUDevice
.- Für jedes
target
ist der numerische Äquivalent vonwriteMask
kleiner als 16. - Wenn eine der verwendeten Mischfaktor-Operationen den Quell-Alpha-Kanal verwendet (zum Beispiel
"src-alpha-saturated"
), hat die Ausgabe einen Alpha-Kanal (d.h. sie muss einvec4
sein). - Wenn die
src1
,one-minus-src1
,src1-alpha
oderone-minus-src1-alpha
Mischfaktor-Operationen verwendet werden, ist diedual-source-blending
-Funktion feature aktiviert. - Wenn die Eigenschaft
entryPoint
weggelassen wird, enthält der Shader-Code eine einzelne Fragmentshader-Einstiegspunktfunktion, die der Browser als Standard-Einstiegspunkt verwenden kann.
- Für
primitive
-Objekte:- Wenn die Eigenschaft
unclippedDepth
verwendet wird, ist diedepth-clip-control
-Funktion feature aktiviert.
- Wenn die Eigenschaft
- Für
vertex
-Objekte:- Wenn die Eigenschaft
entryPoint
weggelassen wird, enthält der Shader-Code eine einzelne Vertexshader-Einstiegspunktfunktion, die der Browser als Standard-Einstiegspunkt verwenden kann.
- Wenn die Eigenschaft
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-Descriptor-Objekts, welches verwendet wird, um eine GPURenderPipeline
über einen createRenderPipeline()
-Aufruf zu erzeugen.
// …
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