WebGPU: Sugerencias y soluciones para la solución de problemas

François Beaufort
François Beaufort

En este documento, se explica por qué WebGPU no funciona o no funciona como se espera en el navegador Chrome, con pasos claros para resolver los problemas siempre que sea posible.

En el siguiente ejemplo, se muestra un error de JavaScript que podrías recibir 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 alguno de los siguientes motivos. Echa un vistazo a los que están en este orden específico:

  1. WebGPU requiere Chrome 113 o una versión posterior en ChromeOS, macOS, Windows y Chrome 121 o versiones posteriores en Android. Verifica tu versión en chrome://version y actualízala si es necesario.

  2. Solo se puede acceder a WebGPU en contextos seguros. Si publicas tu código a través de un protocolo no seguro (por ejemplo, http: o file:), usa el protocolo seguro https: o aborda esto durante el desarrollo de tu app web de una de las siguientes maneras:

    • Entrega tu código de manera local en http://localhost o http://127.0.0.1 con cualquiera de estos comandos: npx http-server o python3 -m http.server.

    • Agrega el origen a la sección “Orígenes no seguros tratados como seguros” lista 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. Seguirás recibiendo una advertencia en Chrome que puedes omitir haciendo clic en "Avanzado" y, luego, "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 cuando llamas 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. Echa un vistazo a los que están en este orden específico:

  1. WebGPU se inhabilita cuando el usuario desactiva la opción “Usar aceleración de gráficos cuando esté disponible” en chrome://settings/system. Revisa si este parámetro de configuración está desactivado y vuelve a activarlo.

  2. 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 marca chrome://flags/#enable-vulkan. Para obtener más información, consulta la compatibilidad con WebGPU en Chrome sin interfaz gráfica.

  3. El hardware de la GPU se incluyó específicamente en la lista de entidades bloqueadas. Aparece el mensaje "WebGPU se inhabilitó mediante la lista de entidades bloqueadas o la línea de comandos" En chrome://gpu, puedes inhabilitar la lista de entidades bloqueadas de adaptadores de WebGPU si habilitas la marca chrome://flags/#enable-unsafe-webgpu y reinicias Chrome.

  4. No hay un adaptador de GPU que coincida para las opciones que se pasaron en requestAdapter(). Intenta llamar a requestAdapter() con otras opciones.

  5. WebGPU requiere una GPU (emulada por hardware o software). Para comprobar si Chrome detecta una GPU, visita chrome://gpu.

WebGPU es más lenta que WebGL

  1. Abre chrome://gpu y asegúrate de que puedas leer "WebGPU: Hardware acelerado". Si ves el mensaje "WebGPU: Solo software, aceleración de hardware no disponible", es posible que debas actualizar los controladores de la GPU.

  2. Es posible que traducir directamente los conceptos de WebGL a WebGPU no esté aprovechando al máximo 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 con Windows:

  • Chrome no admite el uso simultáneo de varios adaptadores de GPU. Consulta el problema chromium:329211593.

  • Chrome siempre usa el mismo adaptador de GPU que se asignó a otras cargas de trabajo de Chrome, que, en el caso de las laptops, suele ser la tarjeta gráfica integrada, debido al aspecto del consumo de energía (es decir, el ahorro de energía). Significa que la opción powerPreference no tiene ningún impacto cuando se llama a requestAdapter().