Compatibilidade com funções integradas do DP4a em WGSL
DP4a (produto escalar de quatro elementos e acumulação) se refere a um conjunto de instruções de GPU comumente usadas na inferência de aprendizado profundo para quantização. Ele realiza produtos escalares de números inteiros de 8 bits de maneira eficiente para acelerar a computação desses modelos quantizados em int8. Ele pode economizar até 75% da memória e da largura de banda da rede e melhorar o desempenho de qualquer modelo de machine learning na inferência em comparação com a versão f32. Por isso, ele é muito usado em vários frameworks de IA conhecidos.
Quando a extensão de linguagem "packed_4x8_integer_dot_product"
WGSL está presente em navigator.gpu.wgslLanguageFeatures
, agora é possível usar escalares inteiros de 32 bits que empacotam vetores de quatro componentes de inteiros de 8 bits como entradas para as instruções de produto escalar no código de shader WGSL com as funções integradas dot4U8Packed
e dot4I8Packed
. Você também pode usar instruções de empacotamento e desempacotamento com vetores compactados de quatro componentes de números inteiros de 8 bits com as funções integradas pack4xI8
, pack4xU8
, pack4xI8Clamp
, pack4xU8Clamp
, unpack4xI8
e unpack4xU8
do WGSL.
Recomendamos usar uma diretiva requires para sinalizar o potencial de não portabilidade com requires packed_4x8_integer_dot_product;
na parte de cima do código do shader WGSL. Confira o exemplo a seguir e issue tint:1497.
if (!navigator.gpu.wgslLanguageFeatures.has("packed_4x8_integer_dot_product")) {
throw new Error(`DP4a built-in functions are not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires packed_4x8_integer_dot_product;
fn main() {
const result: u32 = dot4U8Packed(0x01020304u, 0x02040405u); // 42
}`,
});
Agradecemos à equipe de gráficos da Web da Intel em Xangai por impulsionar a conclusão dessa especificação e implementação.
Parâmetros de ponteiro irrestritos em WGSL
A extensão de linguagem "unrestricted_pointer_parameters"
da WGSL flexibiliza as restrições sobre quais ponteiros podem ser transmitidos para funções da WGSL:
Ponteiros de parâmetros de espaços de endereço
storage
,uniform
eworkgroup
para funções declaradas pelo usuário.Passar ponteiros para membros de estrutura e elementos de matriz para funções declaradas pelo usuário.
Confira Ponteiros como parâmetros de função | Tour do WGSL para saber mais sobre isso.
Esse recurso pode ser detectado usando navigator.gpu.wgslLanguageFeatures
. Recomendamos sempre usar uma diretiva requires para sinalizar o potencial de não portabilidade com requires unrestricted_pointer_parameters;
na parte de cima do código do shader WGSL. Confira o exemplo a seguir, as mudanças na especificação WGSL e o problema tint:2053.
if (!navigator.gpu.wgslLanguageFeatures.has("unrestricted_pointer_parameters")) {
throw new Error(`Unrestricted pointer parameters are not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires unrestricted_pointer_parameters;
@group(0) @binding(0) var<storage, read_write> S : i32;
fn func(pointer : ptr<storage, i32, read_write>) {
*pointer = 42;
}
@compute @workgroup_size(1)
fn main() {
func(&S);
}`
});
Açúcar sintático para desreferenciar composições em WGSL
Quando a extensão de linguagem "pointer_composite_access"
WGSL está presente em navigator.gpu.wgslLanguageFeatures
, seu código de shader WGSL agora oferece suporte ao acesso a componentes de tipos de dados complexos usando a mesma sintaxe de ponto (.
), seja trabalhando diretamente com os dados ou com um ponteiro para eles. Veja como funciona:
Se
foo
for um ponteiro,foo.bar
será uma maneira mais conveniente de escrever(*foo).bar
. Normalmente, o asterisco (*
) seria necessário para transformar o ponteiro em uma "referência" que pode ser desreferenciada, mas agora os ponteiros e as referências são muito mais semelhantes e quase intercambiáveis.Se
foo
não for um ponteiro: o operador de ponto (.
) funciona exatamente como você está acostumado para acessar membros diretamente.
Da mesma forma, se pa
for um ponteiro que armazena o endereço inicial de uma matriz, o uso de pa[i]
dará acesso direto ao local da memória em que o elemento 'i
da matriz está armazenado.
Recomendamos usar uma diretiva requires para sinalizar o potencial de não portabilidade com requires pointer_composite_access;
na parte de cima do código do shader WGSL. Confira o exemplo a seguir e issue tint:2113.
if (!navigator.gpu.wgslLanguageFeatures.has("pointer_composite_access")) {
throw new Error(`Pointer composite access is not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires pointer_composite_access;
fn main() {
var a = vec3f();
let p : ptr<function, vec3f> = &a;
let r1 = (*p).x; // always valid.
let r2 = p.x; // requires pointer composite access.
}`
});
Estado somente leitura separado para aspectos de estêncil e profundidade
Antes, os anexos de profundidade-estêncil somente leitura em transmissões de renderização exigiam que ambos os aspectos (profundidade e estêncil) fossem somente leitura. Essa limitação foi removida. Agora, é possível usar o aspecto de profundidade somente leitura, por exemplo, para rastreamento de sombra de contato, enquanto o buffer de estêncil é gravado para identificar pixels para processamento posterior. Consulte o problema dawn:2146.
Atualizações do amanhecer
O callback de erro não capturado definido com wgpuDeviceSetUncapturedErrorCallback()
agora é chamado imediatamente quando o erro acontece. É isso que os desenvolvedores esperam e querem para depuração. Consulte change dawn:173620.
O método wgpuSurfaceGetPreferredFormat()
da API webgpu.h foi implementado. Consulte o problema dawn:1362.
Isso abrange apenas alguns dos principais destaques. Confira a lista completa de commits.
Novidades no WebGPU
Uma lista de tudo o que foi abordado na série O que há de novo no WebGPU.
Chrome 140
- Solicitações de dispositivos consomem o adaptador
- Abreviação para usar textura onde a visualização de textura é usada
- O WGSL textureSampleLevel é compatível com texturas 1D
- Descontinuar o uso de textura de armazenamento somente leitura bgra8unorm
- Remover o atributo isFallbackAdapter do GPUAdapter
- Atualizações do Dawn
Chrome 139
- Suporte a texturas 3D para formatos compactados BC e ASTC
- Novo recurso "core-features-and-limits"
- Teste de origem para o modo de compatibilidade da WebGPU
- Atualizações do Dawn
Chrome 138
- Abreviação para usar o buffer como um recurso de vinculação
- Mudanças nos requisitos 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 vinculação externalTexture
- Buffers são copiados sem especificar offsets e tamanho
- WGSL workgroupUniformLoad usando ponteiro para atômico
- Atributo powerPreference do GPUAdapterInfo
- Remover o atributo compatibilityMode de GPURequestAdapterOptions
- Atualizações do Dawn
Chrome 136
- Atributo isFallbackAdapter do GPUAdapterInfo
- Melhorias no tempo de compilação de sombreadores 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 um layout de pipeline com um layout de grupo de vinculação nulo
- Permitir que viewports se estendam além dos limites dos destinos de renderização
- Acesso mais fácil ao modo de compatibilidade experimental no Android
- Remover o limite maxInterStageShaderComponents
- Atualizações do Dawn
Chrome 134
- Melhorar as cargas de trabalho de machine learning com subgrupos
- Remover o suporte a tipos de textura filtráveis de ponto flutuante como combináveis
- Atualizações do Dawn
Chrome 133
- Outros formatos de vértice unorm8x4-bgra e de um componente
- Permitir que limites desconhecidos sejam solicitados com valor indefinido
- Mudanças nas regras de alinhamento da WGSL
- Ganhos de performance da WGSL com descarte
- Usar displaySize do VideoFrame para texturas externas
- Processar imagens com orientações não padrão usando copyExternalImageToTexture
- Melhorar a experiência do desenvolvedor
- Ativar o modo de compatibilidade com featureLevel
- Limpeza de recursos experimentais de subgrupo
- Descontinuar o limite maxInterStageShaderComponents
- Atualizações do Dawn
Chrome 132
- Uso da visualização de textura
- Fusão de texturas de ponto flutuante de 32 bits
- Atributo adapterInfo do GPUDevice
- Configurar o contexto da tela com formato inválido gera um erro de JavaScript
- Restrições do filtro de amostragem em texturas
- Experimentos com 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 em WGSL
- GPUCanvasContext getConfiguration()
- Primitivos de ponto e linha não podem ter ajuste de profundidade
- Funções integradas de verificação inclusiva para subgrupos
- Suporte experimental para multi-draw indirect
- Opção de compilação do módulo de sombreador strict math
- Remover requestAdapterInfo() do GPUAdapter
- Atualizações do Dawn
Chrome 130
- Combinação de duas origens
- Melhorias no tempo de compilação de sombreadores no Metal
- Descontinuação do requestAdapterInfo() do GPUAdapter
- Atualizações do Dawn
Chrome 129
- Suporte a HDR com modo de mapeamento de tons da tela
- Suporte expandido para subgrupos
- Atualizações do Dawn
Chrome 128
- Testes com subgrupos
- Descontinuar a definição de bias de profundidade para linhas e pontos
- Ocultar aviso do DevTools de erro não capturado se preventDefault
- A WGSL primeiro faz a amostragem de interpolação 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 comandos
- Atualizações do Dawn
Chrome 126
- Aumentar o limite de maxTextureArrayLayers
- Otimização do upload de buffer para back-end Vulkan
- Melhorias no tempo de compilação do 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 shared workers
- Novos atributos de informações do adaptador
- Correções de bugs
- Atualizações do Dawn
Chrome 123
- Suporte para funções integradas DP4a em WGSL
- Parâmetros de ponteiro irrestritos na WGSL
- Açúcar sintático para desreferenciar composições em WGSL
- Estado somente leitura separado para aspectos de estêncil e profundidade
- Atualizações do Dawn
Chrome 122
- Ampliar o alcance com o modo de compatibilidade (recurso em desenvolvimento)
- Aumentar o limite de maxVertexAttributes
- Atualizações do Dawn
Chrome 121
- Suporte à WebGPU no Android
- Usar DXC em vez de FXC para compilação de shader no Windows
- Consultas de carimbo de data/hora em transmissões de computação e renderização
- Pontos de entrada padrão para módulos de shader
- Adicionar suporte a display-p3 como espaço de cor GPUExternalTexture
- Informações de heaps 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 de estêncil de profundidade
- Atualizações de informações do adaptador
- Quantização de consultas de carimbo de data/hora
- Recursos de faxina geral
Chrome 119
- Texturas de ponto flutuante de 32 bits filtráveis
- 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
- Remover buffer de vértice
- Remover a definição do grupo de vinculação
- 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
- Melhorar a experiência do desenvolvedor
- Pipelines de cache com layout gerado automaticamente
- Atualizações do Dawn
Chrome 116
- Integração do WebCodecs
- Dispositivo perdido retornado por GPUAdapter
requestDevice()
- Manter a reprodução de vídeo fluida 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 compatíveis
- Suporte experimental para Direct3D 11
- Usar GPU discreta por padrão com alimentação CA
- Melhorar a experiência do desenvolvedor
- Atualizações do Dawn
Chrome 114
- JavaScript do Optimize
- getCurrentTexture() em telas não configuradas gera InvalidStateError
- Atualizações da WGSL
- Atualizações do Dawn