WebGPU: tips en oplossingen voor probleemoplossing

François Beaufort
François Beaufort

In dit document wordt uitgelegd waarom WebGPU mogelijk niet werkt of niet werkt zoals verwacht in de Chrome-browser, met duidelijke stappen om de problemen waar mogelijk op te lossen.

Het volgende voorbeeld toont een JavaScript-fout die u kunt krijgen als gpu niet beschikbaar is in navigator :

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

Dit kan een van de volgende redenen hebben. Bekijk die in deze specifieke volgorde:

  1. WebGPU vereist Chrome 113 of hoger op ChromeOS, macOS, Windows en Chrome 121 of hoger op Android. Controleer uw versie op chrome://version en update indien nodig.

  2. WebGPU is alleen toegankelijk voor beveiligde contexten. Als u uw code via een onveilig protocol verzendt (bijvoorbeeld http: , file: ), gebruik dan het beveiligde https: -protocol of pak dit aan tijdens de ontwikkeling van uw web-app op een van de volgende manieren:

    • Geef uw code lokaal weer op http://localhost of http://127.0.0.1 met een van deze opdrachten: npx http-server of python3 -m http.server .

    • Voeg de oorsprong toe aan de lijst 'Onveilige oorsprong behandeld als veilig' van chrome://flags/#unsafely-treat-insecure-origin-as-secure en start Chrome opnieuw.

    • Installeer Node.js en voer npx servez --ssl uit om uw map via https te bedienen met een nepcertificaat. U krijgt nog steeds een waarschuwing in Chrome die u kunt omzeilen door op 'Geavanceerd' en vervolgens op 'Doorgaan naar...' te klikken.

    • Stel uw lokale webserver bloot aan internet met ngrok .

De GPU-adapter is nul

Hier volgt een voorbeeld van een JavaScript-fout die u kunt krijgen als de adapter die u krijgt bij het aanroepen van requestAdapter() null is:

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

Dit gebeurt om een ​​van de volgende redenen. Bekijk die in deze specifieke volgorde:

  1. WebGPU is uitgeschakeld wanneer de gebruiker 'Gebruik grafische versnelling indien beschikbaar' heeft uitgeschakeld in chrome://settings/system . Controleer of deze instelling is uitgeschakeld en schakel deze weer in

  2. WebGPU wordt nog niet ondersteund op dit platform. U kunt de chrome://flags/#enable-unsafe-webgpu vlag inschakelen en Chrome opnieuw opstarten. Voor experimentele ondersteuning voor Linux moet je ook de vlag chrome://flags/#enable-vulkan inschakelen. Bekijk WebGPU-ondersteuning in Headless Chrome voor meer informatie.

  3. De GPU-hardware staat specifiek op de blokkeerlijst. Als u de melding "WebGPU is uitgeschakeld via blokkeerlijst of de opdrachtregel" ziet in chrome://gpu , kunt u de blokkeerlijst voor WebGPU-adapters uitschakelen door de chrome://flags/#enable-unsafe-webgpu te schakelen en Chrome opnieuw te starten.

  4. Er is geen overeenkomende GPU-adapter voor de opties die zijn doorgegeven in requestAdapter() . Probeer requestAdapter() aan te roepen met verschillende opties .

  5. WebGPU vereist een GPU (hardware of software-geëmuleerd). Je kunt controleren of Chrome een GPU detecteert door naar chrome://gpu te gaan.

WebGPU is langzamer dan WebGL

  1. Open chrome://gpu en zorg ervoor dat u "WebGPU: Hardware Accelerated" kunt lezen. Als u 'WebGPU: alleen software, hardwareversnelling niet beschikbaar' leest, moet u mogelijk uw GPU-stuurprogramma's bijwerken.

  2. Het rechtstreeks vertalen van WebGL-concepten naar WebGPU maakt mogelijk niet optimaal gebruik van de unieke optimalisaties van WebGPU. Bekijk Van WebGL tot WebGPU voor meer informatie over enkele verschillen.

Windows-specifieke beperkingen

Houd rekening met de volgende beperkingen bij het gebruik van WebGPU op Windows-apparaten:

  • Chrome biedt geen ondersteuning voor het gelijktijdig gebruiken van meerdere GPU-adapters. Zie uitgave chroom:329211593 .

  • Chrome gebruikt altijd dezelfde GPU-adapter die is toegewezen voor andere Chrome-workloads (voor laptops is dit doorgaans de geïntegreerde grafische kaart), vanwege het aspect energieverbruik (dat wil zeggen: energiebesparing). Dit betekent dat de optie powerPreference geen enkele impact heeft bij het aanroepen requestAdapter() .