Die Anzahl der WebGPU-Funktionen mag diesmal etwas knapp sein, aber einige große Fortschritte stehen bevor. 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 für Untergruppen ermöglicht Parallelität auf SIMD-Ebene, sodass Threads innerhalb einer Gruppe miteinander kommunizieren und kollektive mathematische Operationen durchführen können, z. B. die Summe von 16 Zahlen. Dies bietet eine hocheffiziente Form der Thread-übergreifenden Datenfreigabe.
Untergruppenvorgänge werden von modernen GPU-APIs unterstützt. Namens- und Implementierungsdetails variieren jedoch. Das Chrome-Team hat Gemeinsamkeiten identifiziert und arbeitet nun an einer Standardisierung dieser Funktion. Sehen Sie sich das Angebot an und kommentieren Sie, wenn Sie Fragen haben.
Die "Experimental Web Platform Features" enthält eine minimale und nicht standardisierte Implementierung von Untergruppen. bei chrome://flags/#enable-experimental-web-platform-features
melden, damit Entwickler es ausprobieren und Feedback geben können, da im Kontext von WebGPU noch keine realen Vorteile 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.
Du musst diese Erweiterung auch explizit in deinem WGSL-Code 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 Größe der Untergruppe.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, andernfalls 0.subgroupBroadcast(value, id)
: Sendet denvalue
des Aufrufs mitsubgroup_invocation_id
, derid
entspricht, 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().
}`,
});
Als 3D-Textursegment rendern
Mit dem neuen depthSlice
-Mitglied in einem GPURenderPassColorAttachment
kannst du jetzt direkt in Segmenten von 3D-Texturen innerhalb von Rendering-Passagen rendern. Die Funktionen sind dabei über das gängige 2D-Textur-Rendering hinaus möglich. Mit dieser Ergänzung können Sie beispielsweise Voxel-basierte Szenen und Effekte erstellen, indem Sie sie direkt in 3D-Texturvolumen rendern. Siehe issue dawn:1020.
Updates zur Morgendämmerung
Vollständige Liste der Commits
Das ist neu bei WebGPU
Eine Liste aller behandelten Themen der Reihe What's New in WebGPU.
Chrome 128
- Tests mit Untergruppen
- Einstellung der Tiefenverzerrung für Linien und Punkte verwerfen
- Entwicklertools-Warnung für nicht erfassten Fehler ausblenden, wenn „preventDefault“ festgelegt ist
- WGSL-interpolierte Stichprobenerhebung
- Updates zur Morgendämmerung
Chrome 127
- Experimentelle Unterstützung von OpenGL ES unter Android
- GPUAdapter-Infoattribut
- Verbesserungen der WebAssembly-Interoperabilität
- Verbesserte Fehler des Befehls-Encoders
- Updates zur Morgendämmerung
Chrome 126
- Limit für maxTextureArrayLayers erhöhen
- Optimierung des Zwischenspeicheruploads für das Vulkan-Backend
- Schnellere Kompilierungszeiten
- Gesendete Befehlspuffer müssen eindeutig sein
- Updates zur Morgendämmerung
Chrome 125
Chrome 124
- Schreibgeschützte Speichertexturen
- Unterstützung für Service Worker und Shared Worker
- Neue Attribute für Adapterinformationen
- Diverse Fehlerkorrekturen
- Updates zur Morgendämmerung
Chrome 123
- Unterstützung der integrierten DP4a-Funktionen in WGSL
- Uneingeschränkte Zeigerparameter in WGSL
- „Zucker“-Syntax für die Dereferenzierung von zusammengesetzten Daten in WGSL
- Separater schreibgeschützter Status für Schablonen- und Tiefenaspekte
- Updates zur Morgendämmerung
Chrome 122
- Reichweite mit dem Kompatibilitätsmodus erhöhen (Funktion in Entwicklung)
- maxVertexAttributes-Limit erhöhen
- Updates zur Morgendämmerung
Chrome 121
- Unterstützung von WebGPU unter Android
- DXC anstelle von FXC für die Shader-Kompilierung unter Windows verwenden
- Zeitstempelabfragen in Rechen- und Renderingdurchläufen
- Standardeinstiegspunkte für Shader-Module
- Unterstützung von „display-p3“ als GPUExternalTexture-Farbraum
- Informationen zu Arbeitsspeicher-Heaps
- Updates zur Morgendämmerung
Chrome 120
- Unterstützung von 16-Bit-Gleitkommawerten in WGSL
- Gehe an deine Grenzen
- Änderungen am Status der Tiefenschablonen
- Aktualisierung der Adapterinformationen
- Zeitstempelquantisierung von Abfragen
- Frühjahrsputz
Chrome 119
- Filterbare 32-Bit-Float-Texturen
- unorm10-10-10-2 Vertexformat
- rgb10a2uint-Texturformat
- Updates zur Morgendämmerung
Chrome 118
- Unterstützung von HTMLImageElement und ImageData in
copyExternalImageToTexture()
- Experimentelle Unterstützung für nicht schreibgeschützte und schreibgeschützte Speichertexturen
- Updates zur Morgendämmerung
Chrome 117
- Vertex-Zwischenspeicher aufheben
- Bindungsgruppe aufheben
- Fehler bei der asynchronen Pipelineerstellung stummschalten, wenn Gerät verloren geht
- Aktualisierungen beim Erstellen von SPIR-V-Shadermodulen
- Entwicklererfahrung verbessern
- Caching-Pipelines mit automatisch generiertem Layout
- Updates zur Morgendämmerung
Chrome 116
- WebCodecs-Integration
- Verlorenes Gerät, das von GPUAdapter
requestDevice()
zurückgegeben wurde - Videowiedergabe ruckelfrei, wenn
importExternalTexture()
aufgerufen wird - Konformität mit Spezifikationen
- Entwicklererfahrung verbessern
- Updates zur Morgendämmerung
Chrome 115
- Unterstützte WGSL-Spracherweiterungen
- Experimentelle Unterstützung für Direct3D 11
- Separate GPU standardmäßig im Netzbetrieb nutzen
- Entwicklererfahrung verbessern
- Updates zur Morgendämmerung
Chrome 114
- JavaScript-Code optimieren
- getCurrentTexture() bei nicht konfiguriertem Canvas löst InvalidStateError aus
- Wichtige Informationen von WGSL
- Updates zur Morgendämmerung