GPUAdapter: requestDevice() 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 requestDevice()
Methode des GPUAdapter
Interfaces gibt ein Promise
zurück, das mit einem GPUDevice
Objekt erfüllt wird, welches die primäre Schnittstelle zur Kommunikation mit der GPU darstellt.
Syntax
requestDevice()
requestDevice(descriptor)
Parameter
descriptor
Optional-
Ein Objekt mit den folgenden Eigenschaften:
defaultQueue
Optional-
Ein Objekt, das Informationen für die Standard-
GPUQueue
des Gerätes bereitstellt (wie vonGPUDevice.queue
zurückgegeben). Dieses Objekt hat eine einzige Eigenschaft —label
— die der Standardwarteschlange einenlabel
Wert zuweist. Wenn kein Wert angegeben wird, ist dies standardmäßig ein leeres Objekt, und das Label der Standardwarteschlange wird ein leerer String sein. label
Optional-
Ein String, das ein Label bereitstellt, das genutzt werden kann, um das
GPUDevice
zu identifizieren, zum Beispiel inGPUError
Meldungen oder Konsolenwarnungen. requiredFeatures
Optional-
Ein Array von Strings, die zusätzliche Funktionalitäten darstellen, die Sie vom zurückgegebenen
GPUDevice
unterstützt haben möchten. Der Aufruf vonrequestDevice()
wird fehlschlagen, wenn derGPUAdapter
diese Features nicht bereitstellen kann. SieheGPUSupportedFeatures
für eine vollständige Liste möglicher Features. Dies ist standardmäßig ein leeres Array, wenn kein Wert angegeben wird. requiredLimits
Optional-
Ein Objekt mit Eigenschaften, die die Grenzen darstellen, die Sie vom zurückgegebenen
GPUDevice
unterstützt haben möchten. Der Aufruf vonrequestDevice()
wird fehlschlagen, wenn derGPUAdapter
diese Grenzen nicht bereitstellen kann. Jeder Schlüssel mit einem nicht-undefined
Wert muss der Name eines Mitglieds vonGPUSupportedLimits
sein.Hinweis: Sie können unbekannte Limits anfordern, wenn Sie ein GPU-Gerät anfordern, ohne einen Fehler zu verursachen. Solche Limits werden
undefined
sein. Dies ist nützlich, weil es den WebGPU-Code weniger anfällig macht — ein Codebestand wird nicht aufhören zu funktionieren, weil ein Limit im Adapter nicht mehr existiert.
Nicht alle Features und Limits werden in allen Browsern, die WebGPU unterstützen, verfügbar sein, selbst wenn sie von der darunterliegenden Hardware unterstützt werden. Siehe die Seiten zu features
und limits
für weitere Informationen.
Rückgabewert
Ein Promise
, das mit einer Instanz des GPUDevice
Objekts erfüllt wird.
Wenn Sie einen doppelten Aufruf tätigen, d.h. requestDevice()
auf einem GPUAdapter
aufrufen, auf dem requestDevice()
bereits aufgerufen wurde, wird das Promise mit einem Gerät erfüllt, das sofort verloren geht. Sie können dann Informationen darüber erhalten, wie das Gerät verloren ging, über GPUDevice.lost
.
Ausnahmen
OperationError
DOMException
-
Das Promise wird mit einem
OperationError
abgelehnt, wenn die in der EigenschaftrequiredLimits
enthaltenen Grenzen nicht vomGPUAdapter
unterstützt werden, entweder weil sie keine gültigen Grenzen sind oder weil ihre Werte höher sind als die Werte des Adapters für diese Grenzen. TypeError
DOMException
-
Das Promise wird mit einem
TypeError
abgelehnt, wenn die in der EigenschaftrequiredFeatures
enthaltenen Features nicht vomGPUAdapter
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();
// …
}
Anfordern spezifischer Features und Grenzen
Im folgenden Code:
- Überprüfen wir, ob ein
GPUAdapter
dastexture-compression-astc
Feature verfügbar hat. Wenn ja, fügen wir es demrequiredFeatures
Array hinzu. - Fragen wir den
GPUAdapter.limits
Wert vonmaxBindGroups
ab, um zu sehen, ob er gleich oder größer als 6 ist. Unsere theoretische Beispielanwendung benötigt idealerweise 6 Bindungsgruppen, daher fügen wir ein maximales Limit von 6 demrequiredLimits
Objekt hinzu, wenn der zurückgegebene Wert >= 6 ist. - Fordern wir ein Gerät mit diesen Feature- und Grenzanforderungen sowie einem
defaultQueue
Label an.
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
Specification |
---|
WebGPU # dom-gpuadapter-requestdevice |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API