Neuerungen bei WebGPU (Chrome 125)

François Beaufort
François Beaufort

Die Anzahl der WebGPU-Funktionen mag dieses Mal etwas dürftig erscheinen, aber es stehen einige wichtige Fortschritte vor der Tür. Zukünftige Releases enthalten Funktionen wie Verbesserungen der Shader-Kompilierungsgeschwindigkeit und Änderungen am asynchronen Modell der Implementierung mit WGPUFuture.

Untergruppen (Funktion in Entwicklung)

Die Funktion „Untergruppen“ ermöglicht Parallelität auf SIMD-Ebene, sodass Threads innerhalb einer Gruppe miteinander kommunizieren und gemeinsame mathematische Operationen ausführen können, z. B. die Berechnung der Summe von 16 Zahlen. Dies ermöglicht eine äußerst effiziente Form der threadübergreifenden Datenfreigabe.

Untergruppenvorgänge werden von modernen GPU-APIs unterstützt, aber die Benennung und Implementierung variiert. Das Chrome-Team hat die Gemeinsamkeiten identifiziert und arbeitet jetzt daran, diese Funktion zu standardisieren. Weitere Informationen finden Sie im Vorschlag und im Kommentar.

Unter chrome://flags/#enable-experimental-web-platform-features gibt es eine minimale und nicht standardisierte Implementierung von Untergruppen unter dem Flag „Experimental Web Platform Features“ (Experimentelle Webplattformfunktionen), damit Entwickler sie ausprobieren und Feedback geben können, da die Vorteile von WebGPU in der Praxis noch nicht nachgewiesen wurden.

Wenn die Funktion „"chromium-experimental-subgroups"“ in einer GPUAdapter verfügbar ist, fordern Sie mit dieser Funktion eine GPUDevice an, um Unterstützung für experimentelle Untergruppen in WGSL zu erhalten und die Limits für minSubgroupSize und maxSubgroupSize zu prüfen.

Außerdem müssen Sie diese Erweiterung in Ihrem WGSL-Code mit enable chromium_experimental_subgroups explizit aktivieren. Wenn diese Option aktiviert ist, erhalten Sie Zugriff auf die folgenden Ergänzungen:

  • subgroup_invocation_id: Ein vordefinierter Wert für den Index des Threads innerhalb der Untergruppe.
  • subgroup_size: Ein vordefinierter Wert für den Zugriff auf die Größe von Untergruppen.
  • subgroupBallot(value): Gibt eine Reihe von Bitfeldern zurück, bei denen das Bit, das subgroup_invocation_id entspricht, den Wert 1 hat, wenn value für diese aktive Aufrufung wahr ist, andernfalls den Wert 0.
  • subgroupBroadcast(value, id): Überträgt die value aus der Aufrufabfolge mit subgroup_invocation_id, die mit id übereinstimmt, an alle Aufrufe innerhalb der Untergruppe. Hinweis: id muss eine Compile-Zeitkonstante sein.

Das folgende Code-Snippet dient als Grundlage zum Ausprobieren und Entdecken des Potenzials von Untergruppen.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-subgroups")) {
  throw new Error("Experimental subgroups support is not available");
}
// Explicitly request experimental subgroups support.
const device = await adapter.requestDevice({
  requiredFeatures: ["chromium-experimental-subgroups"],
});

const shaderModule = device.createShaderModule({ code: `
  enable chromium_experimental_subgroups;

  @compute @workgroup_size(64) fn main(
      @builtin(global_invocation_id) global_id : vec3u,
      @builtin(subgroup_size) sg_size : u32,
      @builtin(subgroup_invocation_id) sg_id : u32) {
    // TODO: Use subgroupBallot() and subgroupBroadcast().
  }`,
});

In 3D-Textursegment rendern

Mit dem neuen Mitglied depthSlice in einem GPURenderPassColorAttachment können Sie jetzt direkt in 3D-Texturschichten innerhalb von Renderdurchgängen rendern und so die Funktionen über das gängige 2D-Textur-Rendering hinaus erweitern. Mit dieser Ergänzung können Sie beispielsweise Voxel-basierte Szenen und Effekte erstellen, indem Sie sie direkt in 3D-Texturvolumina rendern. Siehe Problem dawn:1020.

Updates zur Morgendämmerung

Eine vollständige Liste der Commits

Das ist neu bei WebGPU

Eine Liste aller Themen, die in der Reihe Was ist neu in WebGPU? behandelt wurden.

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