GPUDevice: createRenderPipelineAsync() 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 createRenderPipelineAsync()
Methode der GPUDevice
Schnittstelle gibt ein Promise
zurück, das mit einer GPURenderPipeline
erfüllt wird. Diese kann die Vertex- und Fragment-Shader-Stufen steuern und in einem GPURenderPassEncoder
oder GPURenderBundleEncoder
verwendet werden, sobald die Pipeline ohne Verzögerung genutzt werden kann.
Hinweis:
Es ist generell vorzuziehen, diese Methode gegenüber GPUDevice.createRenderPipeline()
zu verwenden, wann immer möglich, da so verhindert wird, dass GPU-Operationsausführungen bei der Pipeline-Kompilation blockiert werden.
Syntax
createRenderPipelineAsync(descriptor)
Parameter
descriptor
-
Siehe die Descriptor-Definition für die Methode
GPUDevice.createRenderPipeline()
.
Rückgabewert
Ein Promise
, das mit einer GPURenderPipeline
Objektinstanz erfüllt wird, wenn die erstellte Pipeline bereit ist, ohne zusätzliche Verzögerung verwendet zu werden.
Validierung
Wenn die Pipeline-Erstellung fehlschlägt und die resultierende Pipeline dadurch ungültig wird, wird das zurückgegebene Promise mit einem GPUPipelineError
abgelehnt:
- Wenn dies auf einen internen Fehler zurückzuführen ist, hat der
GPUPipelineError
einenreason
von"internal"
. - Wenn dies auf einen Validierungsfehler zurückzuführen ist, hat der
GPUPipelineError
einenreason
von"validation"
.
Ein Validierungsfehler kann auftreten, wenn eine der folgenden Bedingungen falsch ist:
- 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 ihre Standardwerte haben, hatformat
eine Stencil-Komponente.
- Für
fragment
-Objekte:targets.length
ist kleiner oder gleich demmaxColorAttachments
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. es muss einvec4
sein). - Wenn die
entryPoint
-Eigenschaft weggelassen 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 diedepth-clip-control
Funktion aktiviert.
- Wenn die
- Für
vertex
-Objekte:- Wenn die
entryPoint
-Eigenschaft weggelassen 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
Das folgende Beispiel zeigt ein einfaches Beispiel der Konstruktion eines gültigen Render-Pipeline-Descriptor-Objekts, das dann verwendet wird, um eine GPURenderPipeline
über einen createRenderPipelineAsync()
Aufruf zu erstellen.
async function init() {
// …
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 =
await device.createRenderPipelineAsync(pipelineDescriptor);
// …
}
Spezifikationen
Specification |
---|
WebGPU # dom-gpudevice-createrenderpipelineasync |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API