Start · Sprachen · JavaScript · Referenz · GPUCommandEncoder.label

GPUCommandEncoder.label

Eigenschaft

Lesbare und beschreibbare Bezeichnung eines <code>GPUCommandEncoder</code>, mit der er sich in Fehlermeldungen, Warnungen und Debugging-Werkzeugen wiedererkennen lässt.

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

Signatur

GPUCommandEncoder.label

Beschreibung

Die Eigenschaft label ist ein String, den du einem GPUCommandEncoder zuweisen kannst, um ihn eindeutig zu benennen. Der Browser verwendet diese Bezeichnung in Validierungsfehlern (GPUValidationError), in Konsolenwarnungen und in GPU-Debugging-Werkzeugen wie PIX, RenderDoc oder Xcode GPU Capture. So erkennst du sofort, welcher Encoder ein Problem verursacht hat.

Du kannst das Label auf zwei Wegen setzen: direkt beim Erzeugen über das Deskriptor-Feld label von GPUDevice.createCommandEncoder() oder nachträglich durch Zuweisung an encoder.label. Ohne Angabe ist der Wert ein leerer String ("").

Labels ändern das Verhalten der GPU nicht. Sie sind reine Metadaten und lohnen sich vor allem dann, wenn in einem Frame mehrere Encoder zum Einsatz kommen, etwa für Schattenpass, Hauptpass und Nachbearbeitung.

Rückgabewert

Typ
string
Beschreibung
Die aktuelle Bezeichnung des Encoders. Ohne gesetztes Label ist es ein leerer String "". Die Eigenschaft ist les- und beschreibbar.

Beispiele

Label beim Erzeugen 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 encoder = device.createCommandEncoder({ label: 'Hauptpass-Encoder' });
console.log(encoder.label);
Hauptpass-Encoder

Label nachträglich zuweisen

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

const encoder = device.createCommandEncoder();
console.log(JSON.stringify(encoder.label)); // leer

encoder.label = `Frame-${performance.now().toFixed(0)}-Encoder`;
console.log(encoder.label.startsWith('Frame-'));
"" true

Label in Validierungsfehlern wiederfinden

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

device.pushErrorScope('validation');

const encoder = device.createCommandEncoder({ label: 'Nachbearbeitungs-Encoder' });
const pass = encoder.beginComputePass({ label: 'Blur-Pass' });
// Absichtlicher Fehler: dispatch ohne gesetzte Pipeline
pass.dispatchWorkgroups(1);
pass.end();
device.queue.submit([encoder.finish({ label: 'Nachbearbeitungs-Befehle' })]);

const error = await device.popErrorScope();
if (error) {
  // Die Meldung enthält typischerweise die Labels der beteiligten Objekte
  console.warn(error.message);
}
(Implementierungsabhängige Meldung, z. B. mit Verweis auf [ComputePassEncoder "Blur-Pass"] und [CommandEncoder "Nachbearbeitungs-Encoder"])

// Wichtig · Fallstricke

  • Kein Einfluss auf das Rendering: Labels dienen nur der Diagnose. Wie genau Fehlermeldungen formuliert sind, hängt vom Browser ab. Verlass dich also nicht auf ein bestimmtes Format.
  • Label wird nicht vererbt: Das Label des Encoders geht nicht automatisch auf den GPUCommandBuffer über, den finish() liefert. Vergib dort bei Bedarf ein eigenes Label über finish({ label }).
  • Keine sensiblen Daten: Labels können in Fehlerberichten, Absturzprotokollen und Profiling-Mitschnitten auftauchen. Schreib keine Nutzerdaten oder Geheimnisse hinein.
  • Kompatibilität: WebGPU steht nur in sicheren Kontexten (HTTPS) zur Verfügung und ist noch nicht auf allen Plattformen aktiviert. Prüf die Unterstützung vorher mit navigator.gpu.
  • Leistung: Häufiges Neuerzeugen von Label-Strings, etwa pro Frame per Template-String, kostet kaum etwas. In Hochlast-Schleifen kann aber ein festes Label sinnvoller sein.