Aumentar o limite de maxTextureArrayLayers
Por padrão, o valor máximo permitido para a contagem de profundidade ou de camadas de uma textura 2D é 256. Agora é possível solicitar até 2.048 usando o limite maxTextureArrayLayers quando compatível. Consulte o exemplo a seguir e o problema 42241514.
const adapter = await navigator.gpu.requestAdapter();
if (adapter.limits.maxTextureArrayLayers < 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 texture array layers attributes.
const device = await adapter.requestDevice({
requiredLimits: { maxTextureArrayLayers: 2048 }
});
Otimização do upload de buffer para back-end do Vulkan
Um caminho rápido agora está disponível ao chamar o método writeBuffer() da fila GPU para o back-end Vulkan. Agora os dados podem ser gravados diretamente no buffer de destino, sem necessidade de cópia e sincronização extras. Essa otimização reduz o tráfego de memória necessário para fazer upload de dados para a GPU.
A otimização do caminho rápido exige que a memória do buffer seja visível pelo host e sem nenhuma operação de GPU pendente. Consulte o problema 42242084.
Melhorias no tempo de compilação do sombreador
A equipe do Chrome está melhorando a eficiência do Tint, o compilador da linguagem de sombreador da WebGPU. No momento, o Tint modifica a árvore de sintaxe abstrata (AST, na sigla em inglês) do código do sombreador várias vezes antes de gerar o código de máquina, um processo que consome muitos recursos em algumas plataformas. Para otimizar isso, uma nova representação intermediária (IR, na sigla em inglês) está sendo introduzida, bem como os back-ends reformulados que a usam. Essa mudança visa acelerar a compilação de sombreadores.
Essas melhorias, já acessíveis no Android, estão sendo expandidas progressivamente para dispositivos ChromeOS que oferecem suporte à WebGPU com o back-end Vulkan. Consulte o problema 42250751 (link em inglês).
Os buffers de comando enviados precisam ser exclusivos
Cada GPUCommandBuffer enviado à GPUQueue com o método submit()
precisa ser exclusivo. Caso contrário, um erro de validação será gerado. Esse era um bug de especificação. Consulte o problema 42241492.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const commandEncoder = device.createCommandEncoder();
const commandBuffer = commandEncoder.finish();
device.queue.submit([commandBuffer, commandBuffer]);
// ⚠️ Validation fails because command buffers are not unique.
Atualizações ao amanhecer
O wrapper C++ webgpu_cpp.h agora é somente de cabeçalho, o que simplifica o uso e facilita a integração com wrappers C++ alternativos. Consulte o problema 40195122 (link em inglês).
A API C webgpu.h não expõe mais a noção de objetos Swapchain. Essa mudança foi feita para que fique bem alinhada com a API JavaScript. A configuração interna agora é feita pelo método Configure()
do novo objeto wgpu::Surface
, que está sujeito a modificações futuras Confira um exemplo na documentação Criar um app com a WebGPU. Consulte o problema 42241264 (link em inglês).
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 126
- Aumentar o limite de maxTextureArrayLayers
- Otimização do upload de buffer para back-end do Vulkan
- Melhorias no tempo de compilação do sombreador
- Os buffers de comando enviados precisam ser exclusivos
- Atualizações do amanhecer
Chrome 125
Chrome 124
- Texturas de armazenamento somente leitura e leitura/gravação
- Suporte para service workers e workers compartilhados
- Novos atributos de informações do adaptador
- Correções de bugs
- Atualizações do amanhecer
Chrome 123
- Suporte para funções integradas do DP4a na WGSL
- Parâmetros de ponteiro irrestrito na WGSL
- Simplificação da sintaxe para desreferenciar compostos na WGSL
- Separar o estado somente leitura para aspectos de estêncil e profundidade
- Atualizações do amanhecer
Chrome 122
- Expandir o alcance com o modo de compatibilidade (recurso em desenvolvimento)
- Aumentar o limite maxVertexAttributes
- Atualizações do amanhecer
Chrome 121
- Suporte para WebGPU no Android
- Usar DXC em vez de FXC para compilação de sombreador 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 GPUExternalTexture
- Informações sobre heaps de memória
- Atualizações do amanhecer
Google Chrome 120
- Suporte para valores de ponto flutuante de 16 bits na WGSL
- Supere os limites
- Mudanças no estado do estêncil de profundidade
- Atualizações de informações sobre os adaptadores
- Quantização de consultas de carimbo de data/hora
- Recursos para limpeza de primavera
Chrome 119
- Texturas flutuantes de 32 bits filtráveis
- Formato de vértice unorm10-10-10-2
- Formato de textura rgb10a2uint
- Atualizações do amanhecer
Chrome 118
- Suporte para HTMLImageElement e ImageData no
copyExternalImageToTexture()
- Suporte experimental para textura de leitura/gravação e armazenamento somente leitura
- Atualizações do amanhecer
Chrome 117
- Buffer de vértice não definido
- Grupo de vinculação não definido
- Silenciar erros da criação de pipeline assíncrono quando o dispositivo é perdido
- Atualizações na criação do módulo de sombreador SPIR-V
- Melhorias na experiência do desenvolvedor
- Pipelines de armazenamento em cache com layout gerado automaticamente
- Atualizações do amanhecer
Chrome 116
- Integração do WebCodecs
- Dispositivo perdido retornado pelo GPUAdapter
requestDevice()
- Manter a reprodução do vídeo suave se
importExternalTexture()
for chamado - Conformidade com especificações
- Melhorias na experiência do desenvolvedor
- Atualizações do amanhecer
Chrome 115
- Extensões de idioma da WGSL compatíveis
- Suporte experimental para Direct3D 11
- Receber GPU discreta por padrão com alimentação CA
- Melhorias na experiência do desenvolvedor
- Atualizações do amanhecer
Chrome 114
- Optimize JavaScript
- getCurrentTexture() na tela não configurada gera InvalidStateError.
- Atualizações da WGSL
- Atualizações do amanhecer