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, dassubgroup_invocation_id
entspricht, 1 ist, wennvalue
für diesen aktiven Aufruf wahr ist, und andernfalls 0.subgroupBroadcast(value, id)
: Sendet dievalue
aus dem Aufruf mitsubgroup_invocation_id
, dieid
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
- Schreibgeschützte und nicht schreibgeschützte Speichertexturen
- Unterstützung für Service Worker und Shared Worker
- Neue Attribute für Adapterinformationen
- Diverse Fehlerkorrekturen
- Updates zum Morgengrauen
Chrome 123
- Unterstützung von integrierten Funktionen in DP4a in WGSL
- Uneingeschränkte Zeigerparameter in WGSL
- Syntax für die Dereferenzierung von zusammengesetzten Elementen in WGSL
- Separater schreibgeschützter Status für Schablonen- und Tiefenaspekte
- Updates zum Morgengrauen
Chrome 122
- Reichweite mit Kompatibilitätsmodus erhöhen (Funktion in Entwicklung)
- Limit für „maxVertexAttributes“ erhöhen
- Updates zum Morgengrauen
Chrome 121
- Unterstützung von WebGPU unter Android
- Für die Shader-Kompilierung unter Windows DXC statt FXC verwenden
- Zeitstempelabfragen in Rechen- und Renderingdurchläufen
- Standardeinstiegspunkte für Shader-Module
- display-p3 als GPUExternalTexture-Farbraum unterstützen
- Informationen zum Arbeitsspeicher-Heaps
- Updates zum Morgengrauen
Chrome 120
- Unterstützung von 16-Bit-Gleitkommawerten in WGSL
- Gehe an die Grenzen
- Änderungen am Status der Tiefenschablone
- Aktualisierungen der Adapterinformationen
- Quantisierung von Zeitstempelabfragen
- Frühjahrsputz-Funktionen
Chrome 119
- Filterbare 32-Bit-Float-Texturen
- Vertex-Format „unorm10-10-10-2“
- rgb10a2uint Texturformat
- Updates zum Morgengrauen
Chrome 118
- Unterstützung von HTMLImageElement und ImageData in
copyExternalImageToTexture()
- Experimentelle Unterstützung für nicht schreibgeschützte und schreibgeschützte Speichertexturen
- Updates zum Morgengrauen
Chrome 117
- Nicht festgelegter Vertex-Zwischenspeicher
- Bindungsgruppe aufheben
- Fehler aufgrund asynchroner Pipelineerstellung bei Verlust des Geräts stummschalten
- Updates zur Erstellung von SPIR-V-Shader-Modulen
- Entwicklererfahrung verbessern
- Pipelines mit automatisch generiertem Layout im Cache speichern
- Updates zum Morgengrauen
Chrome 116
- WebCodecs-Integration
- Verlorenes Gerät vom GPUAdapter
requestDevice()
zurückgegeben - Für eine flüssige Videowiedergabe bei
importExternalTexture()
-Aufrufen sorgen - Spezifikationskonformität
- Entwicklererfahrung verbessern
- Updates zum Morgengrauen
Chrome 115
- Unterstützte WGSL-Spracherweiterungen
- Experimentelle Unterstützung für Direct3D 11
- Diskrete GPU standardmäßig mit Netzstrom betreiben
- Entwicklererfahrung verbessern
- Updates zum Morgengrauen
Chrome 114
- JavaScript optimieren
- getCurrentTexture() auf nicht konfiguriertem Canvas wirft InvalidStateError
- Updates zu WGSL
- Updates zum Morgengrauen