Start · Sprachen · JavaScript · Referenz · GPUAdapter.limits

GPUAdapter.limits

Eigenschaft

Schreibgeschützte Eigenschaft, die ein <code>GPUSupportedLimits</code>-Objekt mit den maximalen Grenzwerten liefert, die der physische GPU-Adapter unterstützt.

seit JavaScript WebGPU: Chrome/Edge 113+, Safari 26+, Firefox 141+ Kategorie: webapi

Signatur

GPUAdapter.limits

Beschreibung

Die Eigenschaft limits eines GPUAdapter gibt ein GPUSupportedLimits-Objekt zurück. Es beschreibt die höchsten Werte, die der Adapter maximal unterstützt, etwa maxTextureDimension2D, maxBufferSize, maxStorageBufferBindingSize, maxBindGroups oder maxComputeWorkgroupSizeX.

Wichtig ist der Unterschied zwischen Adapter und Gerät: Ein mit adapter.requestDevice() erzeugtes GPUDevice bekommt standardmäßig nicht die Adapter-Grenzwerte, sondern nur die vom WebGPU-Standard garantierten Standardgrenzwerte. Wer höhere Grenzwerte braucht, muss sie über die Option requiredLimits ausdrücklich anfordern. Dabei darf der angeforderte Wert den Wert in adapter.limits nicht überschreiten (bzw. bei Ausrichtungs-Grenzwerten wie minUniformBufferOffsetAlignment nicht unterschreiten).

Typisch nutzt man adapter.limits, um vor dem Erzeugen des Geräts zu prüfen, ob die Hardware z. B. große Texturen oder große Storage-Buffer kann, und um die Anwendung entsprechend anzupassen (Qualitätsstufen, Kachelgrößen, Fallback-Pfade).

Rückgabewert

Typ
GPUSupportedLimits
Beschreibung
Ein schreibgeschütztes Objekt, dessen Eigenschaften (z. B. maxBufferSize, maxTextureDimension2D, maxBindGroups) die vom Adapter unterstützten Grenzwerte als Zahlen enthalten.

Beispiele

Alle Adapter-Grenzwerte ausgeben

const adapter = await navigator.gpu?.requestAdapter();
if (!adapter) {
  throw new Error('WebGPU wird nicht unterstützt.');
}

// GPUSupportedLimits hat Getter auf dem Prototyp – daher for...in statt Object.keys
const limits = {};
for (const key in adapter.limits) {
  limits[key] = adapter.limits[key];
}
console.table(limits);
Tabelle mit z. B. maxTextureDimension2D: 16384, maxBindGroups: 4, maxBufferSize: 4294967296 …

Höhere Grenzwerte beim Gerät anfordern

const adapter = await navigator.gpu.requestAdapter();

// Gewünscht: 1 GiB Storage-Buffer, aber höchstens das, was der Adapter kann
const wanted = 1024 * 1024 * 1024;
const maxStorage = Math.min(wanted, adapter.limits.maxStorageBufferBindingSize);

const device = await adapter.requestDevice({
  requiredLimits: {
    maxStorageBufferBindingSize: maxStorage,
    maxBufferSize: Math.min(wanted, adapter.limits.maxBufferSize)
  }
});

console.log('Adapter:', adapter.limits.maxStorageBufferBindingSize);
console.log('Gerät:  ', device.limits.maxStorageBufferBindingSize);
Adapter: 4294967292 Gerät: 1073741824

Texturgröße an die Hardware anpassen

const adapter = await navigator.gpu.requestAdapter();
const maxTex = adapter.limits.maxTextureDimension2D;

// Qualitätsstufe für eine Shadow-Map wählen
const shadowMapSize = maxTex >= 8192 ? 8192 : 4096;

const device = await adapter.requestDevice({
  requiredLimits: { maxTextureDimension2D: shadowMapSize }
});

const shadowMap = device.createTexture({
  size: [shadowMapSize, shadowMapSize],
  format: 'depth32float',
  usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING
});
console.log(`Shadow-Map: ${shadowMapSize}×${shadowMapSize}`);
Shadow-Map: 8192×8192

// Wichtig · Fallstricke

  • Häufigster Fallstrick: adapter.limits gilt nicht automatisch für das Gerät. Ohne requiredLimits erhält GPUDevice nur die Standardgrenzwerte (z. B. maxStorageBufferBindingSize = 128 MiB, maxTextureDimension2D = 8192). Für das tatsächlich nutzbare Budget immer device.limits abfragen.
  • Fordert man in requiredLimits einen Wert an, der über dem Adapter-Grenzwert liegt, wird das Promise von requestDevice() mit einem OperationError abgelehnt. Unbekannte Schlüssel lösen ebenfalls einen Fehler aus.
  • Die Eigenschaften liegen als Getter auf dem Prototyp; JSON.stringify(adapter.limits) und Object.keys() liefern daher ein leeres Ergebnis bzw. {}. Mit for...in auslesen.
  • Aus Datenschutzgründen (Fingerprinting) können Browser die gemeldeten Werte in Stufen runden oder vereinheitlichen, sodass sie nicht exakt der Hardware entsprechen.
  • Kompatibilität: WebGPU ist nur in sicheren Kontexten verfügbar und noch nicht auf allen Plattformen aktiviert. Vorher navigator.gpu prüfen und den Fall behandeln, dass requestAdapter() null zurückgibt.