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.
navigator.gpu non è definito
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:
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://versione aggiornala, se necessario.WebGPU è accessibile solo ai contesti sicuri. Se pubblichi il codice tramite un protocollo non sicuro (ad es.
http:,file:), utilizza il protocollohttps:sicuro o risolvi il problema durante lo sviluppo della tua app web in uno dei seguenti modi:Pubblica il codice localmente su
http://localhostohttp://127.0.0.1con uno di questi comandi:npx http-serveropython3 -m http.server.Aggiungi l'origine all'elenco "Origini non sicure trattate come sicure" di
chrome://flags/#unsafely-treat-insecure-origin-as-securee riavvia Chrome.Installa Node.js ed esegui
npx servez --sslper 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:
WebGPU è disattivato se l'utente ha disattivato l'opzione "Usa accelerazione grafica quando disponibile" in
chrome://settings/system. Controlla se questa impostazione è disattivata e riattivalaWebGPU non è ancora supportato su questa piattaforma. Puoi attivare il flag
chrome://flags/#enable-unsafe-webgpue riavviare Chrome. Per il supporto sperimentale di Linux, dovrai anche attivare il flagchrome://flags/#enable-vulkan. Per scoprire di più, consulta la pagina Supporto di WebGPU in Chrome headless.L'hardware della GPU è stato inserito in modo specifico nella lista bloccata. Se in
chrome://gpuviene 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 flagchrome://flags/#enable-unsafe-webgpue riavviando Chrome.Non esiste un adattatore GPU corrispondente per le opzioni passate in
requestAdapter(). Prova a chiamarerequestAdapter()con opzioni diverse.WebGPU richiede una GPU (hardware o emulata tramite software). Puoi verificare se Chrome rileva una GPU visitando la pagina
chrome://gpu.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
Apri
chrome://gpue 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.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
powerPreferencenon ha alcun impatto quando viene chiamatarequestAdapter(). Puoi forzare l'utilizzo della GPU ad alte prestazioni, se disponibile, attivando il flagchrome://flags/#force-high-performance-gpue riavviando Chrome.