GPUDevice: createRenderPipeline() 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 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 createRenderPipeline()
Methode der GPUDevice
-Schnittstelle erstellt eine GPURenderPipeline
, die die Vertex- und Fragment-Shader-Phasen steuern kann 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
depthStencil
-Objektstruktur), das Tiefenstencil-Eigenschaften einschließlich Tests, Operationen und Bias beschreibt. fragment
Optional-
Ein Objekt (siehe
fragment
-Objektstruktur), das den Eingabepunkt des Fragment-Shaders der Pipeline und seine Ausgabe-Farben beschreibt. Wenn kein Eingabepunkt des Fragment-Shaders definiert ist, erzeugt die Pipeline keine Farbanhang-Ausgaben, führt aber dennoch die Rasterisierung durch und produziert Tiefenwerte basierend auf dem Vertex-Positionsergebnis. Tiefentests und Stencil-Operationen können weiterhin verwendet werden. label
Optional-
Ein String, der ein Label bereitstellt, mit dem das Objekt identifiziert werden kann, beispielsweise 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 dazu führt, dass die Pipeline ein implizites Bind-Group-Layout basierend auf in der Shader-Schreiben definierten Bindungen generiert. 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 Multi-Sample-Anhängen eines Render-Durchgangs interagiert. primitive
Optional-
Ein Objekt (siehe
primitive
-Objektstruktur), das beschreibt, wie eine Pipeline primitive Strukturen aus ihren Vertex-Eingaben erstellt und rasterisiert. vertex
-
Ein Objekt (siehe
vertex
-Objektstruktur), das den Eingabepunkt 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 eine konstante Tiefenvoreilung darstellt, die jedem Fragment hinzugefügt wird. Wenn weggelassen, ist
depthBias
standardmäßig 0.Hinweis: Die Eigenschaften
depthBias
,depthBiasClamp
unddepthBiasSlopeScale
müssen auf0
gesetzt werden für Linien- und Punkttopologien, 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 Tiefenvoreilungswert eines Fragments darstellt. Wenn weggelassen, ist
depthBiasClamp
standardmäßig 0. depthBiasSlopeScale
Optional-
Eine Zahl, die eine Tiefenvoreilung darstellt, die mit der Neigung des Fragments skaliert. Wenn weggelassen, ist
depthBiasSlopeScale
standardmäßig 0. depthCompare
Optional-
Ein enumerierter Wert, der die Vergleichsoperation angibt, 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 nicht gleich 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 boolean. Ein Wert von
true
gibt an, dass dieGPURenderPipeline
depthStencilAttachment
-Tiefenwerte nach der Erstellung ändern kann. Wenn auffalse
gesetzt, kann sie dies nicht.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 der Spezifikation über Texturformate für alle verfügbarenformat
-Werte. stencilBack
Optional-
Ein Objekt, das definiert, wie Stencil-Vergleiche und -Operationen für rückseitige Primitiven 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 die gleichen wie für diedepthCompare
-Eigenschaft; siehe oben. Wenn weggelassen, istcompare
standardmäßig"always"
. depthFailOp
Optional-
Ein enumerierter Wert, der die Stencil-Operation angibt, die ausgeführt wird, wenn der Fragment-Tiefenvergleich, der durch
depthCompare
beschrieben wird, fehlschlägt. Mögliche Werte sind:"decrement-clamp"
: Verringert den aktuellen Stencil-Wert des Render-Zustands und klemmt ihn auf 0."decrement-wrap"
: Verringert den aktuellen Stencil-Wert des Render-Zustands und umwickelt ihn auf den maximal darstellbaren Wert des Stencil-Aspekts desdepthStencilAttachment
, wenn der Wert unter 0 fällt."invert"
: Bitweises Invertieren des aktuellen Stencil-Wertes des Render-Zustands."increment-clamp"
: Erhöht den aktuellen Stencil-Wert des Render-Zustands und klemmt ihn auf den maximal darstellbaren Wert des Stencil-Aspekts desdepthStencilAttachment
."increment-wrap"
: Erhöht den aktuellen Stencil-Wert des Render-Zustands und umwickelt ihn auf null, wenn der Wert den maximal darstellbaren Wert des Stencil-Aspekts desdepthStencilAttachment
überschreitet."keep"
: Beibehalten des aktuellen Stencil-Wertes."replace"
: Setzt den Stencil-Wert auf den aktuellen Stencil-Wert des Render-Zustands."zero"
: Setzt den Stencil-Wert auf 0.
Wenn weggelassen, ist
depthFailOp
standardmäßig"keep"
.Hinweis: Der Stencil-Wert des Render-Zustands wird zu Beginn eines Render-Durchgangs auf 0 initialisiert.
failOp
Optional-
Ein enumerierter Wert, der die Stencil-Operation angibt, die ausgeführt wird, wenn der Fragment-Stencil-Vergleichstest, der durch
compare
beschrieben wird, fehlschlägt. Mögliche und Standardwerte sind die gleichen wie fürdepthFailOp
. passOp
Optional-
Ein enumerierter Wert, der die Stencil-Operation angibt, die ausgeführt wird, wenn der Fragment-Stencil-Vergleichstest, der durch
compare
beschrieben wird, 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 Primitiven durchgeführt werden. Seine Eigenschaften sind die gleichen wie für
stencilBack
. stencilReadMask
Optional-
Eine Bitmaske, die steuert, welche Bits des
depthStencilAttachment
-Stencil-Wertes beim Durchführen von Stencil-Vergleichstests gelesen werden. Wenn weggelassen, iststencilReadMask
standardmäßig0xFFFFFFFF
. stencilWriteMask
Optional-
Eine Bitmaske, die steuert, welche Bits des
depthStencilAttachment
-Stencil-Wertes beim Durchführen von Stencil-Operationen geschrieben werden. Wenn weggelassen, iststencilWriteMask
standardmäßig0xFFFFFFFF
.
Hinweis: depthStencilAttachment
-Werte werden während GPUCommandEncoder.beginRenderPass()
-Aufrufen spezifiziert, wenn die GPURenderPipeline
tatsächlich verwendet wird, um einen Render-Durchgang durchzuführen.
fragment
Objektstruktur
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, die in der Pipeline überschrieben werden können, repräsentieren. Diese verhalten sich wie geordnete Maps. In jedem Fall istid
ein Schlüssel, der verwendet wird, um das Record zu identifizieren oder auszuwählen, und dasconstant
ist ein enumerierter Wert, der ein 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 andernfalls den Bezeichnernamen der Konstante.Ein Code-Snippet, das Überschreibungswerte für mehrere überschreibbare Konstanten bereitstellt, könnte folgendermaßen 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 Stufe verwenden wird, um ihre Arbeit auszuführen. Die entsprechende Shader-Funktion muss das@fragment
-Attribut haben, um als dieser Eingabepunkt identifiziert zu werden. Weitere Informationen finden Sie unter Eingabepunkterklärung.Sie können die
entryPoint
-Eigenschaft weglassen, wenn Ihr Shader-Code eine einzelne Funktion mit gesetztem@fragment
-Attribut enthält — der Browser wird diese als Standard-Eingabepunkt verwenden. WennentryPoint
weggelassen wird und der Browser keinen Standard-Eingabepunkt bestimmen kann, wird einGPUValidationError
erzeugt und die resultierendeGPURenderPipeline
wird ungültig sein. module
-
Ein
GPUShaderModule
-Objekt, das den WGSL-Code enthält, den diese programmierbare Stufe ausführen wird. targets
-
Ein Array von Objekten, die Farbzustände darstellen, die Konfigurationsdetails für die vom Fragment-Shader-Stadium ausgegebenen Farben darstellen. Diese Objekte können die folgenden Eigenschaften enthalten:
blend
Optional-
Ein Objekt, das einen Mischmodus beschreibt, der auf die Ausgabefarbe angewendet wird.
blend
hat zwei Eigenschaften:Sowohl
alpha
als auchcolor
nehmen ein Objekt als Wert, das die folgenden Eigenschaften enthalten kann:dstFactor
Optional-
Ein enumerierter Wert, der die Mischfaktor-Operation definiert, die auf Werte des Zielanhangs 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
dstFactor
standardmäßig"zero"
.Hinweis: Die
dual-source-blending
Funktion muss aktiviert werden, damit diesrc1
,one-minus-src1
,src1-alpha
undone-minus-src1-alpha
Mischfaktor-Operationen 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 Ziel-Mischfaktoren zu kombinieren, um die endgültigen Werte zu berechnen, die an die Zielanhang-Komponenten geschrieben werden. Mögliche Werte sind:
"add"
"max"
"min"
"reverse-subtract"
"subtract"
Wenn weggelassen, ist
operation
standardmäßig"add"
. srcFactor
Optional-
Ein enumerierter Wert, der die Mischfaktor-Operation definiert, die auf Werte des Fragment-Shaders angewendet wird. Mögliche Werte sind die gleichen wie für
dstFactor
. Wenn weggelassen, istsrcFactor
standardmäßig"one"
.
Hinweis: Eine detaillierte Erklärung der Algorithmen, die von jedem
dstFactor
/srcFactor
undoperation
enumerierten Wert definiert werden, finden Sie im Abschnitt Blend State der Spezifikation. format
-
Ein enumerierter Wert, der das erforderliche Format für Ausgabefarben angibt. Siehe den Abschnitt der Spezifikation über Texturformate für alle verfügbaren
format
-Werte. writeMask
Optional-
Eine oder mehrere bitweise Flags, die die Schreibmaske definieren, die auf den Farbzielzustand angewendet wird. Mögliche Flag-Werte sind:
GPUColorWrite.RED
GPUColorWrite.GREEN
GPUColorWrite.BLUE
GPUColorWrite.ALPHA
GPUColorWrite.ALL
Wenn weggelassen, ist
writeMask
standardmäßigGPUColorWrite.ALL
.Beachten Sie, dass mehrere Flags durch Trennung der Werte mit bitweisem ODER angegeben werden können, beispielsweise:
GPUColorWrite.RED | GPUColorWrite.ALPHA
.
multisample
Objektstruktur
Das multisample
-Objekt kann die folgenden Eigenschaften enthalten:
alphaToCoverageEnabled
Optional-
Ein boolean. Ein Wert von
true
zeigt an, dass der Alphakanal eines Fragments zur Generierung einer Probeabdeckungsmaske verwendet werden soll. Wenn weggelassen, istalphaToCoverageEnabled
standardmäßigfalse
. count
Optional-
Eine Zahl, die die Anzahl der Proben pro Pixel definiert. Die Pipeline ist nur mit Anhangs-Texturen (
colorAttachment
s unddepthStencilAttachment
s) kompatibel, die mit passendensampleCounts
(sieheGPUTexture
) versehen sind.Wenn weggelassen, ist
count
standardmäßig 1. mask
Optional-
Eine Bitmaske, die bestimmt, welche Proben geschrieben werden. Wenn weggelassen, ist
mask
standardmäßig0xFFFFFFFF
.
Hinweis: colorAttachment
und depthStencilAttachment
-Werte werden während GPUCommandEncoder.beginRenderPass()
-Aufrufen spezifiziert, wenn die GPURenderPipeline
tatsächlich verwendet wird, um einen Render-Durchgang durchzuführen.
primitive
Objektstruktur
Das primitive
-Objekt kann die folgenden Eigenschaften enthalten:
cullMode
Optional-
Ein enumerierter Wert, der definiert, welche Polygonausrichtung ausgeschnitten wird, falls vorhanden. Mögliche Werte sind:
"back"
: Rückwärtsgerichtete Polygone werden ausgeschnitten."front"
: Vorwärtsgerichtete Polygone werden ausgeschnitten."none"
: Keine Polygone werden ausgeschnitten.
Wenn weggelassen, ist
cullMode
standardmäßig"none"
. frontFace
Optional-
Ein enumerierter Wert, der definiert, welche Polygone als vorwärtsgerichtet betrachtet werden. Mögliche Werte sind:
"ccw"
: Polygone mit Vertices, deren Framebuffer-Koordinaten in gegen den Uhrzeigersinn angegebener Reihenfolge sind."cw"
: Polygone mit Vertices, deren Framebuffer-Koordinaten in Uhrzeigersinn angegebener Reihenfolge sind.
Wenn weggelassen, ist
frontFace
standardmäßig"ccw"
.Hinweis: Die
frontFace
- undcullMode
-Werte haben keinen Effekt auf die"point-list"
,"line-list"
oder"line-strip"
-Topologien. stripIndexFormat
Optional-
Ein enumerierter Wert, der das Indexpufferformat und den primitiven Neustartwert im Fall von Pipelines mit Streifentopologien (
"line-strip"
oder"triangle-strip"
) bestimmt. Der primitive Neustartwert gibt den Indexwert an, der angibt, dass ein neues Primitive gestartet werden soll, anstatt mit den zuvor indizierten Vertices das Streifen weiter auszubauen. Mögliche Werte sind:"uint16"
: Gibt eine Byte-Größe von 2 und einen primitiven Neustartwert von0xFFFF
an."uint32"
: Gibt eine Byte-Größe von 4 und einen primitiven Neustartwert von0xFFFFFFFF
an.
GPU-Primitive-Zustände, die eine Streifenprimitive-Topologie spezifizieren, müssen ein Streifenindexformat spezifizieren, wenn sie für indizierte Zeichnungen (z.B. über
GPURenderPassEncoder.drawIndexed()
) verwendet werden, damit der primitive Neustartwert, der zur Pipeline-Erstellungszeit verwendet wird, bekannt ist. Pipelines mit Listenprimitive-Topologien ("line-list"
,"point-list"
oder"triangle-list"
) sollten keinenstripIndexFormat
-Wert spezifizieren. Sie verwenden stattdessen das Indexformat, das beispielsweise anGPURenderPassEncoder.setIndexBuffer()
übergeben wird, wenn indexiertes Rendering durchgeführt wird. topology
Optional-
Ein enumerierter Wert, der den Typ des Primitivs definiert, der aus den angegebenen
vertex
-Eingaben erstellt werden soll. Mögliche Werte sind:"line-list"
: Jedes aufeinanderfolgende Paar von zwei Vertices 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 Trio von drei Vertices definiert ein Dreieckprimitiv."triangle-strip"
: Jeder Vertex nach den ersten beiden definiert ein Dreieckprimitiv zwischen ihm und den vorherigen zwei Vertices.
Wenn weggelassen, ist
topology
standardmäßig"triangle-list"
. unclippedDepth
Optional-
Ein boolean. Ein Wert von
true
gibt an, dass das Tiefenschneiden deaktiviert ist. Wenn weggelassen, istunclippedDepth
standardmäßigfalse
. Beachten Sie, dass, um das Tiefenschneiden zu steuern, diedepth-clip-control
Funktion imGPUDevice
aktiviert sein muss.Hinweis: Die
depth-clip-control
Funktion muss aktiviert werden, damit dieunclippedDepth
-Eigenschaft erfolgreich verwendet werden kann. Wenn nicht, 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 Überschreibungswerte für WGSL-Konstanten, die in der Pipeline überschrieben werden können, repräsentieren. Diese verhalten sich wie geordnete Maps. In jedem Fall istid
ein Schlüssel, der verwendet wird, um das Record zu identifizieren oder auszuwählen, und dasconstant
ist ein enumerierter Wert, der ein 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 andernfalls den Bezeichnernamen der Konstante.Ein Code-Snippet, das Überschreibungswerte für mehrere überschreibbare Konstanten bereitstellt, könnte folgendermaßen 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 Stufe verwenden wird, um ihre Arbeit auszuführen. Die entsprechende Shader-Funktion muss das@vertex
-Attribut haben, um als dieser Eingabepunkt identifiziert zu werden. Weitere Informationen finden Sie unter Eingabepunkterklärung.Sie können die
entryPoint
-Eigenschaft weglassen, wenn Ihr Shader-Code eine einzelne Funktion mit gesetztem@vertex
-Attribut enthält — der Browser wird diese als Standard-Eingabepunkt verwenden. WennentryPoint
weggelassen wird und der Browser keinen Standard-Eingabepunkt bestimmen kann, wird einGPUValidationError
erzeugt und die resultierendeGPURenderPipeline
wird ungültig sein. module
-
Ein
GPUShaderModule
-Objekt, das den WGSL-Code enthält, den diese programmierbare Stufe 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. Vertices) innerhalb des Puffers 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 angibt. Für alle verfügbaren Werte, siehe die
GPUVertexFormat
-Definition in der Spezifikation. offset
-
Eine Zahl, die den Abstand in Bytes vom Anfang der Struktur zu den Daten für das Attribut angibt.
shaderLocation
-
Die numerische Position, die mit diesem Attribut assoziiert ist und mit einem
@location
-Attribut übereinstimmt, das im WGSL-Code des zugeordnetenGPUShaderModule
deklariert ist, auf das in dervertex
-Eigenschaft des Objekts verwiesen wird.
stepMode
Optional-
Ein enumerierter Wert, der bestimmt, ob die separaten Strukturen innerhalb des Puffers Vertices 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 stellt einen Vertex dar — die Adresse wird für jeden Vertex umarrayStride
erhöht und zwischen den Instanzen zurückgesetzt.
Wenn weggelassen, ist
stepMode
standardmäßig"vertex"
.
Rückgabewert
Eine Instanz des GPURenderPipeline
-Objekts.
Gültigkeitsprüfung
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 Eigenschaften
depthBias
,depthBiasClamp
unddepthBiasSlopeScale
sind auf0
gesetzt für Linien- und Punkttopologien, 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 demGPUDevice
'smaxColorAttachments
Limit.- Für jedes
target
ist die numerische Entsprechung vonwriteMask
kleiner als 16. - Wenn eine der verwendeten Mischfaktor-Operationen den Alpha-Kanal der Quelle verwenden (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 aktiviert. - Wenn die
entryPoint
-Eigenschaft weggelassen wird, enthält der Shader-Code eine einzelne Eingangspunktfunktion des Fragment-Shaders, die der Browser als Standard-Eingangspunkt verwenden kann.
- Für
primitive
-Objekte:- Wenn die
unclippedDepth
-Eigenschaft verwendet wird, ist diedepth-clip-control
Funktion aktiviert.
- Wenn die
- Für
vertex
-Objekte:- Wenn die
entryPoint
-Eigenschaft weggelassen wird, enthält der Shader-Code eine einzelne Eingangspunktfunktion des Vertex-Shaders, die der Browser als Standard-Eingangspunkt verwenden kann.
- Wenn die
Beispiele
Hinweis: Die WebGPU-Beispiele enthalten viele weitere Beispiele.
Einfaches Beispiel
Unser grundlegendes Render-Demo liefert 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