En este documento, se explica por qué WebGPU puede no funcionar o no funcionar como se espera en el navegador Chrome, con pasos claros para resolver los problemas cuando sea posible.
navigator.gpu no está definido
En el siguiente ejemplo, se muestra un error de JavaScript que puedes obtener cuando gpu
no está disponible en navigator
:
const adapter = await navigator.gpu.requestAdapter();
cancel Uncaught TypeError: Cannot read properties of undefined (reading 'requestAdapter')
Esto puede deberse a uno de los siguientes motivos. Verifica los siguientes en este orden específico:
WebGPU requiere Chrome 113 o versiones posteriores en ChromeOS, macOS y Windows, y Chrome 121 o versiones posteriores en Android. Verifica tu versión en
chrome://version
y actualízala si es necesario.Solo los contextos seguros pueden acceder a WebGPU. Si publicas tu código a través de un protocolo no seguro (por ejemplo,
http:
,file:
), usa el protocolohttps:
seguro o aborda este problema durante el desarrollo de tu app web de una de las siguientes maneras:Publica tu código de forma local en
http://localhost
ohttp://127.0.0.1
con cualquiera de estos comandos:npx http-server
opython3 -m http.server
.Agrega el origen a la lista "Orígenes no seguros tratados como seguros" de
chrome://flags/#unsafely-treat-insecure-origin-as-secure
y reinicia Chrome.Instala Node.js y ejecuta
npx servez --ssl
para entregar tu carpeta a través de HTTPS con un certificado falso. De todos modos, recibirás una advertencia en Chrome que puedes omitir haciendo clic en "Avanzado" y, luego, en "Continuar a…".Expón tu servidor web local a Internet con ngrok.
El adaptador de GPU es nulo
El siguiente es un ejemplo de un error de JavaScript que puedes obtener cuando el adaptador que obtienes de la llamada a requestAdapter()
es nulo:
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
cancel Uncaught TypeError: Cannot read properties of undefined (reading requestDevice)
Esto sucede por uno de los siguientes motivos. Verifica los siguientes en este orden específico:
WebGPU se inhabilita cuando el usuario desactiva "Usar aceleración de gráficos cuando esté disponible" en
chrome://settings/system
. Comprueba si este parámetro de configuración está desactivado y vuelve a activarlo.WebGPU aún no es compatible con esta plataforma. Puedes habilitar la marca
chrome://flags/#enable-unsafe-webgpu
y reiniciar Chrome. Para la compatibilidad experimental con Linux, también deberás habilitar la marcachrome://flags/#enable-vulkan
. Consulta la compatibilidad con WebGPU en Chrome sin cabeza para obtener más información.El hardware de la GPU se agregó específicamente a la lista de elementos bloqueados. Si ves el mensaje "Se inhabilitó WebGPU a través de la lista de bloqueo o la línea de comandos" en
chrome://gpu
, puedes inhabilitar la lista de bloqueo de adaptadores de WebGPU habilitando la marcachrome://flags/#enable-unsafe-webgpu
y reiniciando Chrome.No hay un adaptador de GPU que coincida con las opciones pasadas en
requestAdapter()
. Intenta llamar arequestAdapter()
con diferentes opciones.WebGPU requiere una GPU (ya sea hardware o emulada por software). Para verificar si Chrome detecta una GPU, visita
chrome://gpu
.El proceso de la GPU falló varias veces. Puedes volver a cargar la página o reiniciar Chrome. Consulta las prácticas recomendadas para la pérdida de dispositivos WebGPU para obtener más información.
WebGPU es más lento que WebGL
Abre
chrome://gpu
y asegúrate de poder leer "WebGPU: Hardware accelerated". Si ves el mensaje "WebGPU: Solo software, aceleración de hardware no disponible", es posible que debas actualizar los controladores de la GPU.Es posible que la traducción directa de conceptos de WebGL a WebGPU no aproveche por completo las optimizaciones únicas de WebGPU. Consulta De WebGL a WebGPU para conocer algunas de sus diferencias.
Limitaciones específicas de Windows
Ten en cuenta las siguientes limitaciones cuando uses WebGPU en dispositivos Windows:
Chrome no admite el uso de varios adaptadores de GPU de forma simultánea. Consulta el problema chromium:329211593.
Chrome siempre usa el mismo adaptador de GPU que se asignó para otras cargas de trabajo de Chrome, que en las laptops suele ser la tarjeta gráfica integrada, debido al aspecto del uso de energía (es decir, el ahorro de energía). Esto significa que la opción
powerPreference
no tiene ningún impacto cuando se llama arequestAdapter()
.