Start · Sprachen · JavaScript · Referenz · GPUDevice.limits

GPUDevice.limits

Eigenschaft

Schreibgeschützte Eigenschaft, die ein <code>GPUSupportedLimits</code>-Objekt mit den tatsächlich gültigen Ressourcengrenzen des logischen GPU-Geräts liefert.

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

Signatur

GPUDevice.limits

Beschreibung

Die Eigenschaft limits eines GPUDevice liefert ein GPUSupportedLimits-Objekt. Es enthält die Grenzwerte, die für dieses logische Gerät gelten, etwa maxTextureDimension2D, maxBufferSize, maxBindGroups, maxComputeWorkgroupSizeX oder maxStorageBufferBindingSize.

Wichtig ist der Unterschied zu GPUAdapter.limits: Der Adapter meldet, was die Hardware höchstens kann. Das Gerät hat dagegen nur die Grenzen, die beim Aufruf von adapter.requestDevice() über requiredLimits angefordert wurden. Alles, was nicht angefordert wurde, steht auf den Standardwerten der WebGPU-Spezifikation. Das ist Absicht: So verhält sich eine Anwendung auf verschiedenen Geräten gleich, und es werden weniger Merkmale für Fingerprinting preisgegeben.

Nutzen Sie device.limits, bevor Sie Puffer, Texturen oder Compute-Dispatches anlegen. Dann bleiben Größen und Workgroup-Dimensionen innerhalb der Grenzen, und Sie bekommen keine Validierungsfehler. Das Objekt ist schreibgeschützt. Um andere Grenzen zu bekommen, müssen Sie ein neues Gerät anfordern.

Rückgabewert

Typ
GPUSupportedLimits
Beschreibung
Ein schreibgeschütztes Objekt, dessen Eigenschaften (z. B. maxBufferSize, maxBindGroups) als number die gültigen Grenzen des Geräts angeben.

Beispiele

Grenzen des Geräts auslesen

const adapter = await navigator.gpu?.requestAdapter();
if (!adapter) throw new Error('WebGPU nicht verfügbar');
const device = await adapter.requestDevice();

console.log('Max. 2D-Textur:', device.limits.maxTextureDimension2D);
console.log('Max. Bind Groups:', device.limits.maxBindGroups);
console.log('Max. Puffergröße:', device.limits.maxBufferSize);
Max. 2D-Textur: 8192 Max. Bind Groups: 4 Max. Puffergröße: 268435456

Höhere Grenzen anfordern und prüfen

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

// Nur so viel anfordern, wie der Adapter auch hergibt
const wanted = 1024 * 1024 * 1024; // 1 GiB
const device = await adapter.requestDevice({
  requiredLimits: {
    maxBufferSize: Math.min(wanted, adapter.limits.maxBufferSize),
    maxStorageBufferBindingSize: Math.min(wanted, adapter.limits.maxStorageBufferBindingSize)
  }
});

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

Puffergröße und Workgroup-Größe an die Grenzen anpassen

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const { maxBufferSize, maxComputeWorkgroupSizeX, maxComputeInvocationsPerWorkgroup } = device.limits;

const requestedBytes = 512 * 1024 * 1024;
const size = Math.min(requestedBytes, maxBufferSize);

const buffer = device.createBuffer({
  size,
  usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST
});

const workgroupSize = Math.min(256, maxComputeWorkgroupSizeX, maxComputeInvocationsPerWorkgroup);
console.log(`Puffer: ${buffer.size} Bytes, Workgroup-Größe: ${workgroupSize}`);
Puffer: 268435456 Bytes, Workgroup-Größe: 256

// Wichtig · Fallstricke

  • Standardwerte statt Hardwarewerte: Ohne requiredLimits liefert device.limits nur die Standardwerte der Spezifikation (z. B. maxBufferSize = 256 MiB), auch wenn die Hardware mehr kann. Die tatsächlichen Hardware-Grenzen stehen in adapter.limits.
  • Fordern Sie in requiredLimits mehr an, als der Adapter hergibt, wird das Promise von requestDevice() mit einem OperationError abgelehnt. Begrenzen Sie die Werte deshalb vorher mit adapter.limits.
  • Bei Grenzen vom Typ min* (z. B. minUniformBufferOffsetAlignment) ist ein kleinerer Wert „besser“. Dort sind die Vergleiche also umgekehrt.
  • Die Werte kommen als number zurück. Sehr große Grenzen wie maxBufferSize können über 2³² liegen. Rechnen Sie also nicht mit 32-Bit-Integer-Operationen (|0) weiter.
  • WebGPU gibt es nur in sicheren Kontexten (HTTPS) und noch nicht in allen Browsern. Prüfen Sie vorher, ob navigator.gpu vorhanden ist.