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. Künftige Releases enthalten Funktionen wie Verbesserungen bei der Geschwindigkeit der Shaderkompilierung 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 "chromium-experimental-subgroups"-Funktion in einer GPUAdapter verfügbar ist, beantragen Sie eine GPUDevice mit dieser Funktion, um die experimentelle Unterstützung von Untergruppen in WGSL zu erhalten und die minSubgroupSize- und maxSubgroupSize-Limits zu prüfen.

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

  • 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 Ausgangspunkt, um mit den Untergruppen zu experimentieren und ihr Potenzial zu entdecken.

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 Scheiben von 3D-Texturen innerhalb von Renderdurchgängen rendern und so die Funktionen über das gängige 2D-Textur-Rendering hinaus erweitern. So lassen sich beispielsweise voxelbasierte Szenen und Effekte erstellen, indem direkt in 3D-Texturvolumina gerendert wird. Siehe Problem dawn:1020.

Dawn-Updates

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