Texturas de armazenamento somente leitura e leitura/gravação
O tipo de vinculação de textura de armazenamento permite que os shaders leiam de texturas de armazenamento sem adicionar o uso de TEXTURE_BINDING
e realizem leituras e gravações mistas em determinados formatos. Quando a extensão de linguagem WGSL "readonly_and_readwrite_storage_textures"
estiver presente em navigator.gpu.wgslLanguageFeatures
, será possível definir o acesso GPUStorageTexture
para "read-write"
ou "read-only"
ao criar um layout de grupo de vinculação. Antes, isso era restrito a "write-only"
.
Em seguida, o código do sombreador WGSL pode usar o qualificador de acesso read_write
e read
para texturas de armazenamento. As funções integradas textureLoad()
e textureStore()
se comportam de acordo com isso, e uma nova função integrada textureBarrier()
está disponível para sincronizar acessos de memória de textura em um grupo de trabalho.
É recomendável usar uma diretiva requires para indicar o potencial de não portabilidade com requires readonly_and_readwrite_storage_textures;
na parte de cima do código do sombreador WGSL. Confira o exemplo a seguir e issue dawn:1972.
if (!navigator.gpu.wgslLanguageFeatures.has("readonly_and_readwrite_storage_textures")) {
throw new Error("Read-only and read-write storage textures are not available");
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const bindGroupLayout = device.createBindGroupLayout({
entries: [{
binding: 0,
visibility: GPUShaderStage.COMPUTE,
storageTexture: {
access: "read-write", // <-- New!
format: "r32uint",
},
}],
});
const shaderModule = device.createShaderModule({ code: `
requires readonly_and_readwrite_storage_textures;
@group(0) @binding(0) var tex : texture_storage_2d<r32uint, read_write>;
@compute @workgroup_size(1, 1)
fn main(@builtin(local_invocation_id) local_id: vec3u) {
var data = textureLoad(tex, vec2i(local_id.xy));
data.x *= 2;
textureStore(tex, vec2i(local_id.xy), data);
}`
});
// You can now create a compute pipeline with this shader module and
// send the appropriate commands to the GPU.
Suporte aos service workers e workers compartilhados
A WebGPU no Chrome oferece suporte a trabalhadores da Web no próximo nível, agora oferecendo suporte a trabalhadores de serviço e trabalhadores compartilhados. Você pode usar service workers para melhorar tarefas em segundo plano e recursos off-line, além de workers compartilhados para compartilhamento eficiente de recursos entre scripts. Consulte o problema chromium:41494731.
Confira o exemplo de extensão do Chrome e a extensão do Chrome WebLLM para saber como usar o WebGPU em um service worker de extensão.
Novos atributos de informações do adaptador
Os atributos de informações de adaptador d3dShaderModel
e vkDriverVersion
não padrão agora estão disponíveis ao chamar requestAdapterInfo()
se o usuário tiver ativado a flag "WebGPU Developer Features" em chrome://flags/#enable-webgpu-developer-features
. Quando houver suporte:
O
d3dShaderModel
é o número máximo de modelo de sombreador D3D aceito. Por exemplo, o valor 62 indica que o driver atual oferece suporte ao HLSL SM 6.2. Consulte a documentação e o issue dawn:1254.O
vkDriverVersion
é o número da versão especificado pelo fornecedor do driver Vulkan. Consulte a documentação e o problema chromium:327457605.
Correções de bugs
A criação de dois pipelines com grupos de vinculação correspondentes usando layout: "auto"
, a criação de um grupo de vinculação com o primeiro pipeline e o uso dele no segundo pipeline agora gera um GPUValidationError. Permitir isso era um bug de implementação que agora foi corrigido com testes adequados. Consulte o problema dawn:2402.
Atualizações do Dawn
Na API Dawn, o callback de erro não capturado definido com wgpuDeviceSetUncapturedErrorCallback
não é mais chamado depois que o dispositivo de GPU é perdido. Essa correção alinha o Dawn à especificação da API JavaScript e à implementação do Blink. Consulte o problema dawn:2459.
Isso abrange apenas alguns dos principais destaques. Confira a lista completa de confirmações.
Novidades da 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()
- Os primitivos 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 modo de mapeamento de tons de tela
- Ampliação do suporte a subgrupos
- Atualizações do amanhecer
Chrome 128
- Testar subgrupos
- Suspender o uso da configuração de viés de profundidade para linhas e pontos
- Ocultar aviso de erro não capturado do DevTools se preventDefault
- A amostragem de WGSL é interpolada primeiro e
- Atualizações do amanhecer
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 Dawn
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 do 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 para funções integradas do DP4a na 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 amanhecer
Chrome 122
- Ampliar 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 transmissões 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 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 de profundidade do estêncil
- Atualizações das informações do adaptador
- Quantização de consultas de carimbo de data/hora
- Recursos para fazer faxina
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 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 InvalidStateError
- Atualizações da WGSL
- Atualizações do Dawn