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.
navigator.gpu jest niezdefiniowany
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:
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.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łuhttps:
lub rozwiąż ten problem podczas tworzenia aplikacji internetowej w jeden z tych sposobów:Wyświetlaj kod lokalnie na
http://localhost
lubhttp://127.0.0.1
za pomocą jednego z tych poleceń:npx http-server
lubpython3 -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:
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 ponownieWebGPU 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.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 flagichrome://flags/#enable-unsafe-webgpu
i ponowne uruchomienie Chrome.Nie ma adaptera GPU pasującego do opcji przekazanych w polu
requestAdapter()
. Spróbuj zadzwonić do użytkownikarequestAdapter()
, aby uzyskać więcej opcji.WebGPU wymaga procesora graficznego (emulowanego sprzętowo lub programowo). Aby sprawdzić, czy Chrome wykrywa kartę graficzną, otwórz stronę
chrome://gpu
.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
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.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łanierequestAdapter()
.