Neu in WebGPU (Chrome 144)

François Beaufort
François Beaufort

Veröffentlicht am 7. Januar 2026

WGSL-Erweiterung „subgroup_id“

Mit der WGSL-Spracherweiterung subgroup_id können Sie die folgenden neuen integrierten Werte in Arbeitsgruppen verwenden, wenn die Erweiterung subgroups aktiviert ist:

  • subgroup_id: Gibt die ID der Untergruppe eines Aufrufs innerhalb der aktuellen Arbeitsgruppe an.
  • num_subgroups: Gibt die Anzahl der Untergruppen in der Arbeitsgruppe an.

Bisher mussten Sie zum Indexieren des Speichers mit Untergruppen-Aufruf-IDs eine Untergruppen-ID rekonstruieren (in der Regel über atomare Operationen), um sich überschneidende Speicherzugriffe zu vermeiden. Sie können jetzt subgroup_id verwenden, um die andere Hälfte dieser Gleichung zu füllen. Da diese Funktion im D3D-Backend noch nicht verfügbar ist, wird sie dort emuliert. Es sollte sicher sein, eine Entsprechung zu local_invocation_index als subgroup_invocation_id + subgroup_size * subgroup_id zu erstellen. Es kann vorkommen, dass Untergruppen nicht vollständig sind.

Diese Spracherweiterung kann mit navigator.gpu.wgslLanguageFeatures erkannt werden. Es wird empfohlen, eine „requires“-Anweisung zu verwenden, um das Potenzial für Nicht-Portabilität mit requires subgroup_id; oben im WGSL-Shader-Code zu signalisieren. Sehen Sie sich das folgende Beispiel und die Absicht zur Auslieferung an.

if (!navigator.gpu.wgslLanguageFeatures.has("subgroup_id")) {
  throw new Error(`WGSL subgroup_id and num_subgroups built-in values are not available`);
}

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
  throw new Error("Subgroups support is not available");
}
const device = await adapter.requestDevice({ requiredFeatures: ["subgroups"] });

const shaderModule = device.createShaderModule({ code: `
  enable subgroups;
  requires subgroup_id;

  @compute @workgroup_size(64, 1, 1)
  fn main(@builtin(subgroup_id) subgroup_id : u32,
          @builtin(num_subgroups) num_subgroups : u32) {
    // TODO: Use subgroup_id and num_subgroups values.
  }`,
});

WGSL-Erweiterung „uniform_buffer_standard_layout“

Mit der WGSL-Spracherweiterung uniform_buffer_standard_layout können einheitliche Puffer dieselben Speicherlayoutbeschränkungen wie Speicherpuffer verwenden. Dadurch wird es einfacher, Datenstrukturen in beiden Arten von Puffern zu verwenden. Das bedeutet, dass einheitliche Puffer nicht mehr an 16-Byte-Grenzen für Array-Elemente ausgerichtet werden müssen und dass verschachtelte Struktur-Offsets nicht mehr auf ein Vielfaches von 16 Byte aufgefüllt werden müssen.

Diese Spracherweiterung kann mit navigator.gpu.wgslLanguageFeatures erkannt werden. Es wird empfohlen, eine „requires“-Anweisung zu verwenden, um das Potenzial für Nicht-Portabilität mit requires uniform_buffer_standard_layout; oben im WGSL-Shader-Code zu signalisieren. Sehen Sie sich das folgende Beispiel und die Absicht zur Auslieferung an.

if (!navigator.gpu.wgslLanguageFeatures.has("uniform_buffer_standard_layout")) {
  throw new Error(`WGSL uniform buffer standard layout is not available`);
}

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

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

  struct S {
      x: f32
  }
  struct Uniforms {
      a: S,
      b: f32
      // b is at offset 4. Without standard layout, alignment rules would
      // force b to be at offset 16 (or a multiple of 16), and you would have
      // to add extra fields or use an @align attribute.
  }

  @group(0) @binding(0) var<uniform> u: Uniforms;

  @fragment fn fs_main() -> @location(0) vec4<f32> {
      return vec4<f32>(u.a.x);
  }`,
});

WebGPU unter Linux

Das Chrome-Team führt WebGPU für Linux sorgfältig ein. Zuerst werden Intel Gen12+-GPUs unterstützt. Es ist jedoch geplant, die Unterstützung auf weitere Geräte (AMD, NVIDIA) auszuweiten. Bei dieser Implementierung wird eine Architektur verwendet, bei der WebGPU Vulkan nutzt und der Rest von Chromium auf OpenGL bleibt. So werden vorhandene, bekannte und bewährte Codepfade genutzt. Siehe Problem 442791440.

Schnellere writeBuffer- und writeTexture-Funktionen

writeBuffer() und writeTexture() wurden in Chrome optimiert, was je nach Größe der übertragenen Daten zu einer bis zu doppelt so hohen Leistung im Vergleich zur vorherigen Version führt. Diese Änderung betrifft auch alle Nutzer der Dawn Wire-Implementierung. Siehe Problem 441900745.

Dawn-Updates

Das Android-GPU-Team hat die erste Alphaversion von Kotlin-Bindungen für WebGPU unter Android veröffentlicht, die über Jetpack verfügbar sind. Das androidx.webgpu-Paket bietet Android-Entwicklern Zugriff auf eine moderne GPU-API mit Kotlin. So werden die alten Probleme von OpenGL oder die Komplexität von Vulkan umgangen. Das ist eine spannende Entwicklung für das Ökosystem.

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

Neuigkeiten zu WebGPU

Eine Liste aller Themen, die in der Reihe Neu in WebGPU behandelt wurden.

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