Signatur
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
"".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);
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);
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);
}
// 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"]). Werteerror.messagedeshalb 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 eigenesGPUPipelineLayout-Objekt, dessen Label man setzen könnte.