Neuigkeiten bei WebGPU (Chrome 136)

François Beaufort
François Beaufort

Veröffentlicht: 23. April 2025

GPUAdapterInfo-Attribut „isFallbackAdapter“

Das boolesche Attribut isFallbackAdapter von GPUAdapterInfo gibt an, ob ein GPUAdapter im Gegenzug für eine höhere Kompatibilität, ein besser vorhersagbares Verhalten oder einen besseren Datenschutz erhebliche Leistungseinschränkungen aufweist. Diese Ergänzung war erforderlich, da Bibliotheken, die vom Nutzer bereitgestellte GPUDevice-Objekte verwenden, nicht über das Attribut adapterInfo auf GPUDevice auf diese Informationen zugreifen konnten. Sehen Sie sich das folgende Beispiel und Problem 403172841 an.

const adapter = await navigator.gpu.requestAdapter();

if (adapter?.info.isFallbackAdapter) {
  // The returned adapter is a software-backed fallback adapter, which
  // may have significantly lower performance and fewer features.
}

Da Chrome noch keine Unterstützung für Fallback-Adapter bietet, ist isFallbackAdapter auf den Geräten der Nutzer derzeit immer „false“. Wir prüfen, ob das GPUAdapter-Attribut „isFallbackAdapter“ eingestellt und entfernt werden kann. Weitere Informationen finden Sie unter Intent to Ship.

Verbesserungen bei der Shader-Kompilierungszeit unter D3D12

Das Chrome-Team arbeitet kontinuierlich an Tint, dem WebGPU-Compiler für Shader-Sprachen. Dazu wird eine Zwischenrepräsentation (Intermediate Representation, IR) für Geräte hinzugefügt, die WebGPU mit dem D3D12-Backend unterstützen. Diese Zwischenrepräsentation, die sich zwischen dem abstrakten Syntaxbaum (Abstract Syntax Tree, AST) von Tint und dem HLSL-Backend-Writer befindet, macht den Compiler effizienter und wartungsfreundlicher, was letztendlich sowohl Entwicklern als auch Nutzern zugutekommt. Erste Tests zeigen, dass die neue Version von Tint beim Übersetzen von WGSL-Shadern von Unity in HLSL bis zu zehnmal schneller ist.

Ein Flussdiagramm zeigt den Prozess der Konvertierung von WGSL-Shader-Code in GPU-Anweisungen auf niedriger Ebene.
Render-Pipeline in Windows erstellen.

Diese Verbesserungen, die bereits auf Android-, ChromeOS- und macOS-Geräten verfügbar sind, werden nach und nach auf Windows-Geräte ausgeweitet, die WebGPU mit dem D3D12-Backend unterstützen. Siehe Problem 42251045.

Canvas-Bilder speichern und kopieren

Chrome-Nutzer können jetzt mit der rechten Maustaste auf ein WebGPU-Canvas klicken und auf die Kontextmenüoptionen Bild speichern unter… oder Bild kopieren zugreifen. Siehe Problem 40902474.

Die
Nutzer hat das Kontextmenü „Bild speichern unter…“ ausgewählt.

Einschränkungen des Kompatibilitätsmodus für die Analyse der Anzeigenwirkung aufheben

Wenn die experimentelle Funktion "core-features-and-limits" auf einem GPUDevice verfügbar ist, werden alle Einschränkungen des Kompatibilitätsmodus (Funktionen und Grenzwerte) aufgehoben, wenn das Flag chrome://flags/#enable-unsafe-webgpu aktiviert ist. Siehe Problem 395855517.

Wenn Sie einen GPUAdapter mit der Option featureLevel: "compatibility" anfordern, wird der Browser aufgefordert, den experimentellen WebGPU-Kompatibilitätsmodus auszuwählen. Bei Erfolg ist der resultierende Adapter „compatibility-defaulting“. Andernfalls wird „core-defaulting“ verwendet, was der Option featureLevel: "core" entspricht. Außerdem wird beim Aufrufen von requestDevice() ohne requiredFeatures und requiredLimits ein GPUDevice mit den Standardfunktionen des GPUAdapter angefordert.

Core-Defaulting-Adapter unterstützen immer die "core-features-and-limits"-Funktion und sie wird automatisch auf GPUDevices aktiviert, die daraus erstellt werden. Bei Adaptern, die standardmäßig kompatibel sind, wird die "core-features-and-limits"-Funktion möglicherweise unterstützt und kann für GPUDevices angefordert werden, die daraus erstellt wurden. Beide Arten von Adaptern können auch Funktionen wie "float32-blendable" unterstützen, die sowohl im Core- als auch im Kompatibilitätsmodus optional sind.

Das folgende Beispiel bezieht sich auf eine Anwendung, die "float32-blendable" erfordert und die Kernfunktionen unterstützt, sofern verfügbar. Wenn keine Kernfunktionen verfügbar sind, werden nur Kompatibilitätsfunktionen verwendet.

const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });

if (!adapter || !adapter.features.has("float32-blendable")) {
  throw new Error("32-bit float textures blending support is not available");
}

const requiredFeatures = [];
if (adapter.features.has("core-features-and-limits")) {
  requiredFeatures.push("core-features-and-limits");
}

const device = await adapter.requestDevice({ requiredFeatures });

if (!device.features.has("core-features-and-limits")) {
  // Compatibility mode restrictions validation rules will apply.
}

Die experimentellen GPUAdapter-Attribute featureLevel und isCompatibilityMode wurden zugunsten der Funktion "core-features-and-limits" entfernt. Siehe Problem 395855516.

Dawn-Updates

Das Enum callback status InstanceDropped wurde in CallbackCancelled umbenannt, um zu verdeutlichen, dass der Callback abgebrochen wurde, die mit dem Ereignis verbundene Hintergrundverarbeitung, z. B. die Pipeline-Kompilierung, aber möglicherweise noch läuft. Der neue Name ist allgemeiner anwendbar, falls später ein weiterer Kündigungsmechanismus hinzugefügt wird. Siehe Problem 520.

Die wgpu::PopErrorScopeStatus::EmptyStack-Enumeration, die angibt, dass der Fehlerbereichsstapel nicht entfernt werden konnte, wurde in wgpu::PopErrorScopeStatus::Error umbenannt (was auch allgemeiner anwendbar ist). Der Callback enthält jetzt auch eine entsprechende Fehlermeldung, die bei der Fehlerbehebung hilft. Problem 369 ansehen

Dies sind nur einige der wichtigsten Neuerungen. Vollständige Liste der Commits

Neues zu WebGPU

Eine Liste mit allen Themen, die in der Reihe Neu in WebGPU behandelt wurden.

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

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