Neuigkeiten bei WebGPU (Chrome 149–150)

François Beaufort
François Beaufort

Veröffentlicht am 17. Juni 2026

Immediates

Mit Immediates, auch Push-Konstanten oder Root-Konstanten genannt, können Sie kleine Mengen häufig geänderter Daten direkt an Shader übergeben. Dadurch wird der Aufwand für das Erstellen von GPU-Puffern und das Verwalten von Bindungsgruppen umgangen.

Das Aktualisieren von Uniform-Pufferbindungen für Daten, die sich bei jedem Zeichenaufruf ändern, z. B. eine eindeutige Objekt-ID oder eine 3D-Transformationsmatrix für Hunderte von Objekten, verursacht CPU-Overhead. Fügen Sie Rohwerte direkt in den Pass-Encoder ein, um zu vermeiden, dass Daten in den Arbeitsspeicher geschrieben und GPU-Lookups verwaltet werden müssen.

Immediates bieten einen schnellen Pfad für kleine, hochdynamische Variablen. Verwenden Sie Uniform-Puffer oder Speicherpuffer für große Datenarrays, komplexe Beleuchtungsstrukturen oder massive Matrizen.

Im WGSL-Shader können Sie mit dem Adressraum <immediate> sofortige Daten definieren, die direkt an den Pass-Encoder übergeben werden können. Rufen Sie setImmediates() in JavaScript vor einem Zeichenaufruf auf, um diese Daten ohne Bindung einer Gruppe bereitzustellen. Um die Unterstützung zu prüfen, können Sie die WGSL-Spracherweiterung immediate_address_space über navigator.gpu.wgslLanguageFeatures erkennen. Sehen Sie sich das folgende Beispiel und die Absicht zur Auslieferung an.

if (!navigator.gpu.wgslLanguageFeatures.has('immediate_address_space')) {
   throw new Error(`WGSL immediate address space is not available`);
}

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

const module = device.createShaderModule({ code: `
  requires immediate_address_space;

  var<immediate> color: vec4f;

  @vertex fn vertexMain(@builtin(vertex_index) i : u32) -> @builtin(position) vec4f {
    const pos = array(vec2f(0, 1), vec2f(-1, -1), vec2f(1, -1));
    return vec4f(pos[i], 0, 1);
  }

  @fragment fn fragmentMain() -> @location(0) vec4f {
    return color;
  }`,
});

// Create render pass encoder (omitted)...

// By using layout: 'auto', WebGPU will automatically infer the `immediateSize`
// required by the pipeline layout from the WGSL module.
const pipeline = device.createRenderPipeline({
  layout: 'auto',
  vertex: { module },
  fragment: { module, targets: [{ format }] },
});
myRenderPassEncoder.setPipeline(pipeline);

// Send immediate data to the GPU, then issue a draw call
myRenderPassEncoder.setImmediates(/*rangeOffset=*/0, new Float32Array([255, 0, 0, 255]));
myRenderPassEncoder.draw(3);
myRenderPassEncoder.end();

Weitere Informationen zu dieser Funktion finden Sie unter WebGPUFundamentals Immediates.

Vielen Dank an das Team von Microsoft für seine Beiträge.

Strengere Validierung für temporäre Anhänge

In WebGPU wurde vor Kurzem das TRANSIENT_ATTACHMENT GPUTextureUsage-Flag eingeführt, mit dem Entwickler temporäre Renderanhänge wie Tiefen-Stencil-Puffer oder Multisample-Ziele erstellen können. Diese Anhänge bleiben im schnellen On-Chip-Tile-Speicher, ohne dass Haupt-VRAM zugewiesen werden muss.

Mit den letzten Updates (#6248 und #6267) werden die Validierungsregeln verfeinert, um den Missbrauch dieser speichereffizienten Texturanhänge zu verhindern:

  • Aufgrund von Plattformbeschränkungen muss viewFormats beim Erstellen temporärer Texturen ein leeres Array sein. Alternative Ansichtsformate sind nicht erforderlich, da temporäre Texturen nur für das Rendering verwendet werden.
  • Durch das Erstellen einer Texturansicht werden die Nutzungsflags nicht eingeschränkt. Wenn Sie createView() für eine temporäre Textur aufrufen, kann die Ansicht ihre Verwendung nicht ändern.
  • Temporäre Anhänge können in einem Renderpass nicht als resolveTarget verwendet werden.

Dawn-Updates

Hier werden nur einige der wichtigsten Highlights behandelt. Eine vollständige Liste der Commits finden Sie hier.

Neues in WebGPU

Eine Liste aller Themen, die in der Reihe „Neues in WebGPU“ behandelt wurden.

Chrome 149–150

Chrome 147–148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113