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.
navigator.gpu no está definido
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:
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.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:
ofile:
), usa el protocolo segurohttps:
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
ohttp://127.0.0.1
con cualquiera de estos comandos:npx http-server
opython3 -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:
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.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
. Para obtener más información, consulta la compatibilidad con WebGPU en Chrome sin interfaz gráfica.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 marcachrome://flags/#enable-unsafe-webgpu
y reinicias Chrome.No hay un adaptador de GPU que coincida para las opciones que se pasaron en
requestAdapter()
. Intenta llamar arequestAdapter()
con otras opciones.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
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.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 arequestAdapter()
.