Extensões de linguagem WGSL com suporte
O membro wgslLanguageFeatures
do objeto GPU
lista os nomes das extensões de idioma da WGSL com suporte. As extensões de linguagem WGSL com suporte são ativadas automaticamente. Portanto, não é necessário solicitar uma explicitamente. No momento, essa lista está vazia, mas você pode esperar muitas delas no futuro (por exemplo, do-while loops
). Consulte issue dawn:1777.
if (navigator.gpu.wgslLanguageFeatures?.has("unknown-feature")) {
// Use unknown-feature in WGSL shader code.
}
Suporte experimental para Direct3D 11
A equipe do Chromium está trabalhando para adicionar suporte à WebGPU para Direct3D 11. Agora você pode testar localmente executando o Chrome no Windows com as flags de linha de comando --enable-unsafe-webgpu --use-webgpu-adapter=d3d11
. Consulte issue dawn:1705.
Receber GPU discreta por padrão na alimentação CA
Em dispositivos macOS com GPU dupla, se requestAdapter()
for chamado sem uma opção powerPreference
, a GPU discreta será retornada quando o dispositivo do usuário estiver em alimentação CA. Caso contrário, a GPU integrada é retornada. Consulte a mudança 4499307.
Melhorar a experiência do desenvolvedor
Novos avisos do DevTools
Se a chave depth
for usada em um GPUExtend3DDict
, um aviso será mostrado no console do DevTools, porque a chave correta é depthOrArrayLayers
. Consulte o problema chromium:1440900.
Um aviso também é gerado se um GPUBlendComponent
tiver uma mistura de membros explícitos e padrão. Consulte o problema dawn:1785.
Embora os envios e os draws de tamanho zero sejam válidos, um aviso incentiva os desenvolvedores a evitá-los sempre que possível. Consulte issue dawn:1786.
Mensagens de erro melhores
Agora, uma mensagem de erro aprimorada é fornecida ao usar um GPUCommandEncoder
se o finish()
já tiver sido chamado. Consulte issue dawn:1736.
Ao enviar buffers de comando com objetos destruídos, os rótulos dos buffers de comando usados em submit()
agora aparecem na mensagem de erro. Consulte o problema dawn:1747.
A parte inválida do estado do Stencil de profundidade agora é especificada na mensagem de erro ao validar depthStencil
. Consulte issue dawn:1735.
A mensagem de erro de validação minBindingSize
agora informa o grupo e o número da vinculação que não passou na validação, além do buffer. Consulte issue dawn:1604.
As mensagens de erro retornadas pelo método mapAsync()
em um objeto GPUBuffer
foram aprimoradas para ajudar os desenvolvedores na depuração. Confira um exemplo abaixo e o problema chromium:1431622.
// Create a GPU buffer and map it.
const descriptor = { size: 0, usage: GPUBufferUsage.MAP_READ };
const buffer = device.createBuffer(descriptor);
buffer.mapAsync(GPUMapMode.READ);
// Before it has been mapped, request another mapping.
try {
await buffer.mapAsync(GPUMapMode.READ);
} catch (error) {
// New! Error message tells you mapping is already pending.
console.warn(error.message);
}
Rótulos em ferramentas de depuração do macOS
O botão de depuração use_user_defined_labels_in_backend
permite encaminhar rótulos de objetos para o back-end para que eles possam ser vistos em ferramentas de depuração específicas da plataforma, como RenderDoc, PIX ou Instruments. A partir de agora, uma experiência de depuração melhor será oferecida no macOS quando você ativar esse recurso para depuração. Consulte issue dawn:1784.
Registrar HLS se a compilação falhar
O botão de depuração dump_shaders
permite registrar sombreadores de entrada da WGSL e sombreadores de back-end traduzidos. A partir de agora, quando você ativar a depuração, o HLSL será armazenado em buffer se a compilação falhar. Consulte o problema dawn:1681.
Atualizações do Dawn
Buffer de vértice não definido
Transmitir nullptr
em vez de wgpu::Buffer
para SetVertexBuffer()
em wgpu::RenderPassEncoder
ou wgpu::RenderBundleEncoder
permite que você desative um buffer de vértices definido anteriormente em um determinado slot. Consulte issue dawn:1675.
// Set vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, myVertexBuffer);
// Then later, unset vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, nullptr);
Anexos temporários
É possível criar anexos que permitem que as operações de passagem de renderização permaneçam na memória do bloco, evitando o tráfego de VRAM e, possivelmente, a alocação de VRAM para as texturas, definindo o uso de wgpu::TextureUsage::TransientAttachment
. Esse recurso tem suporte apenas para Metal e Vulkan. Consulte Issue Dawn: 1695.
wgpu::TextureDescriptor desc;
desc.format = wgpu::TextureFormat::RGBA8Unorm;
desc.size = {1, 1, 1};
desc.usage = wgpu::TextureUsage::RenderAttachment |
wgpu::TextureUsage::TransientAttachment;
auto transientTexture = device.CreateTexture(&desc);
// You can now create views from the texture to serve as transient
// attachments, e.g. as color attachments in a render pipeline.
Como criar sem depot_tools
Uma nova opção do CMake DAWN_FETCH_DEPENDENCIES
permite buscar dependências do Dawn usando um script Python que lê arquivos DEPS em vez de exigir a instalação de depot_tools
por todos os projetos que dependem dele. Consulte a mudança 131750.
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