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 no GPUDevice. Consulte 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 de fallback, isFallbackAdapter sempre é falso nos dispositivos dos usuários. Estamos investigando se o atributo isFallbackAdapter do GPUAdapter pode ser descontinuado e removido. Consulte a intenção de envio.

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

A equipe do Chrome continua aprimorando o Tint, o compilador de linguagem de sombreador da WebGPU, adicionando uma representação intermediária (IR) para dispositivos que oferecem suporte à 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, 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 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 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 da 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

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" indica ao navegador que selecione o modo de compatibilidade experimental da WebGPU. Se for bem-sucedido, o adaptador resultante será "compatibility-defaulting". Caso contrário, ele 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 de "core-defaulting" sempre oferecem suporte ao recurso "core-features-and-limits", que é ativado automaticamente em GPUDevices criados a partir deles. Para adaptadores de "compatibility-defaulting", 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 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 GPUAdapter featureLevel e isCompatibilityMode foram removidos em favor do recurso "core-features-and-limits". Consulte o problema 395855516.

Atualizações do Dawn

O status de callback enum 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 de 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.

O enum wgpu::PopErrorScopeStatus::EmptyStack que indica que a pilha de escopo de erro não pôde ser removida foi renomeado como wgpu::PopErrorScopeStatus::Error, que também é mais aplicável em 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 exaustiva de commits.

Novidades na WebGPU

Uma lista de tudo o que foi abordado na série Novidades na WebGPU.

Chrome 147-148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

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