Este documento explica por que a WebGPU pode não funcionar ou não funcionar conforme o esperado no navegador Chrome, com etapas claras para resolver os problemas, quando possível.
navigator.gpu está indefinido
O exemplo a seguir mostra um erro de JavaScript que pode ocorrer quando gpu
não está disponível em navigator
:
const adapter = await navigator.gpu.requestAdapter();
cancel Uncaught TypeError: Cannot read properties of undefined (reading 'requestAdapter')
Isso pode ocorrer devido a um dos motivos a seguir. Confira nesta ordem específica:
A WebGPU exige o Chrome 113 ou mais recente no ChromeOS, macOS, Windows e o Chrome 121 ou mais recente no Android. Confira sua versão em
chrome://version
e atualize se necessário.A WebGPU só é acessível para contextos seguros. Se você enviar o código por um protocolo não seguro (por exemplo,
http:
,file:
), use o protocolohttps:
seguro ou resolva o problema durante o desenvolvimento do app da Web de uma das seguintes maneiras:Forneça seu código localmente em
http://localhost
ouhttp://127.0.0.1
com um destes comandos:npx http-server
oupython3 -m http.server
.Adicione a origem à lista "Origens não seguras tratadas como seguras" de
chrome://flags/#unsafely-treat-insecure-origin-as-secure
e reinicie o Chrome.Instale o Node.js e execute
npx servez --ssl
para disponibilizar a pasta em https com um certificado falso. Você ainda vai receber um aviso no Chrome, mas pode ignorá-lo clicando em "Avançado" e depois em "Continuar para...".Exponha seu servidor da Web local à Internet com o ngrok.
O adaptador da GPU é nulo
Confira a seguir um exemplo de erro de JavaScript que pode ocorrer quando o adaptador recebido ao chamar requestAdapter()
é nulo:
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
cancel Uncaught TypeError: Cannot read properties of undefined (reading requestDevice)
Isso acontece por um dos seguintes motivos. Confira nesta ordem específica:
A WebGPU fica desativada quando o usuário desativa a opção "Usar aceleração gráfica quando disponível" em
chrome://settings/system
. Verifique se essa configuração está desativada e ative-a novamenteO WebGPU ainda não é compatível com essa plataforma. Ative a flag
chrome://flags/#enable-unsafe-webgpu
e reinicie o Chrome. Para oferecer suporte experimental do Linux, também será necessário ativar a flagchrome://flags/#enable-vulkan
. Confira o suporte ao WebGPU no Chrome sem cabeça para saber mais.O hardware da GPU foi especificamente incluído na lista de bloqueio. Se a mensagem "O WebGPU foi desativado pela lista de bloqueio ou pela linha de comando" aparecer em
chrome://gpu
, você pode desativar a lista de bloqueio dos adaptadores do WebGPU ativando a flagchrome://flags/#enable-unsafe-webgpu
e reiniciando o Chrome.Não há adaptador de GPU correspondente para as opções transmitidas em
requestAdapter()
. Tente chamarrequestAdapter()
com opções diferentes.A WebGPU requer uma GPU (seja hardware ou emulado por software). Para verificar se o Chrome detecta uma GPU, acesse
chrome://gpu
.O processo da GPU falhou várias vezes. Você pode atualizar a página ou reiniciar o Chrome. Confira as práticas recomendadas para perda de dispositivo da WebGPU para saber mais.
A WebGPU é mais lenta que a WebGL
Abra
chrome://gpu
e confira se você consegue ler "WebGPU: Hardware Accelerated". Se você ler "WebGPU: Somente software, aceleração de hardware indisponível", talvez seja necessário atualizar os drivers da GPU.A tradução direta de conceitos do WebGL para o WebGPU pode não aproveitar totalmente as otimizações exclusivas do WebGPU. Confira Da WebGL para a WebGPU para saber mais sobre algumas das diferenças.
Limitações específicas do Windows
Esteja ciente das seguintes limitações ao usar a WebGPU em dispositivos Windows:
O Chrome não oferece suporte ao uso de vários adaptadores de GPU simultaneamente. Consulte problema chromium:329211593.
O Chrome sempre usa o mesmo adaptador de GPU alocado para outras cargas de trabalho do Chrome, que, para laptops, geralmente é a placa de vídeo integrada, devido ao aspecto de uso de energia (por exemplo, economia de energia). Isso significa que a opção
powerPreference
não tem nenhum impacto ao chamarrequestAdapter()
.