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

js
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 von GPUDevice.queue zurückgegeben wird). Dieses Objekt hat eine einzige Eigenschaft — label — die der Standardwarteschlange einen label 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 in GPUError 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. Der requestDevice() Aufruf schlägt fehl, wenn der GPUAdapter diese Funktionen nicht bereitstellen kann. Siehe GPUSupportedFeatures 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. Der requestDevice() Aufruf schlägt fehl, wenn der GPUAdapter diese Limits nicht bereitstellen kann. Jeder Schlüssel muss der Name eines Mitglieds von GPUSupportedLimits sein. Standardmäßig ist dies ein leeres Objekt, wenn kein Wert angegeben wird.

Hinweis: Nicht alle Funktionen und Limits werden in allen Browsern, die WebGPU unterstützen, verfügbar sein, selbst wenn sie durch die zugrunde liegende Hardware unterstützt werden. Weitere Informationen finden Sie auf den Seiten zu features und limits.

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 Eigenschaft requiredLimits enthaltenen Limits nicht vom GPUAdapter 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 Eigenschaft requiredFeatures enthaltenen Funktionen nicht vom GPUAdapter unterstützt werden.

Beispiele

Einfaches Beispiel

js
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:

  1. Überprüfen wir, ob ein GPUAdapter die Funktion texture-compression-astc zur Verfügung hat. Falls ja, fügen wir sie dem Array requiredFeatures hinzu.
  2. Fragen wir den GPUAdapter.limits Wert von maxBindGroups 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 Objekt requiredLimits hinzu, wenn der zurückgegebene Wert >= 6 ist.
  3. Fordern wir ein Gerät mit diesen Feature- und Limit-Anforderungen sowie einem defaultQueue Label an.
js
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