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

François Beaufort
François Beaufort

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 siempre que sea posible.

En el siguiente ejemplo, se muestra un error de JavaScript que puedes 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. Mira 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. Por el momento, no se puede acceder a WebGPU desde un service worker o compartido. Si usas un service worker o un trabajador compartido, mueve tu código de WebGPU a un trabajador dedicado o al contexto de la ventana global.

  3. Solo se puede acceder a WebGPU en contextos seguros. Si entregas tu código mediante un protocolo no seguro (por ejemplo, http:, file:), usa el protocolo seguro https: o respóndelo durante el desarrollo de tu app web de una de las siguientes maneras:

    • Entrega tu código de forma 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 lista "Los orígenes no seguros se consideran 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. Seguirás recibiendo una advertencia en Chrome que puedes omitir haciendo clic en "Configuración avanzada" y, luego, en "Continuar a...".

    • Usa ngrok para exponer tu servidor web local a Internet.

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 alguno de los siguientes motivos. Mira los que están en este orden específico:

  1. WebGPU se inhabilita cuando el usuario desactiva la opción "Usar la 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

  2. WebGPU aún no es compatible con esta plataforma. Puedes habilitar la función experimental chrome://flags/#enable-unsafe-webgpu y reiniciar Chrome. Para obtener compatibilidad experimental con Linux, también deberás habilitar la marca chrome://flags/#enable-vulkan. Consulta la compatibilidad con WebGPU en Headless Chrome para obtener más información.

  3. El hardware de la GPU se incluyó específicamente en la lista de entidades bloqueadas. Si ves el mensaje "WebGPU se inhabilitó a través de la lista de elementos bloqueados o la línea de comandos" en chrome://gpu, puedes inhabilitar la lista de entidades bloqueadas de adaptadores de WebGPU habilitando la marca chrome://flags/#enable-unsafe-webgpu y reiniciando Chrome.

  4. No hay ningún adaptador de GPU que coincida con las opciones que se pasaron en requestAdapter(). Intenta llamar a requestAdapter() con diferentes 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 puedes leer "WebGPU: Hardware Accelerated". Si lees "WebGPU: Solo software, aceleración de hardware no disponible", es posible que debas actualizar los controladores de GPU.

  2. Es posible que la traducción directa de los conceptos de WebGL a WebGPU no aproveche al máximo las optimizaciones únicas de WebGPU. Consulta De WebGL a WebGPU para obtener información sobre 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ó para otras cargas de trabajo de Chrome, que para las laptops suele ser la tarjeta gráfica integrada, debido al aspecto del consumo de energía (es decir, del ahorro de energía). Significa que la opción powerPreference no tiene ningún impacto cuando se llama a requestAdapter().