Novidades da WebGPU (Chrome 124)

François Beaufort
François Beaufort

Texturas de armazenamento somente leitura e leitura/gravação

O tipo de vinculação de textura de armazenamento permite que os sombreadores leiam as texturas de armazenamento sem adicionar o uso de TEXTURE_BINDING e executem leituras e gravações mistas em determinados formatos. Quando a extensão de idioma "readonly_and_readwrite_storage_textures" da WGSL está presente no navigator.gpu.wgslLanguageFeatures, agora é possível definir o acesso ao GPUStorageTexture como "read-write" ou "read-only" ao criar um layout de grupo de vinculação. Anteriormente, isso estava restrito ao domínio "write-only".

Em seguida, o código de sombreador WGSL pode usar os qualificadores de acesso read_write e read para texturas de armazenamento, as funções integradas textureLoad() e textureStore() se comportam corretamente, e uma nova função integrada textureBarrier() está disponível para sincronizar acessos à memória de textura em um grupo de trabalho.

É recomendável usar uma diretiva obrigatória para sinalizar o potencial de não portabilidade com requires readonly_and_readwrite_storage_textures; na parte de cima do código de sombreador da WGSL. Confira o exemplo a seguir e o 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 a service workers e workers compartilhados

A WebGPU no Chrome leva o suporte aos workers da Web para um novo patamar, oferecendo suporte para service workers e compartilhados. É possível usar service workers para melhorar tarefas em segundo plano e recursos off-line e workers compartilhados para compartilhar recursos de maneira eficiente entre scripts. Consulte o problema chromium:41494731.

Confira o exemplo de extensão do Chrome e a extensão WebLLM do Chrome para saber como usar a WebGPU em um service worker de extensão.

Captura de tela da extensão WebLLM do Chrome.
Extensão WebLLM do Chrome
.

Novos atributos de informações do adaptador

Os atributos de informações do adaptador d3dShaderModel e vkDriverVersion não padrão agora estão disponíveis ao chamar requestAdapterInfo() se o usuário tiver ativado a flag "Recursos do desenvolvedor da WebGPU" em chrome://flags/#enable-webgpu-developer-features. Quando compatível:

Captura de tela de https://webgpureport.org com vkDriverVersion nas informações do adaptador.
Informações do adaptador vkDriverVersion mostradas em https://webgpureport.org.

Correções de bugs

A criação de dois pipelines com bindgroups correspondentes usando layout: "auto" e, em seguida, a criação de um grupo de vinculação com o primeiro pipeline e o uso dele no segundo pipeline agora geram um GPUValidationError. A permissão foi um bug de implementação que agora foi corrigido com testes adequados. Consulte problema dawn:2402.

Atualizações ao amanhecer

Na API Dawn, o callback de erro não capturado definido com wgpuDeviceSetUncapturedErrorCallback agora não é chamado depois que o dispositivo GPU é perdido Essa correção alinha a Dawn com a especificação da API JavaScript e a implementação do Blink Consulte problema dawn:2459.

Esses são apenas alguns dos principais destaques. Confira a lista completa de confirmações (link em inglês).

Novidades da WebGPU

Uma lista de tudo o que foi abordado na série O que há de novo na WebGPU.

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Google Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Google Chrome 113