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

François Beaufort
François Beaufort

Suporte experimental para OpenGL ES no Android

Agora é possível acessar um GPUAdapter do back-end do OpenGL ES ao solicitar o modo de compatibilidade da WebGPU experimental no Chrome para Android. Isso é útil principalmente para dispositivos Android que não têm suporte para o Vulkan 1.1 ou mais recente. Confira o exemplo a seguir e issue dawn:1545.

// Request a GPUAdapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ compatibilityMode: true });
A página de 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, você precisa seguir estas etapas:

  1. Ative as seguintes flags do Chrome: "Suporte não seguro ao WebGPU", "Recursos para desenvolvedores do WebGPU" e "Ativar a linha de comando em dispositivos não enraizados".
  2. Ative a depuração USB no dispositivo Android.
  3. Conecte seu 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

Agora é possível receber informações de identificação sobre um adaptador de maneira síncrona com o atributo info do GPUAdapter. Antes, chamar o método requestAdapterInfo() do GPUAdapter assíncrono era a única maneira de receber informações do adaptador. No entanto, requestAdapterInfo() foi removido da especificação da WebGPU e será removido do Chrome ainda este ano para dar tempo suficiente aos desenvolvedores da Web para fazer a transição necessária. Confira o exemplo a seguir, Status do Chrome e 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 os heaps do WebAssembly transmitidos diretamente para o WebGPU, os tamanhos dos seguintes argumentos do BufferSource não são mais restritos a 2 GB: dynamicOffsetsData em setBindGroup(), origem data em writeBuffer() e origem data Pin writeTexture(). Consulte o problema 339049388.

Melhorias nos erros do codificador de comando

Alguns erros de validação gerados por codificadores de comando agora terão informações contextuais aprimoradas. Por exemplo, a tentativa de iniciar um cartão de computação enquanto um cartão de renderização ainda estava aberto resultou no seguinte erro.

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 causou o erro de validação. O erro a seguir mostra as mensagens aprimoradas, que incluem o comando que acionou o erro. Consulte a mudança 192245.

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

Atualizações do Dawn

A API C webgpu.h não expõe mais wgpuSurfaceGetPreferredFormat(), o equivalente em C de wgpu::Surface::GetPreferredFormat() do Dawn. Em vez disso, use wgpu::Surface::GetCapabilities() para conferir a lista de formatos aceitos e depois formats[0] para conferir 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 plataforma agora estão disponíveis em wgpu::SurfaceCapabilities::usages ao chamar wgpu::Surface::GetCapabilities(). Eles devem sempre incluir wgpu::TextureUsage::RenderAttachment. Consulte o problema 301.

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 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