Este documento explica por que a WebGPU pode estar inoperante ou não funcionar como esperado no navegador Chrome, com etapas claras para resolver os problemas sempre que 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 no 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 abaixo. Confira-os nesta ordem específica:
A WebGPU exige o Chrome 113 ou mais recente no ChromeOS, macOS, Windows e Chrome 121 ou mais recente no Android. Verifique sua versão em
chrome://version
e atualize, se necessário.No momento, a WebGPU não pode ser acessada de um service worker ou um worker compartilhado. Se estiver usando um service worker ou um worker compartilhado, mova o código da WebGPU para um worker dedicado ou o contexto da janela global.
A WebGPU só pode ser acessada por contextos seguros. Se você disponibilizar o código usando um protocolo não seguro (por exemplo,
http:
oufile:
), use o protocolohttps:
seguro ou resolva isso durante o desenvolvimento do app da Web de uma das seguintes maneiras:Disponibilize 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" do
chrome://flags/#unsafely-treat-insecure-origin-as-secure
e reinicie o Chrome.Instale o Node.js e execute
npx servez --ssl
para disponibilizar sua pasta por https com um certificado falso. Você ainda receberá um aviso no Chrome, que pode ser ignorado clicando em "Avançado" e depois em "Continuar para...".Exponha seu servidor da Web local à Internet com o ngrok.
O adaptador de GPU é nulo
Confira abaixo 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 motivos a seguir. Confira-os nesta ordem específica:
A WebGPU é 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 novamenteA WebGPU ainda não é compatível com esta plataforma. Você pode ativar a sinalização
chrome://flags/#enable-unsafe-webgpu
e reiniciar o Chrome. Para suporte experimental do Linux, também será necessário ativar a flagchrome://flags/#enable-vulkan
. Confira o suporte da WebGPU no Headless Chrome para saber mais.O hardware da GPU foi especificamente incluído na lista de bloqueio. Se a mensagem "A WebGPU foi desativada pela lista de bloqueio ou pela linha de comando" for exibida em
chrome://gpu
, você poderá desativar a lista de bloqueio dos adaptadores da WebGPU ativando a sinalizaçãochrome://flags/#enable-unsafe-webgpu
e reiniciando o Chrome.Não há um adaptador de GPU correspondente para as opções transmitidas em
requestAdapter()
. Tente ligar pararequestAdapter()
com opções diferentes.A WebGPU exige uma GPU (emulada por hardware ou software). Acesse
chrome://gpu
para verificar se o Chrome detecta uma GPU.
A WebGPU é mais lenta que a WebGL
Abra
chrome://gpu
e confira se você consegue ler "WebGPU: Hardware acelerada". 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 WebGL para a WebGPU pode não estar aproveitando ao máximo as otimizações exclusivas da WebGPU. Acesse Do WebGL para a WebGPU para aprender 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 o problema chromium:329211593.
O Chrome sempre usa o mesmo adaptador de GPU alocado para outras cargas de trabalho do Chrome. Para laptops, geralmente é a placa de vídeo integrada, devido ao aspecto do uso de energia (ou seja, economia de energia). Isso significa que a opção
powerPreference
não tem nenhum impacto ao chamarrequestAdapter()
.