Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
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 insicheren Kontexten (HTTPS) in einigen oder allenunterstützenden Browsern verfügbar.
Hinweis: Diese Funktion ist inWeb Workers verfügbar.
DiecreateRenderPipelineAsync() Methode derGPUDevice Schnittstelle gibt einPromise zurück, das mit einerGPURenderPipeline erfüllt wird. Diese kann die Vertex- und Fragment-Shader-Stufen steuern und in einemGPURenderPassEncoder oderGPURenderBundleEncoder verwendet werden, sobald die Pipeline ohne Verzögerung genutzt werden kann.
Hinweis:Es ist generell vorzuziehen, diese Methode gegenüberGPUDevice.createRenderPipeline() zu verwenden, wann immer möglich, da so verhindert wird, dass GPU-Operationsausführungen bei der Pipeline-Kompilation blockiert werden.
In diesem Artikel
Syntax
createRenderPipelineAsync(descriptor)Parameter
descriptorSiehe die Descriptor-Definition für die Methode
GPUDevice.createRenderPipeline().
Rückgabewert
EinPromise, das mit einerGPURenderPipeline 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 einemGPUPipelineError abgelehnt:
- Wenn dies auf einen internen Fehler zurückzuführen ist, hat der
GPUPipelineErroreinenreasonvon"internal". - Wenn dies auf einen Validierungsfehler zurückzuführen ist, hat der
GPUPipelineErroreinenreasonvon"validation".
Ein Validierungsfehler kann auftreten, wenn eine der folgenden Bedingungen falsch ist:
- Für
depthStencil-Objekte:formatist eindepth-or-stencilFormat.- Die Eigenschaften
depthBias,depthBiasClampunddepthBiasSlopeScalesind auf0gesetzt für Linien- und Punkt-Topologien, d.h. wenntopologyauf"line-list","line-strip"oder"point-list"gesetzt ist. - Wenn
depthWriteEnabledtrueist oderdepthComparenicht"always"ist, hatformateine Tiefenkomponente. - Wenn die Eigenschaften von
stencilFrontoderstencilBacknicht ihre Standardwerte haben, hatformateine Stencil-Komponente.
- Für
fragment-Objekte:targets.lengthist kleiner oder gleich demmaxColorAttachmentsLimit desGPUDevice.- Für jedes
targetist der numerische Äquivalent vonwriteMaskkleiner 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 einvec4sein). - 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-controlFunktion 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:DieWebGPU-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 eineGPURenderPipeline über einencreateRenderPipelineAsync() 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
- DieWebGPU API