GPUAdapter: requestDevice() 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 requestDevice()
-Methode der GPUAdapter
-Schnittstelle 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, das die folgenden Eigenschaften enthält:
defaultQueue
Optional-
Ein Objekt, das Informationen für die Standard-
GPUQueue
des Geräts bereitstellt (wie sie vonGPUDevice.queue
zurückgegeben wird). Dieses Objekt hat eine einzelne Eigenschaft —label
— die der Standardwarteschlange einenlabel
-Wert liefert. 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, der ein Label bereitstellt, das zur Identifikation des
GPUDevice
verwendet werden kann, beispielsweise inGPUError
-Meldungen oder Konsolenwarnungen. requiredFeatures
Optional-
Ein Array von Strings, das zusätzliche Funktionalitäten darstellt, die vom zurückgegebenen
GPUDevice
unterstützt werden sollen. Der Aufruf vonrequestDevice()
schlägt fehl, wenn derGPUAdapter
diese Funktionen nicht bereitstellen kann. SieheGPUSupportedFeatures
für eine vollständige Liste möglicher Funktionen. Dies ist standardmäßig ein leeres Array, wenn kein Wert angegeben wird. requiredLimits
Optional-
Ein Objekt, das Eigenschaften enthält, die die Grenzwerte darstellen, die vom zurückgegebenen
GPUDevice
unterstützt werden sollen. Der Aufruf vonrequestDevice()
schlägt fehl, wenn derGPUAdapter
diese Grenzwerte nicht bereitstellen kann. Jeder Schlüssel mit einem nichtundefined
Wert muss der Name eines Members vonGPUSupportedLimits
sein.Hinweis: Sie können unbekannte Grenzwerte anfordern, wenn Sie ein GPU-Gerät anfordern, ohne einen Fehler zu verursachen. Solche Grenzwerte werden
undefined
sein. Dies ist nützlich, da es den WebGPU-Code weniger anfällig macht – eine Codebasis wird nicht aufhören zu arbeiten, weil ein Grenzwert im Adapter nicht mehr existiert.
Nicht alle Funktionen und Grenzwerte sind für WebGPU in allen Browsern verfügbar, die es unterstützen, selbst wenn sie von der zugrunde liegenden Hardware unterstützt werden. Siehe die Seiten zu features
und limits
für weitere Informationen.
Rückgabewert
Ein Promise
, das mit einer GPUDevice
-Objektinstanz erfüllt wird.
Wenn Sie einen doppelten Aufruf durchführen, d.h. requestDevice()
auf einem GPUAdapter
aufrufen, bei dem bereits requestDevice()
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 Grenzwerte nicht vomGPUAdapter
unterstützt werden, entweder weil es sich nicht um gültige Grenzwerte handelt, oder weil ihre Werte höher sind als die Werte des Adapters für diese Grenzwerte. TypeError
DOMException
-
Das Promise wird mit einem
TypeError
abgelehnt, wenn die in der EigenschaftrequiredFeatures
enthaltenen Funktionen 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 bestimmter Funktionen und Grenzwerte
Im folgenden Code:
- Prüfen wir, ob ein
GPUAdapter
die Funktiontexture-compression-astc
verfügbar hat. Falls ja, fügen wir sie dem Array derrequiredFeatures
hinzu. - Fragen wir den
GPUAdapter.limits
Wert vonmaxBindGroups
ab, um zu sehen, ob er gleich oder größer als 6 ist. Unsere theoretische Beispiel-App benötigt idealerweise 6 Bindungsgruppen, also wenn der zurückgegebene Wert ≥ 6 ist, fügen wir ein maximales Limit von 6 zumrequiredLimits
-Objekt hinzu. - Fordern wir ein Gerät mit diesen Funktions- und Grenzwertanforderungen 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