GPUDevice: createComputePipelineAsync()-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 createComputePipelineAsync()
-Methode des GPUDevice
-Interfaces gibt ein Promise
zurück, das mit einer GPUComputePipeline
erfüllt wird. Diese kann die Compute Shader-Stufe steuern und in einem GPUComputePassEncoder
verwendet werden, sobald die Pipeline ohne Verzögerung genutzt werden kann.
Hinweis:
Es ist generell vorzuziehen, diese Methode über GPUDevice.createComputePipeline()
zu verwenden, wann immer dies möglich ist, da so die Blockierung der GPU-Operationen während der Pipeline-Kompilierung vermieden wird.
Syntax
createComputePipelineAsync(descriptor)
Parameter
descriptor
-
Siehe die Definition des Descriptors für die Methode
GPUDevice.createComputePipeline()
.
Rückgabewert
Ein Promise
, das mit einer GPUComputePipeline
-Objektinstanz erfüllt wird, wenn die erstellte Pipeline ohne zusätzliche Verzögerung einsatzbereit ist.
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, wird der
GPUPipelineError
einreason
von"internal"
haben. - Wenn dies auf einen Validierungsfehler zurückzuführen ist, wird der
GPUPipelineError
einreason
von"validation"
haben.
Ein Validierungsfehler kann auftreten, wenn eine der folgenden Bedingungen nicht erfüllt ist:
- Die im
module
referenzierte Workgroup-Speichergröße innerhalb dercompute
-Eigenschaft ist kleiner oder gleich demmaxComputeWorkgroupStorageSize
Limit desGPUDevice
. - Das
module
verwendet eine Anzahl an Compute-Aufrufen pro Workgroup, die kleiner oder gleich demmaxComputeInvocationsPerWorkgroup
Limit desGPUDevice
ist. - Die Workgroup-Größe des
module
ist kleiner oder gleich dem entsprechendenmaxComputeWorkgroupSizeX
,maxComputeWorkgroupSizeY
, odermaxComputeWorkgroupSizeZ
Limit desGPUDevice
. - Wenn die
entryPoint
-Eigenschaft weggelassen wird, enthält der Shader-Code eine einzelne Compute-Shader-Einstiegspunktfunktion, die der Browser als Standard-Einstiegspunkt verwenden kann.
Beispiele
Hinweis: Die WebGPU-Beispiele bieten viele weitere Beispiele.
Einfaches Beispiel
Das folgende Beispiel zeigt einen Prozess:
- Erstellen eines Bindgroup-Layouts mit
GPUDevice.createBindGroupLayout()
. - Übergabe des
bindGroupLayout
anGPUDevice.createPipelineLayout()
, um einGPUPipelineLayout
zu erstellen. - Verwendung dieses Werts unmittelbar in einem
createComputePipelineAsync()
-Aufruf, um eineGPUComputePipeline
zu erstellen.
async function init() {
// …
const bindGroupLayout = device.createBindGroupLayout({
entries: [
{
binding: 0,
visibility: GPUShaderStage.COMPUTE,
buffer: {
type: "storage",
},
},
],
});
const computePipeline = await device.createComputePipelineAsync({
layout: device.createPipelineLayout({
bindGroupLayouts: [bindGroupLayout],
}),
compute: {
module: shaderModule,
entryPoint: "main",
},
});
// …
}
Spezifikationen
Specification |
---|
WebGPU # dom-gpudevice-createcomputepipelineasync |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API