Novidades da WebGPU (Chrome 136)

François Beaufort
François Beaufort

Publicado em: 23 de abril de 2025

Atributo isFallbackAdapter do GPUAdapterInfo

O atributo booleano isFallbackAdapter do GPUAdapterInfo indica se um GPUAdapter tem limitações significativas de desempenho em troca de maior compatibilidade, 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 conseguiam acessar essas informações pelo atributo adapterInfo em 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 lançou suporte para adaptadores de substituição, isFallbackAdapter sempre será 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 sombreadores no D3D12

A equipe do Chrome continua melhorando o Tint, o compilador de linguagem de shader WebGPU, adicionando uma representação intermediária (IR) para dispositivos que oferecem suporte ao WebGPU com o back-end D3D12. Essa IR, posicionada entre a árvore de sintaxe abstrata (AST) do Tint e o gravador de back-end 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 shaders WGSL do Unity para HLSL.

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

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

Salvar e copiar imagens de tela

Agora, os usuários do Chrome 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…".

Remover restrições do modo de compatibilidade de 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.

Ao solicitar um GPUAdapter com a opção featureLevel: "compatibility", o navegador é instruído a selecionar o modo de compatibilidade experimental do WebGPU. Se for bem-sucedido, o adaptador resultante será "compatibility-defaulting". Caso contrário, será "core-defaulting", 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 padrão principais sempre oferecem suporte ao recurso "core-features-and-limits", que é ativado automaticamente nos GPUDevices criados com eles. Para adaptadores de compatibilidade padrão, o recurso "core-features-and-limits" pode ser compatível e solicitado em GPUDevices criados com eles. 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 recursos 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 amanhecer

O enum status de 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 em geral, caso outro mecanismo de cancelamento seja adicionado mais tarde. Consulte o problema 520.

A enumeração wgpu::PopErrorScopeStatus::EmptyStack, que indica que não foi possível remover a pilha de escopos de erro, foi renomeada como wgpu::PopErrorScopeStatus::Error (que também é mais aplicável de maneira 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 commits.

Novidades no WebGPU

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

Chrome 140

Chrome 139

Chrome 138

Chrome 137

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