Neuigkeiten bei WebGPU (Chrome 136)

François Beaufort
François Beaufort

Veröffentlicht: 23. April 2025

GPUAdapterInfo-Attribut „isFallbackAdapter“

Das boole Attribut „GPUAdapterInfo“ isFallbackAdapter gibt an, ob ein GPUAdapter erhebliche Leistungseinschränkungen hat, die im Austausch für eine größere Kompatibilität, ein vorhersehbareres Verhalten oder eine verbesserte Datensicherheit erzielt werden. Diese Ergänzung war erforderlich, da Bibliotheken, die von Nutzern bereitgestellte GPUDevice-Objekte verwenden, nicht über das adapterInfo-Attribut auf GPUDevice auf diese Informationen zugreifen konnten. Weitere Informationen finden Sie im folgenden Beispiel und in Issue 403172841.

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 falsch. Wir prüfen derzeit, ob das Attribut „GPUAdapter isFallbackAdapter“ eingestellt und entfernt werden kann. Weitere Informationen finden Sie unter Versandabsicht.

Verbesserte Shader-Kompilierungszeiten unter D3D12

Das Chrome-Team verbessert Tint, den WebGPU-Shadersprachen-Compiler, kontinuierlich durch die Hinzufügung einer Zwischendarstellung (IR) für Geräte, die WebGPU mit dem D3D12-Backend unterstützen. Diese Zwischensprache, die zwischen dem abstrakten Syntaxbaum (AST) von Tint und dem HLSL-Backend-Writer positioniert ist, macht den Compiler effizienter und wartbarer. Dies kommt letztendlich sowohl Entwicklern als auch Nutzern zugute. Erste Tests zeigen, dass die neue Version von Tint bis zu zehnmal schneller ist, wenn die WGSL-Shader von Unity in HLSL übersetzt werden.

Ein Flussdiagramm zeigt die Umwandlung von WGSL-Shadercode in Low-Level-GPU-Anweisungen.
Erstellen einer Renderpipeline unter Windows

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.

Leinwandbilder speichern und kopieren

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

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

Einschränkungen im Modus für die Anzeigenwirkung

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

Wenn du einen GPUAdapter mit der Option featureLevel: "compatibility" anforderst, wird der Browser aufgefordert, den experimentellen WebGPU-Kompatibilitätsmodus auszuwählen. Bei Erfolg wird der resultierende Adapter auf „Kompatibilitätsstandard“ gesetzt. Andernfalls wird die Standardeinstellung des Kerns verwendet, was der Verwendung der Option featureLevel: "core" entspricht. Wenn du requestDevice() ohne requiredFeatures und requiredLimits aufrufst, wird ein GPUDevice mit den Standardfunktionen des GPUAdapters angefordert.

Adapter mit Kernstandard unterstützen immer die "core-features-and-limits"-Funktion und sie wird automatisch auf GPU-Geräten aktiviert, die daraus erstellt wurden. Bei Adaptern mit Kompatibilitätsstandard wird die "core-features-and-limits"-Funktion möglicherweise unterstützt und kann auf GPUDevices angefordert werden, die daraus erstellt wurden. Beide Adaptertypen unterstützen möglicherweise auch Funktionen wie "float32-blendable", die sowohl im Kern- als auch im Kompatibilitätsmodus optional ist.

Das folgende Beispiel bezieht sich auf eine Anwendung, für die "float32-blendable" erforderlich ist und die die Verwendung der Hauptfunktionen unterstützt, sofern verfügbar. Wenn die Hauptfunktionen nicht verfügbar sind, werden nur die 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 InstanceDropped-Enum für den Status des Rückrufs wurde in CallbackCancelled umbenannt, um zu verdeutlichen, dass der Rückruf abgebrochen wurde, die mit dem Ereignis verbundene Hintergrundverarbeitung wie die Pipelinekompilierung 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.

Das wgpu::PopErrorScopeStatus::EmptyStack-Enum, das 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 Fehlererläuterung, die bei der Fehlerbehebung hilft. Siehe Problem 369.

Dies sind nur einige der wichtigsten Highlights. Eine vollständige Liste der Commits finden Sie hier.

Das ist neu bei WebGPU

Eine Liste aller Themen, die in der Reihe Was ist neu in WebGPU behandelt wurden.

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