Nowości w WebGPU (Chrome 136)

François Beaufort
François Beaufort

Data publikacji: 23 kwietnia 2025 r.

Atrybut isFallbackAdapter atrybutu GPUAdapterInfo

Atrybut logiczny GPUAdapterInfo isFallbackAdapter wskazuje, czy GPUAdapter ma znaczne ograniczenia wydajności w zamian za szerszą kompatybilność, bardziej przewidywalne działanie lub lepszą prywatność. Ta zmiana była konieczna, ponieważ biblioteki, które przyjmują obiekty GPUDevice przekazane przez użytkownika, nie mogły uzyskać dostępu do tych informacji za pomocą atrybutu adapterInfo w GPUDevice. Zobacz poniższy przykład i problem 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.
}

Chrome nie obsługuje jeszcze adapterów zapasowych, więc na urządzeniach użytkowników wartość isFallbackAdapter jest obecnie zawsze fałszywa. Sprawdzamy, czy atrybut GPUAdapter isFallbackAdapter można wycofać i usunąć. Chęć wysyłki

Ulepszenia czasu kompilacji shaderów w D3D12

Zespół Chrome stale ulepsza Tint, czyli kompilator języka shaderów WebGPU. Dodaje on pośrednią reprezentację (IR) dla urządzeń obsługujących WebGPU z backendem D3D12. Ten moduł pośredniczący, umieszczony między abstrakcyjnym drzewem składni (AST) Tinta a backendowym narzędziem do zapisywania HLSL, zwiększy wydajność i łatwość konserwacji kompilatora, co ostatecznie przyniesie korzyści zarówno deweloperom, jak i użytkownikom. Wstępne testy wskazują, że nowa wersja Tint jest nawet 10 razy szybsza podczas przekształcania shaderów WGSL w Unity w shadery HLSL.

Schemat blokowy przedstawiający proces konwertowania kodu shadera WGSL na instrukcje na niskim poziomie dla GPU.
Tworzenie potoku renderowania w systemie Windows.

Te ulepszenia, które są już dostępne na Androidzie, ChromeOS i macOS, są stopniowo udostępniane na urządzeniach z Windowsem, które obsługują WebGPU z backendem D3D12. Zobacz problem 42251045.

Zapisywanie i kopiowanie obrazów na płótnie

Użytkownicy Chrome mogą teraz kliknąć prawym przyciskiem myszy płótno WebGPU i wybrać opcje menu kontekstowego Zapisz obraz jako… lub Kopiuj obraz. Zobacz problem 40902474.

Jej
Użytkownik kliknął menu kontekstowe „Zapisz obraz jako…”.

Zniesienie ograniczeń trybu zgodności

Eksperymentalna funkcja "core-features-and-limits", gdy jest dostępna na GPUDevice, znosi wszystkie ograniczenia trybu zgodności (funkcje i limity), gdy włączona jest flaga chrome://flags/#enable-unsafe-webgpu. Zobacz problem 395855517.

Żądanie GPUAdapter z opcją featureLevel: "compatibility" sugeruje przeglądarce wybranie eksperymentalnego trybu zgodności WebGPU. Jeśli operacja się powiedzie, adapter będzie miał domyślne ustawienie zgodności. W przeciwnym razie jest to „core-defaulting”, co jest równoznaczne z użyciem opcji featureLevel: "core". Co więcej, wywołanie requestDevice() bez requiredFeatures i requiredLimits powoduje wysłanie żądania GPUDevice z domyślnymi możliwościami interfejsu GPUAdapter.

Adaptery z domyślnymi ustawieniami jądra zawsze obsługują funkcję "core-features-and-limits", która jest automatycznie włączana w urządzeniach GPU utworzonych na ich podstawie. W przypadku adapterów domyślnych pod kątem zgodności funkcja "core-features-and-limits" może być obsługiwana i można ją poprosić na utworzonych na ich podstawie urządzeniach GPU. Oba typy adapterów mogą też obsługiwać funkcje takie jak "float32-blendable", które są opcjonalne w trybie podstawowym i kompatybilności.

Ten przykład dotyczy aplikacji, która wymaga "float32-blendable" i obsługuje podstawowe funkcje (jeśli są dostępne), ale jeśli ich nie ma, korzysta tylko z funkcji zgodności.

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.
}

Eksperymentalne atrybuty GPUAdapter featureLevelisCompatibilityMode zostały usunięte na rzecz funkcji "core-features-and-limits". Zobacz problem 395855516.

Aktualizacje świtu

Enumeracja InstanceDropped stan wywołania zwrotnego została zmieniona na CallbackCancelled, aby zaznaczyć, że wywołanie zwrotne zostało anulowane, ale przetwarzanie w tle związane ze zdarzeniem, takie jak kompilacja potoku, może być nadal uruchomione. Nowa nazwa ma bardziej ogólne zastosowanie, na wypadek gdyby później dodano inny mechanizm anulowania. Zobacz problem 520.

Wyliczenie wgpu::PopErrorScopeStatus::EmptyStack, które wskazuje, że nie można było usunąć elementu z poziomu stosu zakresu błędu, zostało przemianowane na wgpu::PopErrorScopeStatus::Error (które ma też szersze zastosowanie). W nawiązaniu do tego połączenia zostanie też wyświetlony odpowiedni komunikat z wyjaśnieniem błędu, który ułatwi debugowanie. Zobacz problem 369.

Obejmuje to tylko niektóre najważniejsze informacje. Zapoznaj się z pełną listą commitów.

Co nowego w WebGPU

Lista wszystkich tematów omawianych w cyklu Co nowego w WebGPU.

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