Novidades da WebGPU (Chrome 122)

François Beaufort
François Beaufort

O número de recursos da WebGPU pode parecer um pouco pequeno desta vez, mas grandes avanços estão chegando! As próximas versões vão incluir recursos como DP4a, texturas de armazenamento somente leitura e leitura/gravação, controle de aspecto de estêncil e profundidade separado, renderização para fatias de textura 3D e melhorias na compilação de sombreadores.

Enquanto isso, aprenda a turbinar os testes de modelos de IA da Web com suporte à WebGPU e ao WebGL na versão headless do Chrome e por que a WebGPU pode estar desativada ou não funcionar no Chrome.

Ampliar o alcance com o modo de compatibilidade (recurso em desenvolvimento)

A WebGPU se alinha bem com as APIs de gráficos modernos (Vulkan, Metal e D3D12), mas alguns dispositivos não oferecem suporte a elas. Isso limita a acessibilidade da WebGPU, especialmente em plataformas como Windows (31% dos usuários do Chrome não têm D3D11.1 ou mais recente), Android (23% não têm Vulkan 1.1 ou mais recente) e ChromeOS (a adoção do Vulkan está aumentando).

A equipe do Chrome está trabalhando em um modo de compatibilidade na WebGPU para resolver esse problema, oferecendo uma versão ligeiramente restrita da WebGPU que funciona em APIs mais antigas, como D3D11 e OpenGL ES. Isso vai ampliar a base de usuários em potencial da WebGPU.

É importante ressaltar que os aplicativos que usam o modo de compatibilidade permanecem aplicativos WebGPU totalmente válidos. Os dispositivos sem suporte ao modo de compatibilidade vão usar o adaptador principal da WebGPU, garantindo uma ampla usabilidade.

Diagrama do modo de compatibilidade do WebGPU.
Alcance ampliado do modo de compatibilidade da WebGPU.

Confira a proposta e comente se tiver dúvidas.

Aumentar o limite de maxVertexAttributes

O número máximo de atributos no total em buffers ao criar um GPURenderPipeline é 16 por padrão. Agora é possível solicitar até 30 usando o limite maxVertexAttributes quando compatível. Consulte o exemplo a seguir e o problema dawn:2223.

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

if (adapter.limits.maxVertexAttributes < 30) {
  // When the desired limit isn't supported, take action to either fall back to
  // a code path that does not require the higher limit or notify the user that
  // their device does not meet minimum requirements.
}

// Request highest limit of max vertex attributes.
const device = await adapter.requestDevice({
  requiredLimits: { maxVertexAttributes: 30 },
});

Atualizações do Dawn

Um novo botão de alternância de instância chamado "expose_wgsl_experimental_features" foi adicionado para que a instância exponha apenas os recursos experimentais da WGSL, mas não os não seguros. Assim, os recursos experimentais seguros da WGSL podem ser usados sem a necessidade de ativar o botão "allow_unsafe_apis". Consulte o problema dawn:2260.

As melhorias recentes nas vinculações do Dawn para Node.js incluem o seguinte:

  • GPUSupportedFeatures::getSize() foi adicionado.
  • A obsolescência do GPUAdapter foi implementada.
  • O GPUInternalError agora é informado corretamente para dispositivos.
  • Os atributos agora são enumeráveis.

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