GPUAdapter: requestDevice() Methode
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Please take two minutes to fill out our short survey.
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 für die Kommunikation mit der GPU ist.
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 durchGPUDevice.queue
zurückgegeben). Dieses Objekt hat eine einzelne Eigenschaft –label
– die der Standardwarteschlange einenlabel
-Wert zuweist. Wenn kein Wert angegeben ist, ist das Standard ein leeres Objekt und das Label der Standardwarteschlange wird ein leerer String sein. label
Optional-
Ein String, der ein Label bereitstellt, mit dem das
GPUDevice
identifiziert werden kann, zum Beispiel inGPUError
-Meldungen oder Konsolenwarnungen. requiredFeatures
Optional-
Ein Array von Strings, die zusätzliche Funktionalitäten darstellen, die vom zurückgegebenen
GPUDevice
unterstützt werden sollen. DerrequestDevice()
-Aufruf schlägt fehl, wenn dasGPUAdapter
diese Funktionen nicht bereitstellen kann. SieheGPUSupportedFeatures
für eine vollständige Liste möglicher Funktionen. Falls kein Wert angegeben ist, wird standardmäßig ein leeres Array verwendet. requiredLimits
Optional-
Ein Objekt, das Eigenschaften enthält, die die Grenzen darstellen, die vom zurückgegebenen
GPUDevice
unterstützt werden sollen. DerrequestDevice()
-Aufruf schlägt fehl, wenn dasGPUAdapter
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 Grenzen anfordern, wenn Sie ein GPU-Gerät anfordern, ohne einen Fehler zu verursachen. Solche Grenzen werden
undefined
sein. Dies ist nützlich, da es den WebGPU-Code weniger anfällig macht – ein Codebase wird nicht aufhören zu funktionieren, weil eine Grenze im Adapter nicht mehr existiert.
Nicht alle Funktionen und Grenzen werden in allen Browsern verfügbar sein, die WebGPU 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 Instanz eines GPUDevice
-Objekts erfüllt wird.
Wenn Sie einen doppelten Aufruf machen, 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 ist. Sie können dann über GPUDevice.lost
Informationen darüber erhalten, wie das Gerät verloren ging.
Ausnahmen
OperationError
DOMException
-
Das Promise wird mit einem
OperationError
abgelehnt, wenn die in derrequiredLimits
-Eigenschaft 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 derrequiredFeatures
-Eigenschaft 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 spezifischer Funktionen und Grenzen
Im folgenden Code:
- Überprüfen wir, ob ein
GPUAdapter
die Funktiontexture-compression-astc
verfügbar hat. Wenn ja, fügen wir es zum Array derrequiredFeatures
hinzu. - Abfragen wir den
GPUAdapter.limits
-Wert vonmaxBindGroups
, 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 demrequiredLimits
-Objekt eine Maximalgrenze von 6 hinzu. - Fordern wir ein Gerät mit diesen Funktions- 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