Signatur
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ätekennungdescription: lesbare Beschreibung, wie sie der Treiber liefertsubgroupMinSize/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 (ersetztGPUAdapter.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();
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));
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);
// Wichtig · Fallstricke
- Datenschutz: Browser geben absichtlich nur grobe Informationen heraus, damit sich Nutzer schlechter per Fingerprinting wiedererkennen lassen.
deviceunddescriptionsind häufig leere Strings, auchvendorundarchitecturekö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(...)undadapter.limits. - Veraltete API: Früher gab es
GPUAdapter.requestAdapterInfo(), das ein Promise lieferte. Diese Methode ist veraltet und wurde in Chrome entfernt. VerwendeGPUAdapter.info(Chrome 127+). subgroupMinSize,subgroupMaxSizeundisFallbackAdaptersind 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.