GPUDevice: createRenderPipelineAsync() 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, bevor Sie diese produktiv verwenden.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Hinweis: Dieses Feature ist verfügbar in Web Workers.
Die createRenderPipelineAsync()
Methode der GPUDevice
-Schnittstelle gibt ein Promise
zurück, das mit einem 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ögerungen genutzt werden kann.
Hinweis: Es ist allgemein vorzuziehen, diese Methode über GPUDevice.createRenderPipeline()
zu verwenden, wann immer möglich, da sie die Blockierung der GPU-Betriebsausführung bei der Pipeline-Kompilierung verhindert.
Syntax
createRenderPipelineAsync(descriptor)
Parameter
descriptor
-
Siehe die Beschreibung des Deskriptors 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 genutzt zu werden.
Validierung
Falls die Erstellung der Pipeline fehlschlägt und die resultierende Pipeline daher ungültig wird, wird das zurückgegebene Promise mit einem GPUPipelineError
abgelehnt:
- Bei einem internen Fehler wird der
GPUPipelineError
einenreason
von"internal"
haben. - Bei einem Validierungsfehler wird der
GPUPipelineError
einenreason
von"validation"
haben.
Ein Validierungsfehler kann auftreten, wenn eines der folgenden Kriterien nicht erfüllt ist:
- Für
depthStencil
-Objekte:format
ist eindepth-or-stencil
-Format.- Die Eigenschaften
depthBias
,depthBiasClamp
unddepthBiasSlopeScale
sind für Linien- und Punkt-Topologien auf0
gesetzt, 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 demmaxColorAttachments
Limit desGPUDevice
.- Für jedes
target
ist das numerische Äquivalent vonwriteMask
kleiner als 16. - Wenn irgendeine der verwendeten Blend-Faktor-Operationen den Quell-Alpha-Kanal nutzt (zum Beispiel
"src-alpha-saturated"
), muss das Ergebnis einen Alpha-Kanal haben (das heißt, es muss einvec4
sein).
Beispiele
Hinweis: Die WebGPU-Proben enthalten viele weitere Beispiele.
Einfaches Beispiel
Das folgende Beispiel zeigt ein einfaches Beispiel für die Konstruktion eines gültigen Render-Pipeline-Beschreibungsobjekts, 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
BCD tables only load in the browser
Siehe auch
- Die WebGPU API