WebGPU: suggerimenti per la risoluzione dei problemi e correzioni

François Beaufort
François Beaufort

Questo documento spiega perché WebGPU potrebbe non essere utilizzabile o non funzionare come previsto nel browser Chrome, con passaggi chiari per risolvere i problemi, se possibile.

L'esempio seguente mostra un errore JavaScript che potresti ricevere quando gpu non è disponibile in navigator:

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

Ciò potrebbe essere dovuto a uno dei seguenti motivi. Dai un'occhiata a questi nell'ordine seguente:

  1. WebGPU richiede Chrome 113 o versioni successive su ChromeOS, macOS, Windows e Chrome 121 o versioni successive su Android. Controlla la tua versione all'indirizzo chrome://version e aggiornala, se necessario.

  2. WebGPU è accessibile solo ai contesti sicuri. Se pubblichi il codice tramite un protocollo non sicuro (ad es. http:, file:), utilizza il protocollo https: sicuro o risolvi il problema durante lo sviluppo della tua app web in uno dei seguenti modi:

    • Pubblica il codice localmente su http://localhost o http://127.0.0.1 con uno di questi comandi: npx http-server o python3 -m http.server.

    • Aggiungi l'origine all'elenco "Origini non sicure trattate come sicure" di chrome://flags/#unsafely-treat-insecure-origin-as-secure e riavvia Chrome.

    • Installa Node.js ed esegui npx servez --ssl per pubblicare la cartella tramite https con un certificato falso. In Chrome riceverai comunque un avviso che puoi ignorare facendo clic su "Avanzate" e poi su "Vai a…".

    • Esponi il tuo server web locale a internet con ngrok.

L'adattatore GPU è null

Di seguito è riportato un esempio di errore JavaScript che potresti ricevere quando l'adattatore ottenuto dalla chiamata a requestAdapter() è nullo:

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

Questo accade per uno dei seguenti motivi. Dai un'occhiata a questi nell'ordine seguente:

  1. WebGPU è disattivato se l'utente ha disattivato l'opzione "Usa accelerazione grafica quando disponibile" in chrome://settings/system. Controlla se questa impostazione è disattivata e riattivala

  2. WebGPU non è ancora supportato su questa piattaforma. Puoi attivare il flag chrome://flags/#enable-unsafe-webgpu e riavviare Chrome. Per il supporto sperimentale di Linux, dovrai anche attivare il flag chrome://flags/#enable-vulkan. Per scoprire di più, consulta la pagina Supporto di WebGPU in Chrome headless.

  3. L'hardware della GPU è stato inserito in modo specifico nella lista bloccata. Se in chrome://gpu viene visualizzato il messaggio "WebGPU è stato disattivato tramite la lista bloccata o la riga di comando", puoi disattivare la lista bloccata degli adattatori WebGPU attivando il flag chrome://flags/#enable-unsafe-webgpu e riavviando Chrome.

  4. Non esiste un adattatore GPU corrispondente per le opzioni passate in requestAdapter(). Prova a chiamare requestAdapter() con opzioni diverse.

  5. WebGPU richiede una GPU (hardware o emulata tramite software). Puoi verificare se Chrome rileva una GPU visitando la pagina chrome://gpu.

  6. Il processo della GPU ha avuto un arresto anomalo diverse volte. Puoi ricaricare la pagina o riavviare Chrome. Per scoprire di più, consulta le best practice per la perdita di dispositivi WebGPU.

WebGPU è più lento di WebGL

  1. Apri chrome://gpu e assicurati di poter leggere "WebGPU: accelerazione hardware". Se vedi il messaggio "WebGPU: solo software, accelerazione hardware non disponibile", potresti dover aggiornare i driver della GPU.

  2. La traduzione diretta dei concetti di WebGL in WebGPU potrebbe non sfruttare appieno le ottimizzazioni uniche di WebGPU. Consulta Da WebGL a WebGPU per scoprire alcune delle differenze.

Limitazioni specifiche di Windows

Tieni presente le seguenti limitazioni quando utilizzi WebGPU sui dispositivi Windows:

  • Chrome non supporta l'utilizzo di più adattatori GPU contemporaneamente. Vedi issue chromium:329211593.

  • Chrome utilizza sempre lo stesso adattatore GPU allocato per altri carichi di lavoro di Chrome, che per i laptop è in genere la scheda grafica integrata, a causa dell'aspetto del consumo energetico (ad es. risparmio energetico). Ciò significa che l'opzione powerPreference non ha alcun impatto quando viene chiamata requestAdapter(). Puoi forzare l'utilizzo della GPU ad alte prestazioni, se disponibile, attivando il flag chrome://flags/#force-high-performance-gpu e riavviando Chrome.