Signatur
Beschreibung
Die Eigenschaft label stammt aus dem Mixin GPUObjectBase und ist deshalb auf allen WebGPU-Objekten vorhanden, auch auf einem GPUComputePassEncoder. Sie enthält einen frei wählbaren String, mit dem der Browser das Objekt in Validierungsfehlern, GPUError-Meldungen und Konsolenwarnungen benennt. Ohne Label steht dort nur eine allgemeine Angabe wie „[ComputePassEncoder]“.
Meist setzt man das Label gleich beim Anlegen über das Deskriptor-Feld label von GPUCommandEncoder.beginComputePass(). Man kann es aber auch danach noch über die Eigenschaft lesen oder überschreiben. Wurde kein Label angegeben, ist der Wert ein leerer String "".
Gut gewählte Labels wie "Partikel-Simulation" oder "Blur-Pass horizontal" helfen bei der Fehlersuche sehr, sobald ein Frame mehrere Compute-Passes nacheinander ausführt. Auch GPU-Debugger und Profiler (z. B. PIX, RenderDoc, Xcode GPU Frame Capture oder die Chrome-Entwicklertools) zeigen diese Namen je nach Implementierung an.
Rückgabewert
"". Die Eigenschaft lässt sich lesen und schreiben.Beispiele
Label beim Anlegen per Deskriptor setzen und auslesen
const adapter = await navigator.gpu?.requestAdapter();
if (!adapter) throw new Error('WebGPU wird nicht unterstützt');
const device = await adapter.requestDevice();
const commandEncoder = device.createCommandEncoder({ label: 'Frame-Encoder' });
const passEncoder = commandEncoder.beginComputePass({
label: 'Partikel-Simulation'
});
console.log(passEncoder.label);
passEncoder.end();
device.queue.submit([commandEncoder.finish()]);
Label nachträglich über die Eigenschaft setzen
const device = await (await navigator.gpu.requestAdapter()).requestDevice();
const commandEncoder = device.createCommandEncoder();
const passEncoder = commandEncoder.beginComputePass();
console.log(JSON.stringify(passEncoder.label)); // noch kein Label
passEncoder.label = 'Histogramm-Berechnung';
console.log(passEncoder.label);
passEncoder.end();
device.queue.submit([commandEncoder.finish()]);
Label in einer Validierungsfehlermeldung wiederfinden
const device = await (await navigator.gpu.requestAdapter()).requestDevice();
device.pushErrorScope('validation');
const commandEncoder = device.createCommandEncoder();
const passEncoder = commandEncoder.beginComputePass({ label: 'Blur-Pass horizontal' });
// Fehler: dispatch ohne gesetzte Pipeline
passEncoder.dispatchWorkgroups(8, 8);
passEncoder.end();
device.queue.submit([commandEncoder.finish()]);
const error = await device.popErrorScope();
if (error) {
// Die Meldung nennt den Pass beim Namen, z. B. [ComputePassEncoder "Blur-Pass horizontal"]
console.warn(error.message);
}
// Wichtig · Fallstricke
- Nur zum Debuggen: Das Label hat keinen Einfluss auf die Ausführung oder die Performance. Es ist ein reines Hilfsmittel zur Fehlersuche und muss nicht eindeutig sein.
- Uneinheitliche Meldungen: Wie die Fehlermeldungen formuliert und formatiert sind, legt jeder Browser selbst fest. Parse sie deshalb nicht maschinell.
- Nach
end(): Das Label bleibt auch nachpassEncoder.end()lesbar. Der Encoder selbst lässt sich dann aber nicht mehr verwenden. - Kein Schutz für sensible Daten: Labels können in Konsolenausgaben, Fehlerberichten und Debugging-Werkzeugen auftauchen. Schreib deshalb keine Nutzerdaten oder Geheimnisse hinein.
- Kompatibilität: WebGPU gibt es nur in einem sicheren Kontext (HTTPS). Chrome und Edge unterstützen es ab Version 113. In Firefox und Safari ist die Unterstützung neuer und hängt teils vom Betriebssystem ab. Prüfe vorher mit
navigator.gpu, ob die API vorhanden ist.