Aumentar o limite de maxTextureArrayLayers
O valor máximo permitido para a profundidade ou contagem de camadas de uma textura 2D é 256 por padrão. Agora é possível solicitar até 2.048 usando o limite maxTextureArrayLayers quando compatível. Confira o exemplo a seguir e o problema 42241514 (link em inglês).
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 GPUQueue para back-end do Vulkan. Os dados agora podem ser gravados diretamente no buffer de destino, eliminando a 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 de caminho rápido exige que a memória do buffer esteja visível no host e sem operações de GPU pendentes. 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. Atualmente, a tonalidade modifica a árvore de sintaxe abstrata (AST, na sigla em inglês) do código do shader 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) está sendo introduzida, junto com back-ends reformulados que a usam. O objetivo dessa mudança é acelerar a compilação dos sombreadores.
![A criação do pipeline de renderização envolve a conversão da WGSL para SPIR-V com o compilador Tint e a conversão para ISA com o compilador do driver.](https://developer.chrome.com/static/blog/new-in-webgpu-126/image/render-pipeline-creation-diagram.jpg?authuser=19&hl=pt)
Essas melhorias, já acessíveis no Android, estão sendo expandidas progressivamente para dispositivos ChromeOS com suporte à WebGPU com back-end do Vulkan. Consulte o problema 42250751.
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 é gerado. Isso 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 do amanhecer
O wrapper C++ webgpu_cpp.h agora é somente de cabeçalho, simplificando o uso e permitindo uma integração mais fácil com wrappers C++ alternativos. Consulte o problema 40195122.
A API C webgpu.h não expõe mais a noção de objetos de cadeia de troca. Essa mudança está alinhada com a API JavaScript. A configuração interna agora é feita com o 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.
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 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 amostragem de WGSL é interpolada primeiro e
- Atualizações do amanhecer
Chrome 127
- Suporte experimental para OpenGL ES no Android
- Atributo de informações do GPUAdapter
- Melhorias na interoperabilidade do WebAssembly
- Erros aprimorados do codificador de comando
- Atualizações do amanhecer
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
- Subgrupos (recurso em desenvolvimento)
- Renderizar uma fração de textura 3D
- Atualizações do amanhecer
Chrome 124
- Texturas de armazenamento somente leitura e leitura/gravação
- Suporte aos 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 irrestritos na WGSL
- Sintaxe de açúcar para desreferenciar compostos na WGSL (link em inglês)
- Estado somente leitura separado para aspectos de estêncil e de profundidade
- Atualizações do amanhecer
Chrome 122
- Expandir o alcance com o modo de compatibilidade (recurso em desenvolvimento)
- Aumentar o limite de maxVertexAttributes
- Atualizações do amanhecer
Chrome 121
- Suporte à 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
Chrome 120
- Suporte para valores de ponto flutuante de 16 bits na WGSL
- Supere os limites
- Mudanças no estado de profundidade do estêncil
- Atualizações de informações sobre os adaptadores
- Quantização de consultas de carimbo de data/hora
- Recursos para fazer faxina
Chrome 119
- Texturas flutuantes filtráveis de 32 bits
- Formato de vértice unorm10-10-10-2
- Formato de textura rgb10a2uint
- Atualizações do amanhecer
Chrome 118
- Compatibilidade de HTMLImageElement e ImageData em
copyExternalImageToTexture()
- Suporte experimental à textura de armazenamento somente leitura e leitura-gravação
- Atualizações do amanhecer
Chrome 117
- Não definir buffer de vértice
- Cancelar configuração do grupo de vinculação
- Silenciar erros da criação de pipeline assíncrono quando o dispositivo for perdido
- Atualizações da criação do módulo de sombreador SPIR-V
- Como melhorar a experiência do desenvolvedor
- Pipelines em cache com layout gerado automaticamente
- Atualizações do amanhecer
Chrome 116
- Integração com WebCodecs
- Dispositivo perdido retornado pelo GPUAdapter
requestDevice()
- Manter a reprodução de vídeo suave se
importExternalTexture()
for chamado - Conformidade com especificações
- Como melhorar a experiência do desenvolvedor
- Atualizações do amanhecer
Chrome 115
- Extensões de idiomas da WGSL compatíveis
- Suporte experimental para Direct3D 11
- Receber uma GPU discreta por padrão com alimentação CA
- Como melhorar a experiência do desenvolvedor
- Atualizações do amanhecer
Chrome 114
- Otimizar o JavaScript
- getCurrentTexture() em uma tela não configurada gera InvalidStateError
- Atualizações da WGSL
- Atualizações do amanhecer