Start · Sprachen · JavaScript · Referenz · GPUDevice.adapterInfo

GPUDevice.adapterInfo

Eigenschaft

Nur-Lese-Eigenschaft, die ein <code>GPUAdapterInfo</code>-Objekt mit Angaben zum Adapter liefert, aus dem das <code>GPUDevice</code> erzeugt wurde (Hersteller, Architektur usw.).

seit JavaScript WebGPU; Chromium 136+, noch nicht in allen Browser Kategorie: webapi

Signatur

GPUDevice.adapterInfo

Beschreibung

Die Eigenschaft adapterInfo eines GPUDevice gibt ein GPUAdapterInfo-Objekt zurück. Es beschreibt den physischen oder logischen GPUAdapter, von dem das Gerät mit adapter.requestDevice() angefordert wurde. Der Inhalt entspricht dem, was auch GPUAdapter.info liefert.

Nützlich ist das vor allem dann, wenn Sie in einem Teil Ihres Codes nur noch das GPUDevice haben und nicht mehr den Adapter, etwa in einer Render-Bibliothek, der nur das Gerät übergeben wird. Typische Einsatzzwecke sind:

  • Diagnose und Fehlerberichte: Hersteller und Architektur protokollieren, um gerätespezifische Fehler einzugrenzen.
  • Workarounds: bekannte Treiberprobleme bestimmter Hersteller oder Architekturen umgehen.
  • Leistungsabstimmung: z. B. Workgroup-Größen anhand von subgroupMinSize/subgroupMaxSize wählen oder bei einem Software-Adapter (isFallbackAdapter) die Qualität senken.

Das GPUAdapterInfo-Objekt enthält die Zeichenketten-Eigenschaften vendor, architecture, device und description. Neuere Implementierungen bieten zusätzlich subgroupMinSize, subgroupMaxSize und isFallbackAdapter. Aus Datenschutzgründen dürfen Browser Felder als leere Zeichenkette zurückgeben oder nur grobe Angaben machen. Verlassen Sie sich also nie darauf, dass ein bestimmter Wert vorhanden ist.

Rückgabewert

Typ
GPUAdapterInfo
Beschreibung
Ein Objekt mit den Eigenschaften vendor, architecture, device, description (jeweils string, eventuell leer) sowie, je nach Browser, subgroupMinSize, subgroupMaxSize (number) und isFallbackAdapter (boolean). Die Eigenschaft ist schreibgeschützt.

Beispiele

Adapter-Infos über das Gerät auslesen

const init = async () => {
  if (!navigator.gpu) {
    throw new Error('WebGPU wird nicht unterstützt.');
  }
  const adapter = await navigator.gpu.requestAdapter();
  if (!adapter) throw new Error('Kein passender GPU-Adapter gefunden.');

  const device = await adapter.requestDevice();
  const { vendor, architecture, device: gerät, description } = device.adapterInfo;

  console.log(`Hersteller: ${vendor || 'unbekannt'}`);
  console.log(`Architektur: ${architecture || 'unbekannt'}`);
  console.log(`Gerät: ${gerät || 'unbekannt'}`);
  console.log(`Beschreibung: ${description || 'unbekannt'}`);
};

init().catch(console.error);
Hersteller: nvidia Architektur: ampere Gerät: unbekannt Beschreibung: unbekannt

Bibliothek, der nur das GPUDevice übergeben wird

// Eine Render-Funktion hat keinen Zugriff auf den Adapter, nur auf das Gerät
const createRenderer = (device) => {
  const info = device.adapterInfo;
  const istSoftware = info.isFallbackAdapter ?? false;

  return {
    qualitaet: istSoftware ? 'niedrig' : 'hoch',
    hersteller: info.vendor || 'unbekannt',
  };
};

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
console.log(createRenderer(device));
{ qualitaet: 'hoch', hersteller: 'intel' }

Fallback für ältere Browser ohne adapterInfo

const getAdapterInfo = (device, adapter) => {
  // Neuer Weg: direkt über das Gerät
  if ('adapterInfo' in device) return device.adapterInfo;
  // Älterer Weg: über den Adapter (GPUAdapter.info)
  if (adapter && 'info' in adapter) return adapter.info;
  return null;
};

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const info = getAdapterInfo(device, adapter);

// Workgroup-Größe an die Subgroup-Größe anpassen, falls bekannt
const workgroupSize = info?.subgroupMaxSize ?? 64;
console.log('Workgroup-Größe:', workgroupSize);
Workgroup-Größe: 32

// Wichtig · Fallstricke

  • Browser-Kompatibilität: GPUDevice.adapterInfo ist neuer als GPUAdapter.info und nicht überall verfügbar. Prüfen Sie mit 'adapterInfo' in device und greifen Sie sonst auf adapter.info zurück. WebGPU selbst setzt einen sicheren Kontext (HTTPS) voraus und ist in Firefox und Safari erst teilweise oder auf bestimmten Plattformen aktiviert.
  • Veraltete API: Die frühere asynchrone Methode GPUAdapter.requestAdapterInfo() wurde aus der Spezifikation entfernt. Verwenden Sie stattdessen adapter.info bzw. device.adapterInfo.
  • Datenschutz: Browser können Werte absichtlich verallgemeinern oder leer lassen, damit sie nicht zum Fingerprinting taugen. Nutzen Sie die Werte nur als Hinweis, nicht zur sicheren Erkennung eines Geräts. Das Format der Zeichenketten (z. B. Groß-/Kleinschreibung bei vendor) ist nicht vorgeschrieben.
  • Feature-Erkennung statt Hersteller-Weiche: Wenn es um verfügbare Fähigkeiten geht, prüfen Sie device.features und device.limits. Auf Hersteller-Zeichenketten sollten Sie sich nicht verlassen.
  • Die Eigenschaft ist auch dann noch lesbar, wenn das Gerät verloren gegangen ist (device.lost).