W tym dokumencie opisujemy, dlaczego WebGPU może nie działać lub nie działa w przeglądarce Chrome zgodnie z oczekiwaniami. Znajdziesz tu też jasne instrukcje, jak rozwiązać te problemy, gdy tylko jest to możliwe.
Parametr navigator.gpu nie jest zdefiniowany
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. Przejrzyj je w tej konkretnej kolejności:
WebGPU wymaga przeglądarki Chrome 113 lub nowszej na urządzeniach z ChromeOS, macOS, Windows i Chrome w wersji 121 lub nowszej na urządzeniach z Androidem. Sprawdź wersję systemu na
chrome://version
i w razie potrzeby zaktualizuj ją.Interfejs WebGPU jest dostępny tylko w przypadku bezpiecznych kontekstów. Jeśli udostępniasz kod przy użyciu 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:Udostępnij kod lokalnie w witrynie
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 pola „Niezabezpieczone źródła traktowane jako bezpieczne”
chrome://flags/#unsafely-treat-insecure-origin-as-secure
i ponownie uruchom 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ędzie pojawiać się ostrzeżenie, które możesz pominąć, klikając „Zaawansowane” a następnie „Przejdź do...”.Udostępnij lokalny serwer WWW w internecie za pomocą programu 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 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)
Oto możliwe przyczyny: Przejrzyj je w tej konkretnej kolejności:
Procesor WebGPU jest wyłączony, gdy użytkownik wyłączył opcję „Użyj akceleracji grafiki, gdy jest dostępna” w usłudze
chrome://settings/system
. Sprawdź, czy to ustawienie jest wyłączone, i włącz je ponownieTa platforma jeszcze nie obsługuje WebGPU. 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 na temat obsługi WebGPU w Chrome bez interfejsu graficznego.Sprzęt GPU został specjalnie zablokowany. Jeśli widzisz komunikat „WebGPU został wyłączony przez listę zablokowanych lub w wierszu poleceń” w
chrome://gpu
możesz wyłączyć listę zablokowanych adapterów WebGPU, włączając flagęchrome://flags/#enable-unsafe-webgpu
i ponownie uruchom Chrome.Nie ma adaptera GPU pasującego do opcji przekazanych w polu
requestAdapter()
. Zadzwoń pod numerrequestAdapter()
, korzystając z innych opcji.WebGPU wymaga GPU (sprzętowego lub z emulacją programową). Aby sprawdzić, czy Chrome wykrywa GPU, wejdź na
chrome://gpu
.
WebGPU działa wolniej niż WebGL
Otwórz
chrome://gpu
i upewnij się, że widzisz komunikat „WebGPU: Hardware accelerated” (Przyspieszenie sprzętowe przy użyciu interfejsu WebGPU). Jeśli widzisz komunikat „WebGPU: tylko oprogramowanie, akceleracja sprzętowa niedostępna”, może być konieczne zaktualizowanie sterowników GPU.Bezpośrednie tłumaczenie koncepcji WebGL na WebGPU może nie wykorzystywać w pełni możliwości, jakie oferuje jego wyjątkowe optymalizacje. Zapoznaj się z artykułem Od WebGL do WebGPU, aby poznać niektóre z tych różnic.
Ograniczenia związane z systemem Windows
Podczas korzystania z WebGPU na urządzeniach z systemem Windows pamiętaj o tych ograniczeniach:
Chrome nie pozwala na jednoczesne korzystanie z wielu kart GPU. Zobacz problem chromium:329211593.
Chrome zawsze używa tej samej karty GPU, która została przydzielona do innych zadań Chrome. Ze względu na zużycie energii (tj. oszczędzanie energii) w laptopach jest zwykle zintegrowana karta graficzna. Oznacza to, że opcja
powerPreference
nie ma wpływu na połączenie z numeremrequestAdapter()
.