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 
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: 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
Loading…
Siehe auch
- Die WebGPU API