Start · Sprachen · JavaScript · Referenz · GPUPipelineLayout.label

GPUPipelineLayout.label

Eigenschaft

Lesbarer und schreibbarer Bezeichner eines <code>GPUPipelineLayout</code>, mit dem das Objekt in <code>GPUError</code>-Meldungen, Konsolenwarnungen und Debugging-Werkzeugen erkennbar ist.

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

Signatur

GPUPipelineLayout.label

Beschreibung

Die Eigenschaft label des Interfaces GPUPipelineLayout enthält eine frei wählbare Zeichenkette, die das Pipeline-Layout identifiziert. Browser verwenden das Label in Validierungsfehlern (GPUValidationError), in Konsolenwarnungen und in GPU-Debugging-Werkzeugen. So sieht man sofort, welches Layout Probleme macht, statt nur „ein GPUPipelineLayout“ zu lesen.

Normalerweise setzt man das Label schon beim Erzeugen über die Eigenschaft label im Deskriptor von GPUDevice.createPipelineLayout(). Man kann es aber auch nachträglich lesen oder überschreiben, weil die Eigenschaft nicht schreibgeschützt ist.

Das Label hat keinen Einfluss auf das Rendering oder auf Berechnungen. Es dient nur der Fehlersuche. Gerade bei Anwendungen mit vielen Pipelines und Bind-Group-Layouts lohnt es sich, einheitliche Namen zu vergeben, zum Beispiel "layout:pbr-material".

Rückgabewert

Typ
string
Beschreibung
Das aktuelle Label des Pipeline-Layouts. Ohne gesetztes Label ist es ein leerer String "".

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 bindGroupLayout = device.createBindGroupLayout({
  label: 'bgl:kamera',
  entries: [{
    binding: 0,
    visibility: GPUShaderStage.VERTEX,
    buffer: { type: 'uniform' }
  }]
});

const pipelineLayout = device.createPipelineLayout({
  label: 'layout:szene',
  bindGroupLayouts: [bindGroupLayout]
});

console.log(pipelineLayout.label);
layout:szene

Label nachträglich ändern

const pipelineLayout = device.createPipelineLayout({
  bindGroupLayouts: []
});

console.log(JSON.stringify(pipelineLayout.label)); // noch kein Label

pipelineLayout.label = 'layout:postprocessing';
console.log(pipelineLayout.label);
"" layout:postprocessing

Label in Validierungsfehlern wiederfinden

device.pushErrorScope('validation');

// Absichtlich fehlerhaft: der Shader erwartet @group(0), das Layout hat aber keine Bind Groups
const emptyLayout = device.createPipelineLayout({
  label: 'layout:leer-fehlerhaft',
  bindGroupLayouts: []
});

const module = device.createShaderModule({
  code: `
    @group(0) @binding(0) var<storage, read_write> data: array<f32>;
    @compute @workgroup_size(1) fn main() { data[0] = 1.0; }
  `
});

device.createComputePipeline({
  label: 'pipeline:test',
  layout: emptyLayout,
  compute: { module, entryPoint: 'main' }
});

const error = await device.popErrorScope();
if (error) {
  // Die Meldung nennt je nach Browser auch 'layout:leer-fehlerhaft'
  console.warn(error.message);
}
(browserabhängige Fehlermeldung, die [PipelineLayout "layout:leer-fehlerhaft"] erwähnt)

// Wichtig · Fallstricke

  • Nur zur Fehlersuche: Das Label ändert nichts am Verhalten der GPU. Verlasse dich in der Programmlogik nicht darauf, zum Beispiel zum Vergleichen von Objekten.
  • Format der Fehlermeldungen: Wie und ob das Label in Meldungen auftaucht, legt der Browser fest (Chrome zeigt etwa [PipelineLayout "name"]). Werte error.message deshalb nicht maschinell aus.
  • Keine sensiblen Daten: Labels können in Konsolenausgaben, Absturzberichten und Debugging-Werkzeugen erscheinen.
  • Kompatibilität: WebGPU steht nur in sicheren Kontexten (HTTPS) zur Verfügung und wird noch nicht überall unterstützt. Prüfe vorher mit navigator.gpu, ob die API vorhanden ist.
  • Pipelines mit layout: "auto" bekommen ein implizites Layout. Dafür gibt es kein eigenes GPUPipelineLayout-Objekt, dessen Label man setzen könnte.