Nowości w WebGPU (Chrome 136)

François Beaufort
François Beaufort

Opublikowano: 23 kwietnia 2025 r.

Atrybut GPUAdapterInfo isFallbackAdapter

Atrybut logiczny GPUAdapterInfo isFallbackAdapter wskazuje, czy GPUAdapter ma znaczne ograniczenia wydajności w zamian za szerszą zgodność, bardziej przewidywalne działanie lub większą prywatność. To uzupełnienie było konieczne, ponieważ biblioteki, które przyjmują obiekty GPUDevice dostarczone przez użytkownika, nie mogły uzyskać dostępu do tych informacji za pomocą atrybutu adapterInfo w GPUDevice. Zapoznaj się z tym przykładem i problemem 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.
}

Ponieważ Chrome nie obsługuje jeszcze adapterów rezerwowych, atrybut isFallbackAdapter jest obecnie zawsze ustawiony na false na urządzeniach użytkowników. Sprawdzamy, czy atrybut GPUAdapter isFallbackAdapter można wycofać i usunąć. Zobacz zamiar wprowadzenia.

Usprawnienia czasu kompilacji shadera w D3D12

Zespół Chrome stale ulepsza Tint, kompilator języka shadera WebGPU, dodając reprezentację pośrednią (IR) dla urządzeń, które obsługują WebGPU z backendem D3D12. Ta reprezentacja pośrednia, umieszczona między abstrakcyjnym drzewem składni (AST) Tint a modułem zapisującym backend HLSL, zwiększy wydajność i łatwość utrzymania kompilatora, co ostatecznie przyniesie korzyści zarówno deweloperom, jak i użytkownikom. Wstępne testy pokazują, że nowa wersja Tint jest nawet 10 razy szybsza podczas tłumaczenia shaderów WGSL Unity na HLSL.

Schemat blokowy przedstawiający proces konwersji kodu shadera WGSL na instrukcje niskiego poziomu dla procesora graficznego.
Tworzenie potoku renderowania w systemie Windows.

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

Zapisywanie i kopiowanie obrazów z elementu canvas

Użytkownicy Chrome mogą teraz kliknąć prawym przyciskiem myszy element canvas WebGPU i uzyskać dostęp do opcji menu kontekstowego Zapisz obraz jako… lub Kopiuj obraz. Zobacz problem 40902474.

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

Zniesienie ograniczeń trybu zgodności

Eksperymentalna funkcja "core-features-and-limits" (jeśli jest dostępna w 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, wynikowy adapter będzie „compatibility-defaulting”. W przeciwnym razie będzie to "core-defaulting", czyli to samo co użycie opcji featureLevel: "core". Ponadto wywołanie requestDevice() bez requiredFeatures i requiredLimits powoduje żądanie GPUDevice z domyślnymi możliwościami GPUAdapter.

Adaptery „core-defaulting” zawsze obsługują funkcję "core-features-and-limits", która jest automatycznie włączana w GPUDevices utworzonych na ich podstawie. W przypadku adapterów „compatibility-defaulting” funkcja "core-features-and-limits" może być obsługiwana i można jej zażądać w GPUDevices utworzonych na ich podstawie. Oba typy adapterów mogą też obsługiwać funkcje takie jak "float32-blendable", która jest opcjonalna zarówno w trybie podstawowym, jak i w trybie zgodności.

Poniższy przykład dotyczy aplikacji, która wymaga "float32-blendable" i obsługuje korzystanie z funkcji podstawowych, jeśli są dostępne, ale jeśli nie są dostępne, używa tylko 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 featureLevel i isCompatibilityMode zostały usunięte na rzecz funkcji "core-features-and-limits". Zobacz problem 395855516.

Aktualizacje Dawn

Wyliczenie stanu wywołania zwrotnego InstanceDropped zostało zmienione na CallbackCancelled, aby wyjaśnić, że wywołanie zwrotne zostało anulowane, ale przetwarzanie w tle związane ze zdarzeniem, np. kompilacja potoku, może nadal trwać. Nowa nazwa jest bardziej ogólna, 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ąć stosu zakresu błędów, zostało zmienione na wgpu::PopErrorScopeStatus::Error (które jest też bardziej ogólne). Wywołanie zwrotne zawiera teraz też odpowiedni komunikat z wyjaśnieniem błędu, który ułatwia debugowanie. Zobacz problem 369.

To tylko niektóre z najważniejszych informacji. Zapoznaj się z pełną listą zatwierdzeń.

Co nowego w WebGPU

Lista wszystkich informacji, które zostały omówione w serii Co nowego w WebGPU.

Chrome 147–148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

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