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 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 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ögerungen genutzt werden kann.
Hinweis:
Es ist im Allgemeinen vorzuziehen, diese Methode gegenüber GPUDevice.createRenderPipeline()
wann immer möglich zu verwenden, da sie verhindert, dass GPU-Operationen durch die Pipeline-Kompilierung blockiert werden.
Syntax
createRenderPipelineAsync(descriptor)
Parameter
descriptor
-
Siehe die Beschreibung des Deskriptors für die Methode
GPUDevice.createRenderPipeline()
.
Rückgabewert
Ein Promise
, das mit einer Instanz des GPURenderPipeline
-Objekts erfüllt wird, wenn die erstellte Pipeline bereit ist, ohne zusätzliche Verzögerung verwendet zu werden.
Validierung
Wenn die Erstellung der Pipeline fehlschlägt und die resultierende Pipeline dadurch ungültig wird, wird das zurückgegebene Promise mit einem GPUPipelineError
abgelehnt:
- Wenn dies aufgrund eines internen Fehlers geschieht, wird der
GPUPipelineError
einenreason
von"internal"
haben. - Wenn dies aufgrund eines Validierungsfehlers geschieht, wird der
GPUPipelineError
einenreason
von"validation"
haben.
Ein Validierungsfehler kann auftreten, wenn eines der folgenden 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 auf ihren Standardwerten sind, hatformat
eine Stencil-Komponente.
- Für
fragment
-Objekte:targets.length
ist kleiner oder gleich dermaxColorAttachments
Limit desGPUDevice
.- Für jedes
target
ist das numerische Äquivalent vonwriteMask
weniger als 16. - Wenn eine der verwendeten Blendfaktor-Operationen den Quell-Alpha-Kanal nutzt (z. B.
"src-alpha-saturated"
), hat das Ausgangsobjekt einen Alpha-Kanal (das heißt, es muss einvec4
sein). - Wenn die
entryPoint
-Eigenschaft weggelassen wird, enthält der Shader-Code eine einzige Fragment-Shader-Einstiegspunktfunktion, die vom Browser als Standard-Einstiegspunkt verwendet werden 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 einzige Vertex-Shader-Einstiegspunktfunktion, die vom Browser als Standard-Einstiegspunkt verwendet werden kann.
- Wenn die
Beispiele
Hinweis: Die WebGPU-Beispiele bieten viele weitere Beispiele.
Einfaches Beispiel
Das folgende Beispiel zeigt ein einfaches Beispiel für die Konstruktion eines gültigen Render-Pipeline-Deskriptor-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