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 Arbeitsspeichers mit Untergruppen-Aufruf-IDs eine Untergruppen-ID rekonstruieren (in der Regel durch atomare Vorgänge), um überlappende Speicherzugriffe zu vermeiden. Jetzt können Sie 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. Beachten Sie, dass es Fälle geben kann, in denen Untergruppen nicht vollständig sind.

Diese Spracherweiterung kann mit navigator.gpu.wgslLanguageFeatures erkannt werden. Es wird empfohlen, mit einer „requires“-Anweisung auf die potenzielle Nichtportierbarkeit hinzuweisen. Verwenden Sie dazu requires subgroup_id; oben im WGSL-Shader-Code. Siehe das folgende Beispiel und die Absicht zur Bereitstellung.

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 Einschränkungen für das Speicherlayout wie Speicherpuffer verwenden. So lassen sich Datenstrukturen einfacher in beiden Arten von Puffern freigeben. Das bedeutet, dass einheitliche Puffer keine 16-Byte-Ausrichtung für Array-Elemente mehr erfordern oder verschachtelte Struktur-Offsets auf ein Vielfaches von 16 Byte auffüllen müssen.

Diese Spracherweiterung kann mit navigator.gpu.wgslLanguageFeatures erkannt werden. Es wird empfohlen, mit einer „requires“-Anweisung auf die potenzielle Nichtportierbarkeit hinzuweisen. Verwenden Sie dazu requires uniform_buffer_standard_layout; oben im WGSL-Shader-Code. Siehe das folgende Beispiel und die Absicht zur Bereitstellung.

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 gute Codepfade genutzt. Weitere Informationen finden Sie unter Problem 442791440.

Schnellere writeBuffer- und writeTexture-Funktionen

writeBuffer() und writeTexture() wurden in Chrome optimiert. Je nach Größe der übertragenen Daten kann die Leistung um bis zu 200 % gesteigert werden. Diese Änderung betrifft auch alle Nutzer der Dawn Wire-Implementierung. Weitere Informationen finden Sie unter Problem 441900745.

Dawn-Updates

Das Android GPU-Team hat die erste Alpha-Version der Kotlin-Bindungen für WebGPU unter Android veröffentlicht, die mit Jetpack verfügbar ist. Mit dem Paket androidx.webgpu können Android-Entwickler mit Kotlin auf eine moderne GPU-API zugreifen. So werden die Legacy-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 Highlights. 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 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