Neuigkeiten bei WebGPU (Chrome 153–154)

François Beaufort
François Beaufort

Veröffentlicht: 15. September 2026

WGSL-Erweiterung „buffer_view“

Mit der WGSL-Spracherweiterung buffer_view können die Daten einer Uniform-, Speicher- oder Arbeitsgruppenvariablen als mehrere verschiedene Typen interpretiert werden. Das ist für viele Zwecke nützlich, von der herkömmlichen Typumwandlung bis hin zur Aufteilung einer Variablen in mehrere logische Variablen.

Aus Sicherheitsgründen und zur Vereinfachung der Implementierung kann auf neu interpretierte Typen nur über die folgenden integrierten Funktionen zugegriffen werden:

  • bufferView<T>() interpretiert den Speicher an einem bestimmten Byte-Offset als Zeiger auf den Typ T.
  • Mit bufferArrayView<T>() wird ein Zeiger auf ein Array mit expliziter Elementanzahl erstellt.
  • bufferLength() gibt die Byte-Größe des Puffers zurück.

Diese Spracherweiterung kann in JavaScript mit navigator.gpu.wgslLanguageFeatures erkannt werden. Es wird empfohlen, eine „requires“-Anweisung zu verwenden, um auf die potenzielle Nicht-Portabilität mit requires buffer_view hinzuweisen. Diese Anweisung sollte am Anfang des WGSL-Shader-Codes stehen. Sehen Sie sich das folgende WGSL-Beispiel und die Absicht zur Auslieferung an.

requires buffer_view;

//  +-------------------+-----------------------------+----------------------------+
//  | Byte 0 .. 3       | Byte 4 .. (4 + N - 1)       | Byte (4 + N) .. End        |
//  +-------------------+-----------------------------+----------------------------+
//  | indices_size (u32)| indices (array<u32, count>) | vertices (array<f32>)      |
//  +-------------------+-----------------------------+----------------------------+
@group(0) @binding(0) var<storage> indices_and_vertices : buffer;

fn unpack_and_process_geometry() {
  let indices_size = *bufferView<u32>(&indices_and_vertices, 0);

  let indices = bufferArrayView<array<u32>>(&indices_and_vertices, 4, indices_size);
  let vertices = bufferView<array<f32>>(&indices_and_vertices, indices_size + 4);
  ...
}

Weitere Informationen finden Sie auch im Vorschlag für die Pufferansicht. Sie können auch mit dem Wireframe-WebGPU-Beispiel experimentieren.

WGSL-Erweiterung „swizzle_assignment“

Als Reaktion auf eine der am häufigsten gewünschten Community-Funktionen können Sie mit der WGSL-Erweiterung swizzle_assignment direkt in Vektorschreibvorgänge schreiben und so mehrere Komponenten in einer einzigen Anweisung aktualisieren. Dadurch wird der Boilerplate-Code drastisch reduziert und die Lesbarkeit von Shadern verbessert, während WGSL an andere Shading-Sprachen angeglichen wird.

Diese Spracherweiterung kann in JavaScript mit navigator.gpu.wgslLanguageFeatures erkannt werden. Es wird empfohlen, eine „requires“-Anweisung zu verwenden, um auf die potenzielle Nicht-Portabilität mit requires swizzle_assignment hinzuweisen. Diese Anweisung sollte am Anfang des WGSL-Shader-Codes stehen. Sehen Sie sich das folgende WGSL-Beispiel und die Absicht zur Auslieferung an.

if (!navigator.gpu.wgslLanguageFeatures.has("swizzle_assignment")) {
  throw new Error(`WGSL swizzle assignment is not available`);
}

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

const shaderModule = device.createShaderModule({ code: `
  requires swizzle_assignment;

  @vertex
  fn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {
    var position = vec4f(0.0, 0.0, 0.0, 1.0);
    position.xy = vec2f(10.0, 20.0); // Swizzle assignment

    return position;
  }`,
});

WGSL-Erweiterungsupdates

Die texture-formats-tier1-Spracherweiterung, die zwar in WGSL-Code unterstützt wird, wurde zuvor in JavaScript nicht richtig auf navigator.gpu.wgslLanguageFeatures (als texture_formats_tier1) abgebildet. Dieses Problem mit der Zuordnung wurde behoben. Weitere Informationen finden Sie unter Chromium CL 8159562.

Die subgroups-Spracherweiterung wird jetzt automatisch aktiviert, wenn subgroup_size_control in WGSL aktiviert ist. Siehe Problem dawn:545285663.

Aktualisierungen bei Sonnenaufgang

Mit dem neuen experimentellen Feature wgpu::FeatureName::BufferMapWriteExtendedUsages können Sie einen Puffer mit wgpu::BufferUsage::MapWrite in Kombination mit einem beliebigen anderen wgpu::BufferUsage erstellen, mit Ausnahme von wgpu::BufferUsage::MapRead, um direkt in einen zuordnungsfähigen Puffer zu schreiben, der auch GPU-kompatibel ist. So werden der Staging-Puffer und die zusätzliche Kopie auf Vulkan- und D3D12-Back-Ends vermieden. Weitere Informationen finden Sie unter Buffer Map Write Extended Usages und im Problem dawn:386255678.

Sie können jetzt die webgpu_cpp.h-Bindungen zusätzlich zu jeder webgpu.h-Implementierung verwenden, anstatt durch die Verwendung neuer webgpu_upstream_cpp_headers an die Dawn-Variante gebunden zu sein. Siehe webgpu-headers issue #596.

Für Dawn ist jetzt macOS 13.0 oder höher erforderlich. Siehe Dawn CL 334415.

Dies sind nur einige der wichtigsten Neuerungen. Eine vollständige Liste der Commits finden Sie hier.

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