Signatur
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/subgroupMaxSizewä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
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);
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));
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);
// Wichtig · Fallstricke
- Browser-Kompatibilität:
GPUDevice.adapterInfoist neuer alsGPUAdapter.infound nicht überall verfügbar. Prüfen Sie mit'adapterInfo' in deviceund greifen Sie sonst aufadapter.infozurü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 stattdessenadapter.infobzw.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.featuresunddevice.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).