Suporte a HDR com o modo de mapeamento de tons da tela
Os desenvolvedores da Web têm opções limitadas para fornecer conteúdo HDR, dependendo principalmente dos elementos <img>
e <video>
. No entanto, o elemento <canvas>
continua restrito ao SDR. Para gerar conteúdo HDR dinâmico em uma tela, é necessário codificar o conteúdo como uma imagem HDR antes de exibi-lo. Para conferir um exemplo, consulte esta demonstração.
O novo parâmetro GPUCanvasToneMappingMode
na configuração da tela da WebGPU agora permite que a WebGPU desenhe cores mais brilhantes que o branco (#FFFFFF
) nos seguintes modos:
"standard"
: o comportamento padrão restringe o conteúdo ao intervalo SDR da tela. Esse modo é alcançado ao limitar todos os valores de cor no espaço de cor da tela ao intervalo[0, 1]
."extended"
: desbloqueia o intervalo HDR completo da tela. Esse modo corresponde a"standard"
no intervalo[0, 1]
da tela. A limitação ou projeção é feita para o intervalo dinâmico estendido da tela, mas não para[0, 1]
.
O snippet de código a seguir mostra como configurar uma tela para o alto alcance dinâmico.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const canvas = document.querySelector("canvas");
const context = canvas.getContext("webgpu");
context.configure({
device,
format: "rgba16float",
toneMapping: { mode: "extended" },
});
Confira a amostra Particles (HDR) e o exemplo de HDR da WebGPU e a entrada chromestatus para conhecer o HDR com a WebGPU.
Suporte para subgrupos expandidos
Após o anúncio da experimentação de subgrupos, as funções integradas de subgrupos agora estão disponíveis para uso em sombreadores de computação e de fragmentos. Eles não estão mais restritos a sombreadores de computação. Consulte o problema 354738715.
O valor integrado subgroup_size
está com bugs em sombreadores de fragmentos. Evite por enquanto.
Além disso, as seguintes funções integradas de subgrupo foram adicionadas:
subgroupAdd(value)
: retorna a soma de todas as invocaçõesvalue
ativas no subgrupo.subgroupExclusiveAdd(value)
: retorna a soma da verificação exclusiva de todas as invocações ativasvalue
s no subgrupo.subgroupMul(value)
: retorna a multiplicação de todas as invocaçõesvalue
ativas no subgrupo.subgroupExclusiveMul(value)
: retorna a multiplicação de verificação exclusiva de todas as invocaçõesvalue
ativas no subgrupo.subgroupAnd(value)
: retorna o AND binário de todas as invocaçõesvalue
ativas no subgrupo.subgroupOr(value)
: retorna o OU binário de todas as invocaçõesvalue
ativas no subgrupo.subgroupXor(value)
: retorna a operação XOR binária de todas as invocaçõesvalue
ativas no subgrupo.subgroupMin(value)
: retorna o valor mínimo de todas asvalue
s de invocações ativas no subgrupo.subgroupMax(value)
: retorna o valor máximo de todas as invocaçõesvalue
ativas no subgrupo.subgroupAll(value)
: retorna verdadeiro sevalue
for verdadeiro para todas as invocações ativas no subgrupo.subgroupAny(value)
: retorna verdadeiro sevalue
for verdadeiro para qualquer invocação ativa no subgrupo.subgroupElect()
: retorna "true" se esta invocação tiver a menorsubgroup_invocation_id
entre as invocações ativas no subgrupo.subgroupBroadcastFirst(value)
: transmitevalue
da invocação ativa com osubgroup_invocation_id
mais baixo no subgrupo para todas as outras invocações ativas.subgroupShuffle(value, id)
: retornavalue
da invocação ativa cujosubgroup_invocation_id
corresponde aid
.subgroupShuffleXor(value, mask)
: retorna ovalue
da invocação ativa comsubgroup_invocation_id
correspondente asubgroup_invocation_id ^ mask
.mask
precisa ser dinamicamente uniforme.subgroupShuffleUp(value, delta)
: retorna ovalue
da invocação ativa comsubgroup_invocation_id
correspondente asubgroup_invocation_id - delta
.subgroupShuffleDown(value, delta)
: retorna ovalue
da invocação ativa comsubgroup_invocation_id
correspondente asubgroup_invocation_id + delta
.quadBroadcast(value, id)
: transmitevalue
pela invocação do quad com ID igual aid
.id
precisa ser uma expressão constante.quadSwapX(value)
: trocavalue
entre invocações no quad na direção X.quadSwapY(value)
: trocavalue
entre invocações no quad na direção Y.quadSwapDiagonal(value)
: trocavalue
entre invocações no quad diagonalmente.
Atualizações do amanhecer
A estrutura wgpu::PrimitiveState
agora inclui diretamente a configuração de controle de recorte de profundidade, eliminando a necessidade de uma estrutura wgpu::PrimitiveDepthClipControl
separada. Para saber mais, consulte o snippet de código a seguir e o PR webgpu-headers.
// Before
wgpu::PrimitiveState primitive = {};
wgpu::PrimitiveDepthClipControl depthClipControl;
depthClipControl.unclippedDepth = true;
primitive.nextInChain = &depthClipControl;
// Now
wgpu::PrimitiveState primitive = {};
primitive.unclippedDepth = true;
Isso cobre apenas alguns dos principais destaques. 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 130
- Combinação de fontes duplas
- Melhorias no tempo de compilação do sombreador no Metal
- Descontinuação de requestAdapterInfo() de 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
- Testar subgrupos
- A 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 amanhecer
Chrome 126
- Aumento do limite de maxTextureArrayLayers
- Otimização de 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 amanhecer
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 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 pilhas de memória
- Atualizações do Dawn
Chrome 120
- Suporte a valores de ponto flutuante de 16 bits na WGSL
- Supere 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 à textura de armazenamento somente leitura e leitura/gravação
- Atualizações do amanhecer
Chrome 117
- Buffer de vértice não definido
- Cancelar configuração do grupo de vinculação
- Silenciar erros da criação de pipeline assíncrono quando o dispositivo é perdido
- Atualizações da criação do módulo de sombreador SPIR-V
- Como melhorar a experiência do desenvolvedor
- Armazenamento em cache de pipelines com layout gerado automaticamente
- Atualizações do amanhecer
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