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 é especialmente útil para dispositivos Android sem suporte para 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 });
Como esse recurso ainda está em fase experimental, você precisa seguir estas etapas:
- 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".
- Ative a depuração USB no dispositivo Android.
- 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 forma 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 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 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 no codificador de comandos
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 superfície agora estão disponíveis por 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 130
- Combinação de duas origens
- Melhorias no tempo de compilação do sombreador no Metal
- Descontinuação do método requestAdapterInfo() do GPUAdapter
- Atualizações do Dawn
Chrome 129
- Suporte a HDR com modo de mapeamento de tons de tela
- Suporte a subgrupos expandidos
- Atualizações do Dawn
Chrome 128
- Fazendo testes com subgrupos
- Suspender o uso da configuração de viés de profundidade para linhas e pontos
- Ocultar aviso de erro não capturado do DevTools se preventDefault
- A WGSL interpola a amostragem primeiro e
- Atualizações do Dawn
Chrome 127
- Suporte experimental para OpenGL ES no Android
- Atributo de informações do GPUAdapter
- Melhorias na interoperabilidade do WebAssembly
- Melhoria nos erros do codificador de comando
- Atualizações do Dawn
Chrome 126
- Aumento do limite de maxTextureArrayLayers
- Otimização do upload de buffer para back-end do Vulkan
- Melhorias no tempo de compilação de sombreador
- Os buffers de comando enviados precisam ser exclusivos
- Atualizações do Dawn
Chrome 125
Chrome 124
- Texturas de armazenamento somente leitura e leitura/gravação
- Suporte a service workers e workers compartilhados
- Novos atributos de informações do adaptador
- Correções de bugs
- Atualizações do Dawn
Chrome 123
- Suporte a funções integradas do DP4a no WGSL
- Parâmetros de ponteiro irrestrito na WGSL
- Açúcar sintático para desreferenciar compósitos na WGSL
- Estado somente leitura separado para aspectos de estêncil e de profundidade
- Atualizações do Dawn
Chrome 122
- Ampliar o alcance com o modo de compatibilidade (recurso em desenvolvimento)
- Aumento do limite de maxVertexAttributes
- Atualizações do Dawn
Chrome 121
- Suporte à WebGPU no Android
- Usar DXC em vez de FXC para a compilação de shaders no Windows
- Consultas de carimbo de data/hora em passagens de computação e renderização
- Pontos de entrada padrão para módulos de sombreador
- Suporte a display-p3 como espaço de cores de GPUExternalTexture
- Informações sobre pilhas de memória
- Atualizações do amanhecer
Chrome 120
- Suporte a valores de ponto flutuante de 16 bits na WGSL
- Supere os limites
- Mudanças no estado do stencil de profundidade
- Atualizações das informações do adaptador
- Quantização de consultas de carimbo de data/hora
- Recursos para fazer faxina
Chrome 119
- Texturas flutuantes de 32 bits com filtro
- Formato de vértice unorm10-10-10-2
- Formato de textura rgb10a2uint
- Atualizações do amanhecer
Chrome 118
- Suporte a HTMLImageElement e ImageData em
copyExternalImageToTexture()
- Suporte experimental para textura de armazenamento de leitura/gravação e somente leitura
- Atualizações do Dawn
Chrome 117
- Buffer de vértice não definido
- Cancelar configuração do grupo de vinculação
- Silenciar erros da criação de pipeline assíncrono quando o dispositivo é perdido
- Atualizações na criação de módulos de sombreador SPIR-V
- Como melhorar a experiência do desenvolvedor
- Armazenamento em cache de pipelines com layout gerado automaticamente
- Atualizações do Dawn
Chrome 116
- Integração com o WebCodecs
- Dispositivo perdido retornado por GPUAdapter
requestDevice()
- Manter a reprodução de vídeo suave se
importExternalTexture()
for chamado - Conformidade com as especificações
- Como melhorar a experiência do desenvolvedor
- Atualizações do amanhecer
Chrome 115
- Extensões de linguagem WGSL com suporte
- Suporte experimental para Direct3D 11
- Acessar a GPU discreta por padrão na alimentação CA
- Como melhorar a experiência do desenvolvedor
- Atualizações do Dawn
Chrome 114
- Otimizar o JavaScript
- getCurrentTexture() em uma tela não configurada gera um erro InvalidStateError
- Atualizações da WGSL
- Atualizações do Dawn