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 über die Standard-
GPUQueue
des Geräts bereitstellt (wie sie vonGPUDevice.queue
zurückgegeben wird). Dieses Objekt hat eine einzige Eigenschaft —label
— die der Standardwarteschlange einenlabel
Wert zuweist. Wird kein Wert angegeben, 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 verwendet werden kann, um das
GPUDevice
zu identifizieren, zum Beispiel inGPUError
Nachrichten oder Konsolenwarnungen. requiredFeatures
Optional-
Ein Array von Strings, das zusätzliche Funktionalitäten darstellt, die Sie vom zurückgegebenen
GPUDevice
unterstützt haben möchten. DerrequestDevice()
Aufruf schlägt fehl, wenn derGPUAdapter
diese Funktionen nicht bereitstellen kann. SieheGPUSupportedFeatures
für eine vollständige Liste möglicher Funktionen. Standardmäßig ist dies ein leeres Array, wenn kein Wert angegeben wird. requiredLimits
Optional-
Ein Objekt, das Eigenschaften enthält, die die Limits darstellen, die Sie vom zurückgegebenen
GPUDevice
unterstützt haben möchten. DerrequestDevice()
Aufruf schlägt fehl, wenn derGPUAdapter
diese Limits nicht bereitstellen kann. Jeder Schlüssel muss der Name eines Mitglieds vonGPUSupportedLimits
sein. Standardmäßig ist dies ein leeres Objekt, wenn kein Wert angegeben wird.
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 Versprechen mit einem Gerät erfüllt, das sofort verloren gegangen ist. Sie können dann über GPUDevice.lost
Informationen darüber erhalten, wie das Gerät verloren ging.
Ausnahmen
OperationError
DOMException
-
Das Versprechen wird mit einem
OperationError
abgelehnt, wenn die in der EigenschaftrequiredLimits
enthaltenen Limits nicht vomGPUAdapter
unterstützt werden, entweder weil sie keine gültigen Limits sind oder weil ihre Werte höher sind als die Werte des Adapters für diese Limits. TypeError
DOMException
-
Das Versprechen 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();
// ...
}
Anforderung spezifischer Funktionen und Limits
Im folgenden Code:
- Überprüfen wir, ob ein
GPUAdapter
die Funktiontexture-compression-astc
zur Verfügung hat. Falls ja, fügen wir sie dem ArrayrequiredFeatures
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, daher fügen wir ein maximales Limit von 6 dem ObjektrequiredLimits
hinzu, wenn der zurückgegebene Wert >= 6 ist. - Fordern wir ein Gerät mit diesen Feature- und Limit-Anforderungen 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
BCD tables only load in the browser
Siehe auch
- Die WebGPU API