Tests mit Untergruppen
Mit der Funktion für Untergruppen wird Parallelität auf SIMD-Ebene ermöglicht. So können Threads innerhalb einer Gruppe kommunizieren und gemeinsame mathematische Operationen ausführen (z. B. die Summe von 16 Zahlen berechnen). Dies bietet eine hocheffiziente Form der Datenfreigabe zwischen Threads.
Eine minimale Implementierung des Vorschlags für Untergruppen ist für lokale Tests hinter dem Flag "Unsafe WebGPU Support" unter chrome://flags/#enable-unsafe-webgpu verfügbar.
Sie können Untergruppen auch auf Ihrer Website mit echten Nutzern testen, indem Sie sich für den Ursprungstest registrieren. Eine Anleitung zur Vorbereitung Ihrer Website für die Verwendung von Ursprungstests finden Sie unter Ursprungstests verwenden. Der Ursprungstest läuft von Chrome 128 bis 131 (endet am 19. Februar 2025). Weitere Informationen: Siehe Absicht zu experimentieren.
Wenn die Funktion "subgroups" in einem GPUAdapter verfügbar ist, fordern Sie ein GPUDevice mit dieser Funktion an, um die Unterstützung von Untergruppen in WGSL zu erhalten und die Grenzwerte für minSubgroupSize und maxSubgroupSize zu prüfen.
Außerdem müssen Sie diese Erweiterung in Ihrem WGSL-Code mit enable subgroups; explizit aktivieren. Wenn sie aktiviert ist, haben 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, wobei das Bit, dassubgroup_invocation_identspricht, 1 ist, wennvaluefür diesen aktiven Aufruf „true“ ist, und andernfalls 0.subgroupBroadcast(value, id): Überträgt denvaluevom Aufruf mitsubgroup_invocation_id, der mitidübereinstimmt, an alle Aufrufe innerhalb der Untergruppe. Hinweis:idmuss eine Compile-Zeitkonstante sein.
Weitere integrierte Funktionen wie subgroupAdd, subgroupAll, subgroupElect und subgroupShuffle werden in Zukunft hinzugefügt. Weitere Informationen zu issue 354738715.
Wenn Sie f16 in Untergruppenoperationen zulassen möchten, fordern Sie ein GPUDevice mit den "subgroups", "subgroups-f16" und "shader-f16" Funktionen an und aktivieren Sie es dann in Ihrem WGSL-Code mit enable f16, subgroups, subgroups_f16;.
Das folgende Code-Snippet bietet eine Grundlage, um mit Untergruppen zu experimentieren und ihr Potenzial zu entdecken.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
throw new Error("Subgroups support is not available");
}
// Explicitly request subgroups support.
const device = await adapter.requestDevice({
requiredFeatures: ["subgroups"],
});
const shaderModule = device.createShaderModule({ code: `
enable subgroups;
var<workgroup> wgmem : u32;
@group(0) @binding(0)
var<storage, read> inputs : array<u32>;
@group(0) @binding(1)
var<storage, read_write> output : array<u32>;
@compute @workgroup_size(64)
fn main(@builtin(subgroup_size) subgroupSize : u32,
@builtin(subgroup_invocation_id) id : u32,
@builtin(local_invocation_index) lid : u32) {
// One thread per workgroup writes the value to workgroup memory.
if (lid == 0) {
wgmem = inputs[lid];
}
workgroupBarrier();
var v = 0u;
// One thread per subgroup reads the value from workgroup memory
// and shares that value with every other thread in the subgroup
// to reduce local memory bandwidth.
if (id == 0) {
v = wgmem;
}
v = subgroupBroadcast(v, 0);
output[lid] = v;
}`,
});
// Send the appropriate commands to the GPU...
Einstellung der Tiefenverzerrung für Linien und Punkte wird eingestellt
Eine Änderung der WebGPU-Spezifikation führt dazu, dass es zu einem Validierungsfehler kommt, wenn depthBias, depthBiasSlopeScale und depthBiasClamp auf einen Wert ungleich null gesetzt werden, wenn die Topologie für eine Rendering-Pipeline ein Linien- oder Punkttyp ist. Damit Entwickler genügend Zeit haben, ihren Code zu aktualisieren, wird in der Entwicklertools-Konsole eine Warnung zu dieser bevorstehenden Validierung angezeigt. Gleichzeitig werden die Werte unter diesen Umständen auf 0 gesetzt. Weitere Informationen zu Ausgabe 352567424.
Warnung in den Entwicklertools für nicht erfasste Fehler ausblenden, wenn preventDefault
In der Entwicklertools-Konsole werden keine Warnungen für uncapturederror Ereignisse mehr angezeigt, wenn ein Ereignis-Listener für uncapturederror registriert wurde und die Methode preventDefault() des Ereignisses im Callback des Ereignis-Listeners aufgerufen wurde. Dieses Verhalten entspricht der Ereignisverarbeitung in JavaScript. Weitere Informationen finden Sie im folgenden Beispiel und unter Problem 40263619.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
device.addEventListener("uncapturederror", (event) => {
// Prevents browser warning to show up in the DevTools Console.
event.preventDefault();
// TODO: Handle event.error
});
WGSL-Interpolations-Sampling „first“ und „either“
Mit dem WGSL-Attribut interpolate können Sie die benutzerdefinierte Interpolation von Ein-/Ausgabedaten verwalten. Die neuen Parameter für das Interpolations-Sampling first (Standard) und either bieten Ihnen jetzt zusätzliche Kontrolle: first verwendet den Wert vom ersten Vertex des Primitivs, während either entweder den ersten oder den letzten Vertex zulässt. Weitere Informationen zu Ausgabe 340278447.
Dawn-Updates
Die Implementierung von WGPUFuture von Dawn zur Verarbeitung asynchroner Vorgänge ist jetzt abgeschlossen. Zu den wichtigsten Konzepten gehören wgpuInstanceProcessEvents für die opportunistische Ereignisverarbeitung und WGPUCallbackMode zum Definieren von Callback-Standorten. WGPUFuture steht für einmalige Ereignisse mit unbegrenzter Lebensdauer und wgpuInstanceWaitAny wartet auf den Abschluss eines beliebigen zukünftigen Ereignisses oder auf ein Zeitlimit. Weitere Informationen zu issue 42240932.
Der Wert CompositeAlphaMode::Auto wird jetzt nicht mehr von Surface::GetCapabilities() gemeldet. Er ist weiterhin gültig und entspricht Surface::GetCapabilities().alphaMode[0]. Weitere Informationen zu Ausgabe 292.
Das OpenGL-Backend unterstützt jetzt Surface mit einem Y-Flip-Blit für jeden Present()-Aufruf. Weitere Informationen zu Ausgabe 344814083.
Die Methode Adapter::GetProperties() wird nicht mehr unterstützt. Verwenden Sie stattdessen Adapter::GetInfo().
Jaswant, ein externer Mitwirkender, hat alle CMake-Dateien neu geschrieben, wodurch sie einfacher zu aktualisieren sind und Vorabversionen möglich sind. Eine Kurzanleitung zur Verwendung von Dawn in CMake-Projekten finden Sie hier.
Dies sind nur einige der wichtigsten Highlights. Eine vollständige Liste der Commits finden Sie hier.
Neues in WebGPU
Eine Liste aller Themen, die in der Reihe „Neues in WebGPU“ behandelt wurden.
Chrome 147–148
Chrome 146
- Unterstützung des WebGPU-Kompatibilitätsmodus unter OpenGL ES 3.1
- Temporäre Anhänge
- WGSL-Erweiterung texture_and_sampler_let
- Dawn-Updates
Chrome 145
- WGSL-Erweiterung subgroup_uniformity
- Experimentelle synchrone Pufferzuordnung in Workern
- Dawn-Updates
Chrome 144
- WGSL-Erweiterung subgroup_id
- WGSL-Erweiterung uniform_buffer_standard_layout
- WebGPU unter Linux
- Schnelleres writeBuffer und writeTexture
- Dawn-Updates
Chrome 143
- Texturkomponenten-Swizzle
- Entfernung der schreibgeschützten Nutzung von bgra8unorm-Speichertexturen
- Dawn-Updates
Chrome 142
Chrome 141
- Tint IR abgeschlossen
- Analyse des Ganzzahlbereichs im WGSL-Compiler
- SPIR-V 1.4-Update für das Vulkan-Backend
- Dawn-Updates
Chrome 140
- Geräteanfragen verbrauchen Adapter
- Kurzform für die Verwendung von Texturen, wenn Texturansichten verwendet werden
- WGSL textureSampleLevel unterstützt 1D-Texturen
- Einstellung der schreibgeschützten Nutzung von bgra8unorm-Speichertexturen
- Entfernung des GPUAdapter-Attributs isFallbackAdapter
- Dawn-Updates
Chrome 139
- Unterstützung von 3D-Texturen für komprimierte BC- und ASTC-Formate
- Neue Funktion „core-features-and-limits“
- Ursprungstest für den WebGPU-Kompatibilitätsmodus
- Dawn-Updates
Chrome 138
- Kurzform für die Verwendung von Puffern als Bindungsressource
- Änderungen der Größenanforderungen für Puffer, die bei der Erstellung zugeordnet werden
- Architekturbericht für aktuelle GPUs
- Einstellung des GPUAdapter-Attributs isFallbackAdapter
- Dawn-Updates
Chrome 137
- Texturansicht für die Bindung von externen Texturen verwenden
- Puffer ohne Angabe von Offsets und Größe kopieren
- WGSL workgroupUniformLoad mit Zeiger auf atomare Variable
- GPUAdapterInfo-Attribut powerPreference
- Entfernung des GPURequestAdapterOptions-Attributs compatibilityMode
- Dawn-Updates
Chrome 136
- GPUAdapterInfo-Attribut isFallbackAdapter
- Verbesserungen der Shader-Kompilierungszeit unter D3D12
- Canvas-Bilder speichern und kopieren
- Einschränkungen des Kompatibilitätsmodus aufheben
- Dawn-Updates
Chrome 135
- Erstellung von Pipeline-Layouts mit Null-Bindungsgruppen-Layout zulassen
- Viewports können über die Grenzen der Rendering-Ziele hinausgehen
- Einfacherer Zugriff auf den experimentellen Kompatibilitätsmodus unter Android
- Entfernung des Grenzwerts maxInterStageShaderComponents
- Dawn-Updates
Chrome 134
- Verbesserung von Arbeitslasten für maschinelles Lernen mit Untergruppen
- Entfernung der Unterstützung für filterbare Texturtypen mit Gleitkommazahlen als mischbar
- Dawn-Updates
Chrome 133
- Zusätzliche unorm8x4-bgra- und 1-Komponenten-Vertex-Formate
- Anforderung unbekannter Grenzwerte mit undefiniertem Wert zulassen
- Änderungen der WGSL-Ausrichtungsregeln
- WGSL-Leistungssteigerungen mit „discard“
- VideoFrame displaySize für externe Texturen verwenden
- Bilder mit nicht standardmäßigen Ausrichtungen mit copyExternalImageToTexture verarbeiten
- Verbesserung der Entwicklerfreundlichkeit
- Kompatibilitätsmodus mit featureLevel aktivieren
- Bereinigung experimenteller Untergruppenfunktionen
- Einstellung des Grenzwerts maxInterStageShaderComponents
- Dawn-Updates
Chrome 132
- Verwendung von Texturansichten
- Mischen von 32-Bit-Gleitkomma-Texturen
- GPUDevice-Attribut adapterInfo
- Konfiguration des Canvas-Kontexts mit ungültigem Format führt zu JavaScript-Fehler
- Einschränkungen für Sampler auf Texturen filtern
- Erweiterte Tests mit Untergruppen
- Verbesserung der Entwicklerfreundlichkeit
- Experimentelle Unterstützung für normalisierte 16-Bit-Texturformate
- Dawn-Updates
Chrome 131
- Clip-Abstände in WGSL
- GPUCanvasContext getConfiguration()
- Punkt- und Linienprimitive dürfen keine Tiefenverzerrung haben
- Inklusive Scan-Funktionen für Untergruppen
- Experimentelle Unterstützung für Multi-Draw Indirect
- Option für die Shader-Modul-Kompilierung „strict math“
- Entfernung von GPUAdapter requestAdapterInfo()
- Dawn-Updates
Chrome 130
- Mischen mit zwei Quellen
- Verbesserungen der Shader-Kompilierungszeit unter Metal
- Einstellung von GPUAdapter requestAdapterInfo()
- Dawn-Updates
Chrome 129
- HDR-Unterstützung mit Canvas-Tone Mapping-Modus
- Erweiterte Unterstützung für Untergruppen
- Dawn-Updates
Chrome 128
- Tests mit Untergruppen
- Einstellung der Tiefenverzerrung für Linien und Punkte wird eingestellt
- Warnung in den Entwicklertools für nicht erfasste Fehler ausblenden, wenn preventDefault
- WGSL-Interpolations-Sampling „first“ und „either“
- Dawn-Updates
Chrome 127
- Experimentelle Unterstützung für OpenGL ES unter Android
- GPUAdapter-Attribut „info“
- Verbesserungen der WebAssembly-Interoperabilität
- Verbesserte Fehler bei der Befehlscodierung
- Dawn-Updates
Chrome 126
- Erhöhung des Grenzwerts maxTextureArrayLayers
- Optimierung des Puffer-Uploads für das Vulkan-Backend
- Verbesserungen der Shader-Kompilierungszeit
- Übermittelte Befehlspuffer müssen eindeutig sein
- Dawn-Updates
Chrome 125
Chrome 124
- Schreibgeschützte und Lese-/Schreib-Speichertexturen
- Unterstützung für Service Worker und Shared Worker
- Neue Attribute für Adapterinformationen
- Diverse Fehlerkorrekturen
- Dawn-Updates
Chrome 123
- Unterstützung für integrierte DP4a-Funktionen in WGSL
- Uneingeschränkte Zeigerparameter in WGSL
- Syntax-Zucker für die Dereferenzierung von Composites in WGSL
- Separater schreibgeschützter Status für Schablonen- und Tiefenaspekte
- Dawn-Updates
Chrome 122
- Reichweite mit Kompatibilitätsmodus erweitern (Funktion in Entwicklung)
- Erhöhung des Grenzwerts maxVertexAttributes
- Dawn-Updates
Chrome 121
- Unterstützung von WebGPU unter Android
- Verwendung von DXC anstelle von FXC für die Shader-Kompilierung unter Windows
- Zeitstempelabfragen in Compute- und Rendering-Durchläufen
- Standardmäßige Einstiegspunkte für Shader-Module
- Unterstützung von display-p3 als GPUExternalTexture-Farbraum
- Informationen zu Speicher-Heaps
- Dawn-Updates
Chrome 120
- Unterstützung für 16-Bit-Gleitkommawerte in WGSL
- Grenzwerte erweitern
- Änderungen am Tiefen-Schablonen-Status
- Updates zu Adapterinformationen
- Quantisierung von Zeitstempelabfragen
- Bereinigung von Funktionen
Chrome 119
- Filterbare 32-Bit-Gleitkomma-Texturen
- Vertex-Format unorm10-10-10-2
- Texturformat rgb10a2uint
- Dawn-Updates
Chrome 118
- Unterstützung von HTMLImageElement und ImageData in
copyExternalImageToTexture() - Experimentelle Unterstützung für Lese-/Schreib- und schreibgeschützte Speichertexturen
- Dawn-Updates
Chrome 117
- Vertex-Puffer aufheben
- Bindungsgruppe aufheben
- Fehler bei der asynchronen Pipeline-Erstellung unterdrücken, wenn das Gerät verloren geht
- Updates zur Erstellung von SPIR-V-Shader-Modulen
- Verbesserung der Entwicklerfreundlichkeit
- Pipelines mit automatisch generiertem Layout im Cache speichern
- Dawn-Updates
Chrome 116
- WebCodecs-Integration
- Verlorenes Gerät, das von GPUAdapter
requestDevice()zurückgegeben wird - Reibungslose Videowiedergabe, wenn
importExternalTexture()aufgerufen wird - Spezifikationskonformität
- Verbesserung der Entwicklerfreundlichkeit
- Dawn-Updates
Chrome 115
- Unterstützte WGSL-Spracherweiterungen
- Experimentelle Unterstützung für Direct3D 11
- Standardmäßig diskrete GPU bei Netzstrom
- Verbesserung der Entwicklerfreundlichkeit
- Dawn-Updates
Chrome 114
- JavaScript optimieren
- getCurrentTexture() für nicht konfigurierte Canvas-Elemente löst InvalidStateError aus
- WGSL-Updates
- Dawn-Updates