Extensões de idiomas da WGSL com suporte
O membro wgslLanguageFeatures
do objeto GPU
lista os nomes das extensões de idioma da WGSL compatíveis. As extensões de idioma WGSL aceitas são ativadas automaticamente, então você não precisa solicitá-las explicitamente. Essa lista está vazia, mas talvez você encontre mais opções no futuro (por exemplo, do-while loops
). Consulte o problema 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 é possível testar esse recurso localmente, executando o Chrome no Windows com as sinalizações de linha de comando --enable-unsafe-webgpu --use-webgpu-adapter=d3d11
. Consulte o problema dawn:1705.
Usar uma GPU discreta por padrão com alimentação CA
Em dispositivos macOS com duas GPUs, se requestAdapter()
for chamado sem uma opção powerPreference
, a GPU discreta vai ser retornada quando o dispositivo do usuário estiver conectado a energia CA. Caso contrário, a GPU integrada será retornada. Consulte a mudança 4499307.
Como 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, já que a chave correta é depthOrArrayLayers
. Consulte problema chromium:1440900.
Um aviso também será gerado se uma GPUBlendComponent
tiver uma combinação de membros explícitos e padronizados. Consulte o problema dawn:1785 (link em inglês).
Embora os despachos e desenhos de tamanho zero sejam válidos, um aviso incentiva os desenvolvedores a evitá-los quando possível. Consulte o problema dawn:1786 (link em inglês).
Melhores mensagens de erro
Uma mensagem de erro aprimorada agora é fornecida ao usar um GPUCommandEncoder
se finish()
já tiver sido chamado. Consulte problema dawn:1736.
Ao enviar buffers de comando com objetos destruídos, os rótulos dos buffers de comando que foram usados em submit()
agora ficam visíveis na mensagem de erro. Consulte o problema dawn:1747.
A parte inválida do estado do estêncil de profundidade agora é especificada na mensagem de erro ao validar depthStencil
. Consulte o problema dawn:1735.
A mensagem de erro de validação minBindingSize
agora informa o grupo e o número da vinculação que falhou na validação, além do buffer. Consulte o problema dawn:1604.
As mensagens de erro retornadas pelo método mapAsync()
em um objeto GPUBuffer
foram aprimoradas para ajudar os desenvolvedores durante a depuração. Veja 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 nas ferramentas de depuração do macOS
A alternância de depuração use_user_defined_labels_in_backend
permite que você encaminhe rótulos de objetos ao 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ê a ativar para depuração. Consulte o problema dawn:1784.
![Captura de tela do app Instruments no macOS com rótulos personalizados provenientes da WebGPU.](https://developer.chrome.google.cn/static/blog/new-in-webgpu-115/image/screenshot-instruments-a-75d5272ed4ccf.png?authuser=6&hl=pt)
Registrar HLSL se a compilação falhar
A alternância de depuração dump_shaders
permite registrar sombreadores de entrada WGSL e sombreadores de back-end traduzidos. A partir de agora, quando você ativar a depuração (link em inglês), o HLSL será despejado em caso de falha na compilação. Consulte o problema dawn:1681.
Atualizações do amanhecer
Cancelar buffer de vértice
Transmitir nullptr
em vez de wgpu::Buffer
para SetVertexBuffer()
em wgpu::RenderPassEncoder
ou wgpu::RenderBundleEncoder
permite cancelar a definição de um buffer de vértice definido anteriormente em um determinado slot. Consulte o problema 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 da 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 o início do problema: 1695 (link em inglês).
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.
Edifício sem depot_tools
Uma nova opção DAWN_FETCH_DEPENDENCIES
do CMake permite buscar dependências do Dawn usando um script Python que lê arquivos DEPS em vez de exigir a instalação de depot_tools
para todos os projetos que dependem dele. Consulte a mudança 131750.
Novidades da WebGPU
Uma lista de tudo o que foi abordado na série O que há de novo na WebGPU.
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