Aumentar o limite de maxTextureArrayLayers
O valor máximo permitido para a contagem de profundidade ou camadas de uma textura 2D é 256 por padrão. Agora é possível solicitar até 2048 usando o limite maxTextureArrayLayers quando houver suporte. Confira 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 de upload de buffer para o back-end do Vulkan
Um caminho rápido agora está disponível ao chamar o método writeBuffer() da GPUQueue para o back-end do Vulkan. Agora os dados podem ser gravados diretamente no buffer de destino, eliminando a necessidade de uma cópia e sincronização extra. 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 seja visível para o host e sem operações pendentes da GPU. Consulte o problema 42242084.
Melhorias no tempo de compilação de sombreador
A equipe do Chrome está melhorando a eficiência do Tint, o compilador da linguagem de sombreador do WebGPU. No momento, o Tint modifica a árvore de sintaxe abstrata (AST) do código do sombreador várias vezes antes de gerar o código da 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, junto com back-ends redesenhados que a usam. Essa mudança tem como objetivo acelerar a compilação de shaders.
Essas melhorias, que já estão disponíveis no Android, estão sendo expandidas aos dispositivos ChromeOS que oferecem suporte a WebGPU com o back-end Vulkan. Consulte o problema 42250751.
Os buffers de comando enviados precisam ser exclusivos
Cada GPUCommandBuffer enviado para a GPUQueue com o método submit()
precisa ser exclusivo. Caso contrário, um erro de validação será gerado. Esse foi 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 Dawn
O wrapper C++ webgpu_cpp.h agora é somente de cabeçalho, simplificando o uso e facilitando a integração com wrappers C++ alternativos. Consulte o problema 40195122.
A API C webgpu.h não expõe mais a noção de objetos Swapchain. Essa mudança está alinhada à 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 o WebGPU. Consulte o problema 42241264.
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
- Distâncias de corte na WGSL
- GPUCanvasContext getConfiguration()
- As primitivas de ponto e linha não podem ter viés de profundidade
- Funções integradas de verificação inclusiva para subgrupos
- Suporte experimental para multidraw indireto
- Opção de matemática rigorosa da compilação de módulo de sombreador
- O método requestAdapterInfo() do GPUAdapter foi removido
- Atualizações do Dawn
Chrome 130
- Combinação de duas origens
- Melhorias no tempo de compilação de sombreador no Metal
- Descontinuação do método requestAdapterInfo() do GPUAdapter
- Atualizações do Dawn
Chrome 129
- Suporte a HDR com o modo de mapeamento de tons da tela
- Suporte a subgrupos expandidos
- Atualizações do Dawn
Chrome 128
- Testes com subgrupos
- Descontinuação da configuração de viés de profundidade para linhas e pontos
- Ocultar o aviso do DevTools de erro não capturado 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 o 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 stencil e 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 transmissões de renderização e computaçã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 Dawn
Chrome 120
- Suporte a valores de ponto flutuante de 16 bits na WGSL
- Superar 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 de limpeza geral
Chrome 119
- Texturas flutuantes de 32 bits com filtro
- Formato de vértice unorm10-10-10-2
- Formato de textura rgb10a2uint
- Atualizações do Dawn
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
- Desvincular grupo
- 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 Dawn
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