O que há de novo na WebGPU (Chrome 127)

François Beaufort
François Beaufort

Suporte experimental para OpenGL ES no Android

Agora você pode acessar um GPUAdapter no back-end do OpenGL ES ao solicitar o modo de compatibilidade com a WebGPU experimental no Chrome para Android. Isso é especialmente útil para dispositivos Android sem suporte para Vulkan 1.1 ou mais recente. Confira o exemplo a seguir e o problema dawn:1545 (link em inglês).

// Request a GPUAdapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ compatibilityMode: true });
A página do relatório da WebGPU mostra informações do GPUAdapter do back-end do OpenGL ES no dispositivo Android.
Informações do adaptador OpenGL ES em webgpureport.org

Como esse recurso ainda está em fase experimental, será necessário seguir estas etapas:

  1. Ative as seguintes sinalizações do Chrome: "Suporte a WebGPU não segura", "Recursos de desenvolvedor da WebGPU" e "Ativar linha de comando em dispositivos sem acesso root".
  2. Ative a depuração USB no dispositivo Android.
  3. Conecte o dispositivo Android à estação de trabalho, execute adb shell 'echo "_ --use-webgpu-adapter=opengles" > /data/local/tmp/chrome-command-line' para preferir o back-end do OpenGL ES em vez do Vulkan e reinicie o Chrome.

Atributo de informações do GPUAdapter

A coleta de informações de identificação sobre um adaptador agora pode ser feita de forma síncrona com o atributo info do GPUAdapter. Antes, chamar o método assíncrono requestAdapterInfo() da GPUAdapter era a única maneira de receber informações do adaptador. No entanto, a requestAdapterInfo() foi removida da especificação da WebGPU e será removida do Chrome ainda este ano para que os desenvolvedores Web tenham tempo suficiente para fazer a transição necessária. Confira o exemplo a seguir, Status do Chrome e o problema 335383516.

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

// During the transition period, you can use the following:
// const info = adapter.info || await adapter.requestAdapterInfo();

console.log(`Vendor: ${info.vendor}`); // "arm"
console.log(`Architecture: ${info.architecture}`); // "valhall"

Melhorias na interoperabilidade do WebAssembly

Para acomodar heaps WebAssembly transmitidos diretamente para a WebGPU, os tamanhos dos seguintes argumentos BufferSource não estão mais restritos a 2 GB: dynamicOffsetsData em setBindGroup(), origem data em writeBuffer() e Pin de data de origem writeTexture(). Consulte o problema 339049388.

Melhorias no codificador de comandos

Agora, alguns erros de validação gerados nos codificadores de comando terão informações contextuais aprimoradas. Por exemplo, a tentativa de iniciar uma passagem de computação enquanto uma passagem de renderização ainda estava aberta resultou no erro a seguir.

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
    at CheckCurrentEncoder (..\..\third_party\dawn\src\dawn\native\EncodingContext.h:106)

Isso descreve o motivo do erro, mas não indica qual chamada realmente causou o erro de validação. O erro a seguir mostra a mensagem aprimorada, que inclui o comando que acionou o erro. Veja a mudança 192245 (link em inglês).

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
 - While encoding [CommandEncoder (unlabeled)].BeginComputePass([ComputePassDescriptor]).

Atualizações do amanhecer

A API C webgpu.h não expõe mais wgpuSurfaceGetPreferredFormat(), o equivalente em C do wgpu::Surface::GetPreferredFormat() da Dawn. Em vez disso, use wgpu::Surface::GetCapabilities() para ver a lista de formatos com suporte e formats[0] para acessar o formato de textura preferido para essa superfície. Enquanto isso, chamar wgpu::Surface::GetPreferredFormat() emite um aviso de descontinuação. Consulte o problema 290.

Os usos de textura com suporte de uma superfície agora estão disponíveis por wgpu::SurfaceCapabilities::usages ao chamar wgpu::Surface::GetCapabilities(). É esperado que elas sempre incluam wgpu::TextureUsage::RenderAttachment. Consulte o problema 301.

Isso cobre apenas alguns dos principais destaques. Confira a lista completa de confirmações (link em inglês).

Novidades da WebGPU

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

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