Novidades do WebGPU (Chrome 144)

François Beaufort
François Beaufort

Publicado em: 7 de janeiro de 2026

Extensão subgroup_id do WGSL

A extensão de linguagem WGSL subgroup_id permite usar os seguintes novos valores integrados em grupos de trabalho quando a extensão subgroups está ativada:

  • subgroup_id: fornece o ID de um subgrupo de uma invocação no grupo de trabalho atual.
  • num_subgroups: informa o número de subgrupos presentes no grupo de trabalho.

Antes, para indexar a memória usando IDs de invocação de subgrupo, era necessário reconstruir um ID de subgrupo (normalmente por operações atômicas) para evitar acessos de memória sobrepostos. Agora você pode usar subgroup_id para preencher a outra metade dessa equação. Como essa funcionalidade ainda não está disponível no back-end D3D, ela é emulada lá. É seguro criar uma equivalência para local_invocation_index como subgroup_invocation_id + subgroup_size * subgroup_id. Em alguns casos, os subgrupos não estão completos.

Essa extensão de linguagem pode ser detectada usando navigator.gpu.wgslLanguageFeatures. Recomendamos usar uma diretiva "requires" para sinalizar a possibilidade de não portabilidade com requires subgroup_id; na parte de cima do código do shader WGSL. Confira o exemplo a seguir e a intenção de envio.

if (!navigator.gpu.wgslLanguageFeatures.has("subgroup_id")) {
  throw new Error(`WGSL subgroup_id and num_subgroups built-in values are not available`);
}

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
  throw new Error("Subgroups support is not available");
}
const device = await adapter.requestDevice({ requiredFeatures: ["subgroups"] });

const shaderModule = device.createShaderModule({ code: `
  enable subgroups;
  requires subgroup_id;

  @compute @workgroup_size(64, 1, 1)
  fn main(@builtin(subgroup_id) subgroup_id : u32,
          @builtin(num_subgroups) num_subgroups : u32) {
    // TODO: Use subgroup_id and num_subgroups values.
  }`,
});

Extensão WGSL uniform_buffer_standard_layout

A extensão de linguagem WGSL uniform_buffer_standard_layout permite que buffers uniformes usem as mesmas restrições de layout de memória que buffers de armazenamento, o que facilita o compartilhamento de estruturas de dados nos dois tipos de buffers. Isso significa que os buffers uniformes não precisam mais ter alinhamento de 16 bytes em elementos de matriz nem preencher offsets de estrutura aninhada com um múltiplo de 16 bytes.

Essa extensão de linguagem pode ser detectada usando navigator.gpu.wgslLanguageFeatures. Recomendamos usar uma diretiva "requires" para sinalizar a possibilidade de não portabilidade com requires uniform_buffer_standard_layout; na parte de cima do código do shader WGSL. Confira o exemplo a seguir e a intenção de envio.

if (!navigator.gpu.wgslLanguageFeatures.has("uniform_buffer_standard_layout")) {
  throw new Error(`WGSL uniform buffer standard layout is not available`);
}

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const shaderModule = device.createShaderModule({ code: `
  requires uniform_buffer_standard_layout;

  struct S {
      x: f32
  }
  struct Uniforms {
      a: S,
      b: f32
      // b is at offset 4. Without standard layout, alignment rules would
      // force b to be at offset 16 (or a multiple of 16), and you would have
      // to add extra fields or use an @align attribute.
  }

  @group(0) @binding(0) var<uniform> u: Uniforms;

  @fragment fn fs_main() -> @location(0) vec4<f32> {
      return vec4<f32>(u.a.x);
  }`,
});

WebGPU no Linux

A equipe do Chrome está lançando o WebGPU para Linux com cuidado, começando com suporte para GPUs Intel Gen12+, mas com um plano provisório para expandir para mais dispositivos (AMD, NVIDIA). Essa implementação usa uma arquitetura em que o WebGPU usa o Vulkan e o restante do Chromium permanece no OpenGL, exercitando caminhos de código bons e conhecidos. Consulte o problema 442791440.

writeBuffer e writeTexture mais rápidos

writeBuffer() e writeTexture() foram otimizados no Chrome, resultando em ganhos de desempenho até duas vezes melhores do que a versão anterior, dependendo do tamanho dos dados transferidos. Essa mudança também afeta todos os usuários da implementação do Dawn Wire. Consulte o problema 441900745.

Atualizações do amanhecer

A equipe de GPU do Android publicou a primeira versão Alfa de vinculações do Kotlin para WebGPU no Android, disponível usando o Jetpack. O pacote androidx.webgpu dá aos desenvolvedores Android acesso a uma API de GPU moderna usando Kotlin, evitando os problemas legados do OpenGL ou a complexidade do Vulkan. É um desenvolvimento interessante para o ecossistema.

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 144

Chrome 143

Chrome 142

Chrome 141

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113