Publicado em 26 de maio de 2025
Usar a visualização de textura para a vinculação de externalTexture
Agora, uma GPUTextureView compatível (2D, subrecurso único) pode ser usada no lugar de uma vinculação de GPUExternalTexture ao criar um GPUBindGroup.
Isso simplifica a lógica do sombreador em pipelines de efeitos de vídeo em que tanto GPUExternalTexture (para vídeo de origem) quanto GPUTextureView (para processamento intermediário) precisam ser processados. Ele também reduz a necessidade de compilar sombreadores dinamicamente, dependendo de onde a textura vem. Consulte Intent to Ship: WebGPU: GPUTextureView para vinculação de externalTexture.
const texture = myDevice.createTexture({
size: [42, 42],
format: navigator.gpu.getPreferredCanvasFormat(),
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});
const code = `
@group(0) @binding(0) var texture : texture_external;
@group(0) @binding(1) var<storage, read_write> buffer: vec2u;
@compute @workgroup_size(1) fn main() {
buffer = textureDimensions(texture);
}`;
const pipeline = myDevice.createComputePipeline({
layout: "auto",
compute: { module: myDevice.createShaderModule({ code }) },
});
const bindGroup = myDevice.createBindGroup({
layout: pipeline.getBindGroupLayout(0),
entries: [
{ binding: 0, resource: texture.createView() }, // Use texture view for an externalTexture binding
{ binding: 1, resource: { buffer: myBuffer } },
],
});
Cópia de buffers sem especificar deslocamentos e tamanho
Uma nova sobrecarga de método do GPUCommandEncoder permite que os desenvolvedores omitam deslocamentos e parâmetros de tamanho ao usar copyBufferToBuffer()
para simplificar a cópia de buffers inteiros. Consulte Intent to Ship: WebGPU: sobrecarga de copyBufferToBuffer.
const size = 42;
const srcBuffer = myDevice.createBuffer({
size,
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
});
const dstBuffer = myDevice.createBuffer({
size,
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});
// Copy entire buffer.
myCommandEncoder.copyBufferToBuffer(srcBuffer, dstBuffer);
// This is the same as the following.
// myCommandEncoder.copyBufferToBuffer(srcBuffer, 0, dstBuffer, 0, size);
WGSL workgroupUniformLoad usando ponteiro para atômico
Uma nova sobrecarga de workgroupUniformLoad(ptr)
no WGSL foi adicionada para facilitar o trabalho dos desenvolvedores. Ele carrega atomicamente o valor apontado por ptr
e o retorna para todas as invocações no grupo de trabalho, em que ptr
é um ponteiro para atômico dentro de uma variável do grupo de trabalho. Consulte o problema 408241039.
@group(0) @binding(0) var<storage, read_write> buffer : array<u32, 1>;
var<workgroup> wgvar : atomic<u32>;
@compute @workgroup_size(1, 1)
fn main(@builtin(local_invocation_index) lid: u32) {
if (lid == 0) {
atomicStore(&(wgvar), 42u);
}
buffer[lid] = workgroupUniformLoad(&wgvar);
}
Atributo powerPreference do GPUAdapterInfo
O atributo de string powerPreference
do GPUAdapterInfo não padrão agora está disponível quando o usuário ativa a flag "WebGPU Developer Features" em chrome://flags/#enable-webgpu-developer-features
. Se houver suporte, o valor powerPreference
pode ser "low-power"
ou "high-performance"
, dependendo do valor de GPUPowerPreference usado em GPURequestAdapterOptions. Consulte CL 6438860.
function checkPowerPreferenceForGpuDevice(device) {
const powerPreference = device.adapterInfo.powerPreference;
if (powerPreference === "high-performance") {
// High-performance GPU detected. Enabling enhanced graphics settings.
} else if (powerPreference === "low-power") {
// Low-power GPU detected. Optimizing for battery life.
}
}
O atributo compatibilityMode do GPURequestAdapterOptions foi removido
O atributo experimental compatibilityMode
do GPURequestAdapterOptions foi removido em favor do atributo featureLevel
padronizado adicionado no Chrome 133. Consulte o problema 366151404.
Atualizações do Dawn
Os desenvolvedores podem criar projetos da WebGPU em linguagens como C++, usando o webgpu.h para segmentar a WebAssembly e plataformas específicas. O "emdawnwebgpu" recém-lançado da Dawn ("Emscripten Dawn WebGPU") implementa o webgpu.h padronizado mais recente na API do navegador.
O Emdawnwebgpu é uma bifurcação (mantida) das vinculações integradas (USE_WEBGPU
) do Emscripten (agora sem manutenção). Todo o novo desenvolvimento está sendo feito no emdawnwebgpu, e as vinculações integradas do Emscripten serão removidas à medida que os desenvolvedores fazem a transição para o emdawnwebgpu. O cabeçalho C do Emdawnwebgpu é muito semelhante ao de Dawn, enquanto as vinculações integradas estão significativamente desatualizadas.
Faça o download do emdawnwebgpu na página de versões do Dawn no GitHub e leia o README.md do pacote para saber como usá-lo. Os arquivos de origem podem ser encontrados no repositório Dawn.
Para um guia completo, confira a documentação Criar um app com o WebGPU atualizada.
Isso abrange 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 138
- Sigla para usar buffer como um recurso de vinculação
- Mudanças no requisito de tamanho para buffers mapeados na criação
- Relatório de arquitetura para GPUs recentes
- Descontinuar o atributo isFallbackAdapter do GPUAdapter
- Atualizações do Dawn
Chrome 137
- Usar a visualização de textura para a vinculação de externalTexture
- Cópia de buffers sem especificar deslocamentos e tamanho
- WGSL workgroupUniformLoad usando ponteiro para atômico
- Atributo powerPreference do GPUAdapterInfo
- O atributo compatibilityMode do GPURequestAdapterOptions foi removido
- Atualizações do Dawn
Chrome 136
- Atributo isFallbackAdapter do GPUAdapterInfo
- Melhorias no tempo de compilação de sombreador no D3D12
- Salvar e copiar imagens da tela
- Restrições do modo de compatibilidade do Lift
- Atualizações do Dawn
Chrome 135
- Permitir a criação de layout de pipeline com layout de grupo de vinculação nulo
- Permitir que as visualizações se estendam além dos limites das áreas de renderização
- Acesso mais fácil ao modo de compatibilidade experimental no Android
- Remoção do limite de maxInterStageShaderComponents
- Atualizações do Dawn
Chrome 134
- Melhorar as cargas de trabalho de aprendizado de máquina com subgrupos
- Remover o suporte a tipos de textura com filtro de ponto flutuante como mescla
- Atualizações do Dawn
Chrome 133
- Formatos de vértice de 1 componente e unorm8x4-bgra adicionais
- Permitir que limites desconhecidos sejam solicitados com valor indefinido
- Mudanças nas regras de alinhamento do WGSL
- Ganhos de desempenho da WGSL com descarte
- Usar displaySize de VideoFrame para texturas externas
- Processar imagens com orientações diferentes da padrão usando copyExternalImageToTexture
- Melhorar a experiência do desenvolvedor
- Ativar o modo de compatibilidade com o featureLevel
- Limpeza de recursos experimentais de subgrupos
- Limite maxInterStageShaderComponents descontinuado
- Atualizações do Dawn
Chrome 132
- Uso da visualização de textura
- Mistura de texturas de ponto flutuante de 32 bits
- Atributo adapterInfo do GPUDevice
- Configurar o contexto da tela com um formato inválido gera um erro JavaScript
- Filtrar restrições de amostragem em texturas
- Experimentação de subgrupos estendidos
- Melhorar a experiência do desenvolvedor
- Suporte experimental para formatos de textura normalizados de 16 bits
- Atualizações do Dawn
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
- Erros de codificador de comando aprimorados
- 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 de ponto flutuante 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 a textura de armazenamento de leitura/gravação e somente leitura
- Atualizações do Dawn
Chrome 117
- Buffer de vértice desativado
- Desvincular grupo
- Silenciar erros de criação de pipeline assíncrono quando o dispositivo é perdido
- Atualizações na criação de módulos de sombreador SPIR-V
- 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
- Melhorar a experiência do desenvolvedor
- Atualizações do Dawn
Chrome 115
- Extensões de linguagem WGSL com suporte
- Suporte experimental para Direct3D 11
- Usar GPU discreta por padrão na alimentação CA
- Melhorar a experiência do desenvolvedor
- Atualizações do Dawn
Chrome 114
- Optimize JavaScript
- getCurrentTexture() em uma tela não configurada gera um erro InvalidStateError
- Atualizações da WGSL
- Atualizações do Dawn