Neuerungen bei WebGPU (Chrome 125)

François Beaufort
François Beaufort

Die Anzahl der WebGPU-Features scheint diesmal etwas spärlich zu sein, aber einige große Fortschritte stehen bevor! Zukünftige Versionen werden Funktionen wie Verbesserungen der Geschwindigkeit bei der Shader-Kompilierung und Änderungen am asynchronen Modell der Implementierung mit WGPUFuture enthalten.

Untergruppen (Funktion in Entwicklung)

Die Funktion für Untergruppen ermöglicht die Parallelität auf SIMD-Ebene. Dadurch können Threads innerhalb einer Gruppe kommunizieren und kollektive mathematische Operationen ausführen (z. B. das Berechnen der Summe von 16 Zahlen). Dies bietet eine hocheffiziente Form der Thread-übergreifenden Datenfreigabe.

Untergruppenvorgänge werden von modernen GPU-APIs unterstützt, aber Benennungs- und Implementierungsdetails variieren. Das Chrome-Team hat die Gemeinsamkeiten identifiziert und arbeitet derzeit an einer Standardisierung dieser Funktion. Sehen Sie sich den Vorschlag und den Kommentar an, falls Sie Fragen haben.

Das Flag „Experimental Web Platform Features“ bei chrome://flags/#enable-experimental-web-platform-features steckt nur in minimaler und nicht standardisierter Implementierung von Untergruppen. So können Entwickler es ausprobieren und Feedback geben, da die Vorteile in der Praxis im Kontext von WebGPU 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 ihre Beschränkungen für minSubgroupSize und maxSubgroupSize zu prüfen.

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

  • subgroup_invocation_id: Ein integrierter Wert für den Index des Threads innerhalb der Untergruppe.
  • subgroup_size: Ein integrierter Wert für den Zugriff auf die Untergruppengröße.
  • subgroupBallot(value): gibt eine Reihe von Bitfeldern zurück, bei denen das Bit, das subgroup_invocation_id entspricht, 1 ist, wenn value für diesen aktiven Aufruf wahr ist, und andernfalls 0.
  • subgroupBroadcast(value, id): Sendet die value aus dem Aufruf mit subgroup_invocation_id, die id entspricht, an alle Aufrufe in der Untergruppe. Hinweis: id muss eine Compile-Zeitkonstante sein.

Das folgende Code-Snippet dient als Basis zum Tüfteln 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 Slice der 3D-Textur rendern

Mit dem neuen depthSlice-Element in GPURenderPassColorAttachment können Sie jetzt direkt in Slices von 3D-Texturen innerhalb von Renderingdurchläufen rendern. Damit stehen Ihnen erweiterte Funktionen zur Verfügung, die über das übliche 2D-Texturrendering hinausgehen. Durch diese Ergänzung können Sie beispielsweise voxel-basierte Szenen und Effekte erstellen, indem Sie sie direkt in 3D-Texturvolumen rendern. Weitere Informationen finden Sie unter Problem dawn:1020.

Updates zum Morgengrauen

Hier finden Sie eine vollständige Liste der Commits.

Neu bei WebGPU

Hier finden Sie eine Liste aller Inhalte, die in der Reihe What's New in WebGPU behandelt wurden.

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