W tym dokumencie wyjaśniamy, dlaczego interfejs WebGPU może nie działać w przeglądarce Chrome zgodnie z oczekiwaniami. Znajdziesz w nim też jasne instrukcje umożliwiające rozwiązanie problemów, gdy tylko jest to możliwe.
Wartość navigator.gpu jest nieokreślona
Ten przykład przedstawia błąd JavaScriptu, który może wystąpić, gdy usługa gpu
jest niedostępna w navigator
:
const adapter = await navigator.gpu.requestAdapter();
cancel Uncaught TypeError: Cannot read properties of undefined (reading 'requestAdapter')
Oto możliwa przyczyna: Przejrzyj je w tej kolejności:
WebGPU wymaga przeglądarki Chrome 113 lub nowszej na urządzeniach z ChromeOS, macOS, Windows i Chrome 121 lub nowszym na Androidzie. Sprawdź wersję na
chrome://version
i w razie potrzeby zaktualizuj ją.WebGPU nie jest obecnie dostępny z poziomu skryptu service worker ani ze współdzielonej instancji roboczej. Jeśli używasz skryptu service worker lub współdzielonej instancji roboczej, przenieś kod WebGPU do dedykowanej instancji roboczej lub do globalnego kontekstu okna.
Interfejs WebGPU jest dostępny tylko w bezpiecznych kontekstach. Jeśli udostępniasz kod za pomocą niezabezpieczonego protokołu (np.
http:
,file:
), użyj bezpiecznego protokołuhttps:
lub rozwiąż ten problem podczas tworzenia aplikacji internetowej, korzystając z jednego z tych sposobów:Udostępniaj kod lokalnie w
http://localhost
lubhttp://127.0.0.1
, korzystając z jednego z tych poleceń:npx http-server
lubpython3 -m http.server
.Dodaj źródło do listy „Niezabezpieczone źródła traktowane jako bezpieczne” w
chrome://flags/#unsafely-treat-insecure-origin-as-secure
i uruchom ponownie Chrome.Zainstaluj Node.js i uruchom
npx servez --ssl
, aby udostępnić folder przez https za pomocą fałszywego certyfikatu. W Chrome nadal będzie się wyświetlać ostrzeżenie, które możesz pominąć, klikając „Zaawansowane”, a następnie „Przejdź do...”.Udostępnij lokalny serwer WWW, używając narzędzia ngrok.
Adapter GPU ma wartość null
Poniżej znajduje się przykład błędu JavaScriptu, który może się pojawić, gdy adapter uzyskiwany 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)
Przyczyny mogą być następujące. Przejrzyj je w tej kolejności:
Interfejs WebGPU jest wyłączony, gdy użytkownik wyłączył w
chrome://settings/system
opcję „Użyj akceleracji graficznej, gdy jest dostępna”. Sprawdź, czy to ustawienie jest wyłączone, i włącz je ponownieInterfejs WebGPU nie jest jeszcze obsługiwany na tej platformie. Możesz włączyć flagę
chrome://flags/#enable-unsafe-webgpu
i ponownie uruchomić Chrome. Aby uzyskać pomoc eksperymentalną dla systemu Linux, musisz też włączyć flagęchrome://flags/#enable-vulkan
. Więcej informacji znajdziesz w artykule o obsłudze technologii WebGPU w Chrome bez interfejsu graficznego.Sprzęt GPU został specjalnie zablokowany. Jeśli w
chrome://gpu
zobaczysz komunikat „Interfejs WebGPU został wyłączony za pomocą listy zablokowanych lub wiersza poleceń”, możesz wyłączyć listę zablokowanych adapterów WebGPU, włączając flagęchrome://flags/#enable-unsafe-webgpu
i ponownie uruchamiając Chrome.Nie ma adaptera GPU pasującego do opcji przekazanych w
requestAdapter()
. Spróbuj zadzwonić pod numerrequestAdapter()
, korzystając z innych opcji.WebGPU wymaga GPU (sprzętowego lub programowego). Aby sprawdzić, czy Chrome wykrywa GPU, wejdź na
chrome://gpu
.
WebGPU jest wolniejszy niż WebGL
Otwórz
chrome://gpu
i sprawdź, czy widzisz komunikat „WebGPU: sprzętowa 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 tłumaczenie koncepcji WebGL na platformie WebGPU może nie w pełni wykorzystać możliwości zapewnianych przez WebGPU unikalnej optymalizacji. Informacje o różnicach między tymi rozwiązaniami znajdziesz w artykule Od WebGL do WebGPU.
Ograniczenia specyficzne dla systemu Windows
Podczas korzystania z GPU na urządzeniach z systemem Windows pamiętaj o tych ograniczeniach:
Chrome nie pozwala na jednoczesne korzystanie z wielu kart graficznych. Zobacz issue chromium:329211593.
Chrome zawsze używa tej samej karty GPU, która została przypisana do innych zadań w Chrome. W przypadku laptopów jest 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łanierequestAdapter()
.