Neuigkeiten bei WebGPU (Chrome 149–150)

François Beaufort
François Beaufort

Veröffentlicht am 17. Juni 2026

Sofort

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 Bindungen für einheitliche Puffer für Daten, die sich bei jedem Zeichenbefehl ändern, z. B. eine eindeutige Objekt-ID oder eine 3D-Transformationsmatrix für Hunderte von Objekten, führt zu CPU-Aufwand. Sie können Rohwerte direkt in den Pass-Encoder einfügen, 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 einheitliche Puffer oder Speicherpuffer für große Datenarrays, komplexe Beleuchtungsstrukturen oder massive Matrizen.

Im WGSL-Shader können Sie mit dem Adressraum <immediate> Immediate-Daten definieren, die direkt an den Pass-Encoder übergeben werden können. Rufen Sie setImmediates() in JavaScript vor einem Zeichenaufruf auf, um diese Daten bereitzustellen, ohne eine Gruppe zu binden. Um die Unterstützung zu prüfen, erkennen Sie die immediate_address_space-WGSL-Spracherweiterung über navigator.gpu.wgslLanguageFeatures. 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

Mit WebGPU wurde kürzlich das Flag TRANSIENT_ATTACHMENT GPUTextureUsage eingeführt, mit dem Entwickler temporäre Render-Attachments wie Depth-Stencil-Puffer oder Multisample-Ziele erstellen können. Diese Anhänge verbleiben im schnellen On-Chip-Tile-Speicher, ohne dass Haupt-VRAM zugewiesen wird.

In den letzten Updates (#6248 und #6267) wurden die Validierungsregeln verfeinert, um einen Missbrauch dieser speichereffizienten Textur-Attachments 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 Rendern verwendet werden.
  • Durch das Erstellen einer Texturansicht werden die Nutzungsflags nicht eingeschränkt. Wenn createView() für eine temporäre Textur aufgerufen wird, kann die Ansicht ihre Verwendung nicht ändern.
  • Temporäre Anhänge können nicht als resolveTarget in einem Renderpass verwendet werden.

Aktualisierungen bei Sonnenaufgang

Dies sind nur einige der wichtigsten Neuerungen. Vollständige Liste der Commits

Neuigkeiten zu WebGPU

Eine Liste aller Themen, die in der Reihe What's New in WebGPU behandelt wurden.

Chrome 153–154

Chrome 151–152

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