Start · Sprachen · JavaScript · Referenz · GPUCommandBuffer.label

GPUCommandBuffer.label

Eigenschaft

Lesbarer und schreibbarer String, der einem <code>GPUCommandBuffer</code> einen Namen gibt, etwa für Fehlermeldungen, Warnungen und Debugging-Werkzeuge.

seit JavaScript WebGPU – Chrome/Edge 113+, Firefox 141+ (Windows), Kategorie: webapi

Signatur

GPUCommandBuffer.label

Beschreibung

Die Eigenschaft label von GPUCommandBuffer enthält einen frei wählbaren Text, mit dem sich ein bestimmter Befehlspuffer erkennen lässt. Der Browser verwendet diesen Namen in Meldungen von GPUError, in Konsolenwarnungen, in Validierungsfehlern und in GPU-Debugging-Werkzeugen wie PIX, RenderDoc oder Xcode GPU Capture.

Man kann das Label auf zwei Arten setzen: direkt beim Abschließen der Aufzeichnung über den Deskriptor von GPUCommandEncoder.finish({ label }) oder nachträglich durch eine Zuweisung an commandBuffer.label. Ohne Angabe ist der Wert ein leerer String "".

Wenn mehrere Befehlspuffer pro Frame erzeugt werden, zum Beispiel für einen Schatten-Pass, den Haupt-Render-Pass und die Nachbearbeitung, helfen eindeutige Labels sehr: Scheitert GPUQueue.submit() an einer Validierung, zeigt die Fehlermeldung, welcher Puffer betroffen ist.

Rückgabewert

Typ
string
Beschreibung
Das aktuelle Label des Befehlspuffers. Ohne Angabe ist es ein leerer String "".

Beispiele

Label über den finish()-Deskriptor setzen

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

const encoder = device.createCommandEncoder({ label: 'frame-encoder' });
// ... Render- oder Compute-Passes aufzeichnen ...
const commandBuffer = encoder.finish({ label: 'frame-command-buffer' });

console.log(commandBuffer.label);
device.queue.submit([commandBuffer]);
frame-command-buffer

Label nachträglich zuweisen und auslesen

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

const commandBuffer = device.createCommandEncoder().finish();
console.log(JSON.stringify(commandBuffer.label)); // Standardwert

commandBuffer.label = 'postprocessing-pass';
console.log(commandBuffer.label);
"" postprocessing-pass

Labels in Fehlermeldungen zur Fehlersuche nutzen

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

device.pushErrorScope('validation');

const encoder = device.createCommandEncoder({ label: 'shadow-encoder' });
const cb = encoder.finish({ label: `shadow-pass #${performance.now().toFixed(0)}` });
device.queue.submit([cb]);
// Ein zweites Absenden desselben Puffers ist ungültig
device.queue.submit([cb]);

const error = await device.popErrorScope();
if (error) {
  // Die Meldung enthält typischerweise das Label, z. B. [CommandBuffer "shadow-pass #..."]
  console.warn(error.message);
}
Validierungsfehler, der das Label "shadow-pass #…" nennt (der genaue Text hängt vom Browser ab)

// Wichtig · Fallstricke

  • Nur zur Fehlersuche: Das Label hat keinen Einfluss darauf, wie Befehle ausgeführt werden. Wie und ob es in Meldungen erscheint, hängt vom Browser ab.
  • Einmal verwendbar: Ein GPUCommandBuffer kann nur ein einziges Mal abgesendet werden. Das Label bleibt danach lesbar, aber der Puffer lässt sich nicht erneut verwenden.
  • Keine sensiblen Daten: Labels können in Konsolenausgaben und Debugging-Werkzeugen erscheinen. Speichere dort also keine vertraulichen Informationen.
  • Kompatibilität: WebGPU steht nur in sicheren Kontexten (HTTPS) zur Verfügung und ist noch nicht in allen Browsern bzw. auf allen Plattformen aktiviert. Prüfe vorher mit if (!navigator.gpu) { … }, ob es verfügbar ist.
  • Die Eigenschaft stammt aus dem Mixin GPUObjectBase und funktioniert bei allen WebGPU-Objekten gleich, etwa bei GPUBuffer, GPUTexture oder GPUCommandEncoder.