Novidades da WebGPU (Chrome 136)

François Beaufort
François Beaufort

Publicado em 23 de abril de 2025

Atributo isFallbackAdapter de GPUAdapterInfo

O atributo booleano isFallbackAdapter do GPUAdapterInfo indica se um GPUAdapter tem limitações de desempenho significativas em troca de compatibilidade mais ampla, comportamento mais previsível ou privacidade aprimorada. Essa adição foi necessária porque as bibliotecas que usam objetos GPUDevice fornecidos pelo usuário não podiam acessar essas informações pelo atributo adapterInfo no GPUDevice. Confira o exemplo a seguir e o problema 403172841.

const adapter = await navigator.gpu.requestAdapter();

if (adapter?.info.isFallbackAdapter) {
  // The returned adapter is a software-backed fallback adapter, which
  // may have significantly lower performance and fewer features.
}

Como o Chrome ainda não oferece suporte a adaptadores substitutos, isFallbackAdapter está sempre definido como falso nos dispositivos dos usuários. Estamos investigando se o atributo isFallbackAdapter do GPUAdapter pode ser descontinuado e removido. Consulte intenção de envio.

Melhorias no tempo de compilação de sombreador no D3D12

A equipe do Chrome continua melhorando o Tint, o compilador de linguagem de sombreador da WebGPU, adicionando uma representação intermediária (IR) para dispositivos compatíveis com a WebGPU com o back-end D3D12. Esse IR, posicionado entre a árvore de sintaxe abstrata (AST) do Tint e o gravador de back-end do HLSL, vai tornar o compilador mais eficiente e fácil de manter, beneficiando desenvolvedores e usuários. Os testes iniciais mostram que a nova versão do Tint é até 10 vezes mais rápida ao traduzir os sombreadores WGSL do Unity para HLSL.

Um fluxograma mostra o processo de conversão do código do sombreador WGSL em instruções de GPU de baixo nível.
Criação de pipeline de renderização no Windows.

Essas melhorias, que já estão disponíveis no Android, no ChromeOS e no macOS, estão sendo expandidas progressivamente para dispositivos Windows que oferecem suporte à WebGPU com o back-end D3D12. Consulte o problema 42251045.

Salvar e copiar imagens de tela

Os usuários do Chrome agora podem clicar com o botão direito do mouse em uma tela do WebGPU e acessar as opções do menu de contexto Salvar imagem como… ou Copiar imagem. Consulte o problema 40902474.

O
O usuário selecionou o menu de contexto "Salvar imagem como…".

Restrições do modo de compatibilidade do Lift

O recurso experimental "core-features-and-limits", quando disponível em um GPUDevice, remove todas as restrições do modo de compatibilidade (recursos e limites) quando a flag chrome://flags/#enable-unsafe-webgpu está ativada. Consulte o problema 395855517.

Solicitar um GPUAdapter com a opção featureLevel: "compatibility" sugere ao navegador que selecione o modo de compatibilidade experimental da WebGPU. Se for bem-sucedido, o adaptador resultante será "padrão de compatibilidade". Caso contrário, o padrão é o "núcleo", que é o mesmo que usar a opção featureLevel: "core". Além disso, chamar requestDevice() sem requiredFeatures e requiredLimits solicita um GPUDevice com os recursos padrão do GPUAdapter.

Os adaptadores com padrão de núcleo sempre oferecem suporte ao recurso "core-features-and-limits", que é ativado automaticamente em GPUDevices criados a partir deles. Para adaptadores com compatibilidade padrão, o recurso "core-features-and-limits" pode ser compatível e pode ser solicitado em GPUDevices criados a partir deles. Os dois tipos de adaptadores também podem oferecer suporte a recursos como "float32-blendable", que é opcional nos modos principal e de compatibilidade.

O exemplo a seguir é para um aplicativo que exige "float32-blendable" e oferece suporte ao uso de recursos principais, se disponíveis, mas usa apenas recursos de compatibilidade se os principais não estiverem disponíveis.

const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });

if (!adapter || !adapter.features.has("float32-blendable")) {
  throw new Error("32-bit float textures blending support is not available");
}

const requiredFeatures = [];
if (adapter.features.has("core-features-and-limits")) {
  requiredFeatures.push("core-features-and-limits");
}

const device = await adapter.requestDevice({ requiredFeatures });

if (!device.features.has("core-features-and-limits")) {
  // Compatibility mode restrictions validation rules will apply.
}

Os atributos experimentais featureLevel e isCompatibilityMode do GPUAdapter foram removidos em favor do recurso "core-features-and-limits". Consulte o problema 395855516.

Atualizações do Dawn

O tipo enumerado status do callback InstanceDropped foi renomeado como CallbackCancelled para esclarecer que o callback foi cancelado, mas o processamento em segundo plano associado ao evento, como a compilação do pipeline, ainda pode estar em execução. O novo nome é mais aplicável de forma geral, caso outro mecanismo de cancelamento seja adicionado mais tarde. Consulte o problema 520.

O tipo enumerado wgpu::PopErrorScopeStatus::EmptyStack que indica que a pilha de escopo de erro não pode ser aberta foi renomeado como wgpu::PopErrorScopeStatus::Error, que também é mais aplicável de forma geral. O callback agora também inclui uma mensagem de explicação de erro correspondente para ajudar na depuração. Consulte o problema 369.

Isso abrange apenas alguns dos principais destaques. Confira a lista completa de confirmações.

Novidades na WebGPU

Uma lista de tudo o que foi abordado na série O que há de novo na WebGPU.

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113