Start · Sprachen · JavaScript · Referenz · GPURenderBundle.label

GPURenderBundle.label

Eigenschaft

Ein les- und schreibbarer String, der ein <code>GPURenderBundle</code> benennt, z. B. in <code>GPUError</code>-Meldungen, Konsolen-Warnungen und Debugging-Werkzeugen.

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

Signatur

GPURenderBundle.label

Beschreibung

Die Eigenschaft label von GPURenderBundle enthält eine frei wählbare Bezeichnung für ein Render-Bundle. Ein Render-Bundle ist eine vorab aufgezeichnete, wiederverwendbare Folge von Render-Befehlen. Man erzeugt es mit GPURenderBundleEncoder.finish() und spielt es mit GPURenderPassEncoder.executeBundles() in einem Render-Durchgang ab.

Die Bezeichnung hat keinen Einfluss auf das Rendern. Sie dient nur der Fehlersuche: Der Browser zeigt sie in Validierungsfehlern (GPUValidationError), in Konsolen-Warnungen und in Werkzeugen wie PIX, RenderDoc oder Xcode GPU Frame Capture an. Gerade wenn eine Anwendung viele Bundles nutzt (z. B. eins pro Szenen-Objekt oder Materialgruppe), lässt sich so schnell erkennen, welches Bundle einen Fehler verursacht hat.

Man kann das Label auf zwei Wegen setzen: beim Aufruf von finish({ label }) im Deskriptor oder später durch direkte Zuweisung an bundle.label. Wird nichts angegeben, ist der Wert ein leerer String "".

Beispiele

Label beim Abschließen des Bundle-Encoders setzen

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

const bundleEncoder = device.createRenderBundleEncoder({
  label: 'Encoder: Hintergrund',
  colorFormats: [format]
});

// ... hier setPipeline(), setVertexBuffer(), draw() aufrufen ...

const bundle = bundleEncoder.finish({ label: 'Bundle: Hintergrund' });
console.log(bundle.label);
Bundle: Hintergrund

Label nachträglich setzen und auslesen

const bundle = bundleEncoder.finish();
console.log(JSON.stringify(bundle.label)); // noch kein Label

bundle.label = 'Bundle: Bäume (LOD 0)';
console.log(bundle.label);
"" Bundle: Bäume (LOD 0)

Aussagekräftige Labels für Fehlermeldungen

const bundles = ['Gelände', 'Gebäude', 'Fahrzeuge'].map((name) => {
  const enc = device.createRenderBundleEncoder({ colorFormats: [format] });
  // ... Zeichenbefehle für das jeweilige Objekt aufzeichnen ...
  return enc.finish({ label: `Bundle: ${name}` });
});

device.pushErrorScope('validation');
passEncoder.executeBundles(bundles);
const error = await device.popErrorScope();
if (error) {
  // Die Meldung nennt das betroffene Bundle beim Namen, z. B. "[RenderBundle \"Bundle: Gebäude\"] ..."
  console.error(error.message);
}

// Wichtig · Fallstricke

  • Nur zur Fehlersuche: Das Label ändert nichts am Rendern. Wie genau es in Fehlermeldungen auftaucht, legt jeder Browser selbst fest.
  • Das Label des GPURenderBundleEncoder wird nicht automatisch an das Bundle weitergegeben. Das Bundle muss man in finish() oder per Zuweisung eigens benennen.
  • Keine vertraulichen Daten ins Label schreiben. Es kann in Konsolen-Ausgaben, Absturzberichten und Aufzeichnungen der Grafik-Werkzeuge landen.
  • Kompatibilität: WebGPU steht nur in sicheren Kontexten (HTTPS) zur Verfügung und wird noch nicht überall unterstützt. Deshalb vorher mit if (!navigator.gpu) prüfen, ob es vorhanden ist. Unter Linux und Android ist die Unterstützung teils eingeschränkt oder hinter Flags versteckt.