GPUAdapter: requestDevice()-Methode
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Want more browser support for this feature? Tell us why.
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 Methode requestDevice() der Schnittstelle GPUAdapter gibt eine Promise zurück, die mit einem GPUDevice-Objekt erfüllt wird. Dieses Objekt ist die primäre Schnittstelle für die Kommunikation mit der GPU.
Syntax
requestDevice()
requestDevice(descriptor)
Parameter
descriptorOptional-
Ein Objekt mit den folgenden Eigenschaften:
defaultQueueOptional-
Ein Objekt mit Informationen für die standardmäßige
GPUQueuedes Geräts (wie vonGPUDevice.queuezurückgegeben). Dieses Objekt hat eine einzige Eigenschaft –label–, die der Standard-Queue einen Wert fürlabelzuweist. Wird kein Wert angegeben, ist der Standardwert ein leeres Objekt und das Label der Standard-Queue eine leere Zeichenfolge. labelOptional-
Eine Zeichenfolge, die ein Label zur Identifizierung des
GPUDevicebereitstellt, beispielsweise inGPUError-Meldungen oder Konsolenwarnungen. requiredFeaturesOptional-
Ein Array von Zeichenfolgen, die zusätzliche Funktionen angeben, die das zurückgegebene
GPUDeviceunterstützen soll. Der Aufruf vonrequestDevice()schlägt fehl, wenn derGPUAdapterdiese Funktionen nicht bereitstellen kann. Eine vollständige Liste möglicher Funktionen finden Sie unterGPUSupportedFeatures. Wird kein Wert angegeben, ist der Standardwert ein leeres Array. requiredLimitsOptional-
Ein Objekt mit Eigenschaften, die die Limits angeben, die das zurückgegebene
GPUDeviceunterstützen soll. Der Aufruf vonrequestDevice()schlägt fehl, wenn derGPUAdapterdiese Limits nicht bereitstellen kann. Jeder Schlüssel mit einem Wert ungleichundefinedmuss dem Namen eines Members vonGPUSupportedLimitsentsprechen.Hinweis: Sie können beim Anfordern eines GPU-Geräts unbekannte Limits angeben, ohne dass ein Fehler auftritt. Solche Limits haben den Wert
undefined. Das macht WebGPU-Code robuster: Eine Codebasis funktioniert nicht plötzlich nicht mehr, nur weil ein Limit im Adapter nicht mehr existiert.
Nicht alle Funktionen und Limits sind in jedem Browser, der WebGPU unterstützt, für WebGPU verfügbar – selbst wenn die zugrunde liegende Hardware sie unterstützt. Weitere Informationen finden Sie auf den Seiten zu features und limits.
Rückgabewert
Eine Promise, die mit einer GPUDevice-Objektinstanz erfüllt wird.
Wenn Sie requestDevice() erneut auf einem GPUAdapter aufrufen, auf dem die Methode bereits aufgerufen wurde, wird die Promise mit einem OperationError zurückgewiesen. Der zugehörige GPUAdapter wird beim Erstellen eines GPUDevice aufgebraucht.
Ausnahmen
OperationErrorDOMException-
Die Promise wird mit einem
OperationErrorzurückgewiesen, wenn einer der folgenden Fälle eintritt:- Die in der Eigenschaft
requiredLimitsangegebenen Limits werden vomGPUAdapternicht unterstützt, weil sie entweder keine gültigen Limits sind oder ihre Werte über den entsprechenden Werten des Adapters liegen. - Der
GPUAdapterwurde bereits durch einen früheren Aufruf vonrequestDevice()aufgebraucht.
- Die in der Eigenschaft
TypeError-
Die Promise wird mit einem
TypeErrorzurückgewiesen, wenn die in der EigenschaftrequiredFeaturesangegebenen Funktionen vomGPUAdapternicht unterstützt werden.
Beispiele
>Einfaches Beispiel
async function init() {
if (!navigator.gpu) {
throw Error("WebGPU not supported.");
}
const adapter = await navigator.gpu.requestAdapter();
if (!adapter) {
throw Error("Couldn't request WebGPU adapter.");
}
const device = await adapter.requestDevice();
// …
}
Bestimmte Funktionen und Limits anfordern
Im folgenden Code:
- Prüfen wir, ob für einen
GPUAdapterdie Funktiontexture-compression-astcverfügbar ist. Falls ja, fügen wir sie dem ArrayrequiredFeatureshinzu. - Fragen wir den Wert von
maxBindGroupsinGPUAdapter.limitsab, um festzustellen, ob er mindestens 6 beträgt. Unsere hypothetische Beispielanwendung benötigt idealerweise 6 Bind Groups. Wenn der zurückgegebene Wert >= 6 ist, fügen wir dem ObjektrequiredLimitsdaher ein maximales Limit von 6 hinzu. - Fordern wir ein Gerät mit diesen Anforderungen an Funktionen und Limits sowie einem Label für
defaultQueuean.
async function init() {
if (!navigator.gpu) {
throw Error("WebGPU not supported.");
}
const adapter = await navigator.gpu.requestAdapter();
if (!adapter) {
throw Error("Couldn't request WebGPU adapter.");
}
const requiredFeatures = [];
if (adapter.features.has("texture-compression-astc")) {
requiredFeatures.push("texture-compression-astc");
}
const requiredLimits = {};
// App ideally needs 6 bind groups, so we'll try to request what the app needs
if (adapter.limits.maxBindGroups >= 6) {
requiredLimits.maxBindGroups = 6;
}
const device = await adapter.requestDevice({
defaultQueue: {
label: "my_queue",
},
requiredFeatures,
requiredLimits,
});
// …
}
Spezifikationen
| Spezifikation |
|---|
| WebGPU> # dom-gpuadapter-requestdevice> |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API