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 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
descriptorOptional-
Ein Objekt, das die folgenden Eigenschaften enthält:
defaultQueueOptional-
Ein Objekt, das Informationen für die Standard-
GPUQueuedes Geräts bereitstellt (wie durchGPUDevice.queuezurückgegeben). Dieses Objekt hat eine einzige Eigenschaft —label— die der Standardwarteschlange einenlabel-Wert bereitstellt. Wenn kein Wert bereitgestellt wird, wird dies auf ein leeres Objekt gesetzt, und das Label der Standardwarteschlange wird ein leerer String sein. labelOptional-
Ein Zeichenfolgenwert, der ein Label bereitstellt, das verwendet werden kann, um das
GPUDevicezu identifizieren, beispielsweise inGPUError-Meldungen oder Konsolenwarnungen. requiredFeaturesOptional-
Ein Array von Strings, die zusätzliche Funktionalitäten darstellen, die vom zurückgegebenen
GPUDeviceunterstützt werden sollen. DerrequestDevice()-Aufruf schlägt fehl, wenn derGPUAdapterdiese Funktionen nicht bereitstellen kann. SieheGPUSupportedFeaturesfür eine vollständige Liste der möglichen Funktionen. Dies wird auf ein leeres Array gesetzt, wenn kein Wert angegeben wird. requiredLimitsOptional-
Ein Objekt, das Eigenschaften enthält, die die Limits darstellen, die vom zurückgegebenen
GPUDeviceunterstützt werden sollen. DerrequestDevice()-Aufruf schlägt fehl, wenn derGPUAdapterdiese Limits nicht bereitstellen kann. Jeder Schlüssel mit einem nicht-undefinedWert muss der Name eines Mitglieds vonGPUSupportedLimitssein.Hinweis: Sie können unbekannte Limits anfordern, wenn Sie ein GPU-Gerät anfordern, ohne einen Fehler zu verursachen. Solche Limits werden
undefinedsein. Dies ist nützlich, da es den WebGPU-Code weniger anfällig macht — ein Code wird nicht aufhören zu funktionieren, weil ein Limit nicht mehr im Adapter existiert.
Nicht alle Funktionen und Limits werden in allen Browsern, die WebGPU unterstützen, zur Verfügung stehen, 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 einem GPUDevice-Objektinstanz erfüllt wird.
Wenn Sie denselben Aufruf duplizieren, d.h. requestDevice() auf einem GPUAdapter aufrufen, auf dem bereits requestDevice() aufgerufen wurde, wird das Promise mit einem OperationError abgelehnt, da der zugehörige GPUAdapter verbraucht ist, wenn ein GPUDevice erstellt wird.
Ausnahmen
OperationErrorDOMException-
Das Promise wird mit einem
OperationErrorabgelehnt, wenn entweder:- Die in der Eigenschaft
requiredLimitsenthaltenen Limits vomGPUAdapternicht unterstützt werden, entweder weil sie keine gültigen Limits sind oder weil ihre Werte höher sind als die Adapterwerte für diese Limits. - Der
GPUAdapterwurde verbraucht, darequestDevice()zuvor aufgerufen wurde.
- Die in der Eigenschaft
TypeErrorDOMException-
Das Promise wird mit einem
TypeErrorabgelehnt, wenn die in der EigenschaftrequiredFeaturesenthaltenen 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();
// …
}
Anfordern spezifischer Funktionen und Limits
Im folgenden Code:
- Überprüfen wir, ob ein
GPUAdapterdietexture-compression-astc-Funktion verfügbar hat. Falls ja, fügen wir diese dem Array derrequiredFeatureshinzu. - Fragen wir den
GPUAdapter.limits-Wert vonmaxBindGroupsab, um zu prüfen, ob er gleich oder größer als 6 ist. Unsere theoretische Beispielanwendung benötigt idealerweise 6 Bind-Gruppen, daher fügen wir bei einem rückgabewert >= 6 ein maximales Limit von 6 zumrequiredLimits-Objekt hinzu. - Fordern wir ein Gerät mit diesen Funktions- und Limitanforderungen 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