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, jak rozwiązać te problemy (w miarę możliwości).

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

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

Może to być spowodowane jedną z tych przyczyn: 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 chrome://flags/#unsafely-treat-insecure-origin-as-secure „Niebezpieczne źródła traktowane jako bezpieczne” i uruchom ponownie Chrome.

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

    • Udostępnij lokalny serwer WWW w internecie za pomocą ngrok.

Karta graficzna ma wartość null

Oto przykład błędu JavaScriptu, który może wystąpić, gdy adapter zwracany przez wywołanie requestAdapter() jest pusty:

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 eksperymentalnej obsługi 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 chrome://gpu widzisz komunikat „WebGPU zostało wyłączone za pomocą listy blokowania lub wiersza poleceń”, możesz wyłączyć listę blokowania dla WebGPU, włączając flagę chrome://flags/#enable-unsafe-webgpu i ponownie uruchamiając Chrome.

  4. Nie ma odpowiedniego adaptera GPU dla opcji przekazanych w parametry requestAdapter(). Spróbuj zadzwonić do requestAdapter(), wybierając różne opcje.

  5. WebGPU wymaga procesora graficznego (wywoływanego przez sprzęt lub oprogramowanie). 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”, być może musisz zaktualizować sterowniki 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 tego samego procesora graficznego, który został przypisany do innych zadań Chrome. W przypadku laptopów jest to zwykle zintegrowana karta graficzna, ze względu na aspekt zużycia energii (np. oszczędzanie energii). Oznacza to, że opcja powerPreference nie ma żadnego wpływu na wywołanie requestAdapter().