WebGPU: wskazówki i rozwiązania problemów

François Beaufort
François Beaufort

Z tego dokumentu dowiesz się, dlaczego WebGPU może nie działać lub działać niezgodnie z oczekiwaniami w przeglądarce Chrome. Znajdziesz tu też instrukcje rozwiązywania problemów, o ile to możliwe.

Ten przykład pokazuje błąd JavaScriptu, który może wystąpić, gdy gpu jest niedostępny w navigator:

const adapter = await navigator.gpu.requestAdapter();
cancel Uncaught TypeError: Cannot read properties of undefined (reading 'requestAdapter')

Przyczyna może być następująca. Sprawdź je w tej kolejności:

  1. WebGPU wymaga przeglądarki Chrome w wersji 113 lub nowszej na ChromeOS, macOS i Windows oraz Chrome w wersji 121 lub nowszej na Androidzie. Sprawdź swoją wersję na stronie chrome://version i w razie potrzeby ją zaktualizuj.

  2. WebGPU jest dostępne tylko w bezpiecznych kontekstach. Jeśli kod jest udostępniany za pomocą niezabezpieczonego protokołu (np. http:, file:), użyj bezpiecznego protokołu https: lub rozwiąż ten problem podczas tworzenia aplikacji internetowej w jeden z tych sposobów:

    • Wyświetlaj kod lokalnie na http://localhost lub http://127.0.0.1 za pomocą jednego z tych poleceń: npx http-server lub python3 -m http.server.

    • Dodaj źródło do listy „Niebezpieczne źródła traktowane jako bezpieczne” w chrome://flags/#unsafely-treat-insecure-origin-as-secure i ponowić uruchomienie Chrome.

    • Zainstaluj Node.js i uruchom npx servez --ssl, aby udostępniać folder przez https przy użyciu fałszywego certyfikatu. W Chrome nadal będziesz otrzymywać ostrzeżenie, które możesz pominąć, klikając „Zaawansowane”, a potem „Przejdź do…”.

    • Uzyskaj dostęp do lokalnego serwera WWW z sieci Internet za pomocą ngrok.

Adapter GPU ma wartość null

Poniżej znajduje się przykład błędu JavaScriptu, który może wystąpić, gdy adapter uzyskany z wywołania funkcji requestAdapter() ma wartość null:

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
cancel Uncaught TypeError: Cannot read properties of undefined (reading requestDevice)

Może się tak zdarzyć z jednego z tych powodów: Sprawdź je w tej kolejności:

  1. WebGPU jest wyłączone, gdy użytkownik wyłączył opcję „Używaj akceleracji grafiki, gdy jest dostępna” w sekcji chrome://settings/system. Sprawdź, czy to ustawienie jest wyłączone, i włącz je ponownie

  2. WebGPU nie jest jeszcze obsługiwany na tej platformie. Możesz włączyć flagę chrome://flags/#enable-unsafe-webgpu i ponownie uruchomić Chrome. Aby korzystać z eksperymentów dotyczących Linuksa, musisz też włączyć flagę chrome://flags/#enable-vulkan. Więcej informacji znajdziesz w artykule Wsparcie WebGPU w Chrome bez głowy.

  3. Sprzęt GPU został dodany do listy zablokowanych. Jeśli w systemie chrome://gpu zobaczysz komunikat „WebGPU został wyłączony przez listę zablokowanych lub w wierszu poleceń”, możesz wyłączyć listę zablokowanych adapterów WebGPU przez włączenie flagi chrome://flags/#enable-unsafe-webgpu i ponowne uruchomienie Chrome.

  4. Nie ma adaptera GPU pasującego do opcji przekazanych w polu requestAdapter(). Spróbuj zadzwonić do użytkownika requestAdapter(), aby uzyskać więcej opcji.

  5. WebGPU wymaga procesora graficznego (emulowanego sprzętowo lub programowo). Aby sprawdzić, czy Chrome wykrywa kartę graficzną, otwórz stronę chrome://gpu.

  6. Proces GPU kilka razy uległ awarii. Możesz ponownie załadować stronę lub ponownie uruchomić Chrome. Aby dowiedzieć się więcej, zapoznaj się ze sprawdzonymi metodami dotyczącymi utraty urządzenia WebGPU.

WebGPU jest wolniejsze niż WebGL

  1. Otwórz chrome://gpu i upewnij się, że widzisz komunikat „WebGPU: akceleracja sprzętowa”. Jeśli widzisz komunikat „WebGPU: tylko oprogramowanie, akceleracja sprzętowa niedostępna”, może być konieczne zaktualizowanie sterowników GPU.

  2. Bezpośrednie przekształcanie koncepcji WebGL w WebGPU może nie pozwolić na pełne wykorzystanie unikalnych optymalizacji WebGPU. Aby dowiedzieć się więcej o różnicach między tymi technologiami, przeczytaj artykuł Od WebGL do WebGPU.

Ograniczenia dotyczące systemu Windows

Pamiętaj o tych ograniczeniach podczas korzystania z WebGPU na urządzeniach z systemem Windows:

  • Chrome nie obsługuje jednoczesnego używania wielu kart graficznych. Zobacz problem chromium:329211593.

  • Chrome zawsze używa tej samej karty GPU, która została przydzielona do innych zadań w Chrome – ze względu na zużycie energii (tj. oszczędzanie energii) w laptopach jest to zwykle zintegrowana karta graficzna. Oznacza to, że opcja powerPreference nie ma żadnego wpływu na wywołanie requestAdapter().