Start · Sprachen · JavaScript · Referenz · GPUAdapterInfo

GPUAdapterInfo

Schnittstelle

Enthält identifizierende Informationen über einen <code>GPUAdapter</code> wie Hersteller, Architektur, Gerät und Beschreibung. Abrufbar über <code>GPUAdapter.info</code> oder <code>GPUDevice.adapterInfo</code>.

seit JavaScript WebGPU; Chrome/Edge 113+ (Eigenschaft GPUAdapter.i Kategorie: webapi

Signatur

interface GPUAdapterInfo

Beschreibung

GPUAdapterInfo ist ein schreibgeschütztes Objekt der WebGPU API. Es beschreibt den physischen oder softwarebasierten Grafikadapter, den der Browser über navigator.gpu.requestAdapter() bereitstellt. Einen eigenen Konstruktor gibt es nicht. Das Objekt bekommst du synchron über die Eigenschaft GPUAdapter.info oder, bei einem bereits angeforderten Gerät, über GPUDevice.adapterInfo.

Diese Eigenschaften sind verfügbar (alle schreibgeschützt):

  • vendor: Name des Herstellers, z. B. "nvidia", "amd", "intel", "apple"
  • architecture: GPU-Familie oder -Klasse, z. B. "ampere" oder "gen-12lp"
  • device: herstellerspezifische Gerätekennung
  • description: lesbare Beschreibung, wie sie der Treiber liefert
  • subgroupMinSize / subgroupMaxSize: kleinste und größte unterstützte Subgroup-Größe (nur für die Subgroups-Funktion relevant, neuere Browser)
  • isFallbackAdapter: true, wenn es sich um einen Software-Adapter mit geringer Leistung handelt (ersetzt GPUAdapter.isFallbackAdapter)

Nutze die Informationen zur Diagnose (Logs, Fehlerberichte), für gezielte Workarounds bei bekannten Treiberfehlern oder für eine grobe Wahl der Qualitätsstufe. Für die Erkennung von Funktionen solltest du dich dagegen immer auf adapter.features und adapter.limits verlassen, nicht auf Herstellernamen.

Parameter

Name Typ Default Beschreibung
$vendor string "" Eigenschaft: Name des Herstellers des Adapters. Kann aus Datenschutzgründen ein leerer String sein.
$architecture string "" Eigenschaft: GPU-Familie bzw. Architektur innerhalb des Herstellers. Kann leer sein.
$device string "" Eigenschaft: herstellerspezifische Gerätekennung. Meistens leer.
$description string "" Eigenschaft: lesbare Beschreibung des Adapters durch den Treiber. Meistens leer.
$subgroupMinSize number Eigenschaft: kleinste unterstützte Subgroup-Größe für Shader mit dem Feature "subgroups".
$subgroupMaxSize number Eigenschaft: größte unterstützte Subgroup-Größe.
$isFallbackAdapter boolean false Eigenschaft: true bei einem Software-/Fallback-Adapter (z. B. SwiftShader).

Beispiele

Adapter-Informationen auslesen

const main = async () => {
  if (!navigator.gpu) {
    console.log('WebGPU wird nicht unterstützt');
    return;
  }
  const adapter = await navigator.gpu.requestAdapter();
  if (!adapter) {
    console.log('Kein passender Adapter gefunden');
    return;
  }
  const { vendor, architecture, device, description } = adapter.info;
  console.log(`Hersteller: ${vendor || 'unbekannt'}`);
  console.log(`Architektur: ${architecture || 'unbekannt'}`);
  console.log(`Gerät: ${device || '-'}, Beschreibung: ${description || '-'}`);
};

main();
Hersteller: nvidia Architektur: ampere Gerät: -, Beschreibung: -

Fallback-Adapter erkennen und Qualität anpassen

const pickQuality = async () => {
  const adapter = await navigator.gpu?.requestAdapter({ powerPreference: 'high-performance' });
  if (!adapter) return 'kein-webgpu';

  // Neuere Browser: info.isFallbackAdapter, ältere: adapter.isFallbackAdapter
  const isFallback = adapter.info.isFallbackAdapter ?? adapter.isFallbackAdapter ?? false;
  return isFallback ? 'niedrig' : 'hoch';
};

pickQuality().then((q) => console.log('Qualitätsstufe:', q));
Qualitätsstufe: hoch

Adapter-Infos am Gerät für Fehlerberichte

const initDevice = async () => {
  const adapter = await navigator.gpu.requestAdapter();
  const device = await adapter.requestDevice();

  device.lost.then((lostInfo) => {
    // GPUDevice.adapterInfo steht auch später noch zur Verfügung
    const info = device.adapterInfo ?? adapter.info;
    console.error('GPU-Gerät verloren:', lostInfo.reason, {
      vendor: info.vendor,
      architecture: info.architecture
    });
  });

  return device;
};

initDevice();

Kompatibilität mit dem alten requestAdapterInfo()

const getAdapterInfo = async (adapter) => {
  if (adapter.info) return adapter.info;           // aktuell, synchron
  if (adapter.requestAdapterInfo) {
    return adapter.requestAdapterInfo();           // veraltet, asynchron
  }
  return null;
};

const adapter = await navigator.gpu.requestAdapter();
const info = await getAdapterInfo(adapter);
console.log(info?.vendor);
intel

// Wichtig · Fallstricke

  • Datenschutz: Browser geben absichtlich nur grobe Informationen heraus, damit sich Nutzer schlechter per Fingerprinting wiedererkennen lassen. device und description sind häufig leere Strings, auch vendor und architecture können leer sein. Dein Code muss mit leeren Werten zurechtkommen.
  • Keine Funktionserkennung: Leite keine Fähigkeiten aus Hersteller oder Architektur ab. Prüfe stattdessen adapter.features.has(...) und adapter.limits.
  • Veraltete API: Früher gab es GPUAdapter.requestAdapterInfo(), das ein Promise lieferte. Diese Methode ist veraltet und wurde in Chrome entfernt. Verwende GPUAdapter.info (Chrome 127+).
  • subgroupMinSize, subgroupMaxSize und isFallbackAdapter sind neuere Ergänzungen und fehlen in älteren Browsern. Nutze deshalb optionale Verkettung bzw. ??.
  • Kompatibilität: WebGPU funktioniert nur in sicheren Kontexten (HTTPS) und steht auch in Web Workern zur Verfügung. Chromium-Browser unterstützen es ab Version 113, Firefox ab 141 (zunächst nur unter Windows) und Safari ab 26. Unter Linux und Android ist die Unterstützung teils noch eingeschränkt.