Nowości w WebGPU (Chrome 136)

François Beaufort
François Beaufort

Data publikacji: 23 kwietnia 2025 r.

Atrybut GPUAdapterInfo isFallbackAdapter

Atrybut logiczny GPUAdapterInfo isFallbackAdapter wskazuje, czy GPUAdapter ma znaczne ograniczenia wydajności w zamian za większą kompatybilność, bardziej przewidywalne działanie lub lepszą ochronę prywatności. Było to 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 obiekcie 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.
}

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

Skrócenie czasu kompilacji cieniowania w D3D12

Zespół Chrome stale ulepsza Tint, kompilator języka cieniowania WebGPU, dodając reprezentację pośrednią (IR) dla urządzeń obsługujących WebGPU z backendem D3D12. Ten język pośredni, umieszczony między drzewem składni abstrakcyjnej (AST) Tint a modułem zapisującym HLSL, zwiększy wydajność i łatwość utrzymania kompilatora, co 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 w 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 urządzeniach z Androidem, ChromeOS i macOS, są stopniowo wdrażane na urządzeniach z Windows, które obsługują WebGPU z backendem D3D12. Zobacz problem 42251045.

Zapisywanie i kopiowanie obrazów z płótna

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

Jej
Użytkownik wybrał w menu kontekstowym opcję „Zapisz obraz jako…”.

Usuwanie ograniczeń trybu zgodności wyników marki

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

Żądanie obiektu GPUAdapter z opcją featureLevel: "compatibility" sugeruje przeglądarce wybranie eksperymentalnego trybu zgodności WebGPU. Jeśli operacja się powiedzie, wynikowy adapter będzie „domyślnie zgodny”. W przeciwnym razie jest to „core-defaulting”, czyli to samo co użycie opcji featureLevel: "core". Ponadto wywołanie requestDevice() bez requiredFeaturesrequiredLimits powoduje wysłanie żądania GPUDevice z domyślnymi możliwościami GPUAdapter.

Adaptery domyślne zawsze obsługują funkcję "core-features-and-limits" i jest ona automatycznie włączana na urządzeniach GPU utworzonych na ich podstawie. W przypadku adapterów domyślnie zgodnych z urządzeniami "core-features-and-limits" funkcja może być obsługiwana i można o nią poprosić w przypadku utworzonych na ich podstawie urządzeń GPUDevices. 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 podstawowych funkcji, jeśli są dostępne, ale używa tylko funkcji zgodności, jeśli podstawowe funkcje nie są dostępne.

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 o świcie

Wyliczenie callback status InstanceDropped zostało zmienione na CallbackCancelled, aby wyjaśnić, że wywołanie zwrotne zostało anulowane, ale przetwarzanie w tle powiązane ze zdarzeniem, np. kompilacja potoku, może nadal trwać. Nowa nazwa ma bardziej ogólne zastosowanie, na wypadek gdyby w przyszłości dodano inny mechanizm anulowania. Zobacz problem 520.

Wyliczenie wgpu::PopErrorScopeStatus::EmptyStack, które wskazywało, że nie można usunąć stosu zakresu błędu, zostało zmienione na wgpu::PopErrorScopeStatus::Error (które ma też bardziej ogólne zastosowanie). Wywołanie zwrotne zawiera teraz też odpowiedni komunikat z wyjaśnieniem błędu, który ułatwia debugowanie. Zobacz problem 369.

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

Nowości w WebGPU

Lista wszystkich tematów omówionych w serii Co nowego w WebGPU.

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