Novidades do WebGPU (Chrome 145)

François Beaufort
François Beaufort

Publicado em 28 de janeiro de 2026

Extensão subgroup_uniformity da WGSL

A extensão de linguagem subgroup_uniformity da WGSL muda o escopo da análise de uniformidade para funções integradas de subgrupo e quad para ocorrer no nível do subgrupo (em vez do grupo de trabalho). Esse recurso permite que a funcionalidade de subgrupo seja considerada uniforme em mais casos, representando melhor qualidade de vida para os desenvolvedores e menor probabilidade de desativar as verificações de uniformidade. Uma implicação prática é que mais valores serão considerados uniformes de subgrupo, como o valor integrado subgroup_id adicionado recentemente.

Essa extensão de linguagem pode ser detectada por recursos usando navigator.gpu.wgslLanguageFeatures. Consulte o exemplo a seguir e a intenção de envio.

if (!navigator.gpu.wgslLanguageFeatures.has("subgroup_uniformity")) {
  throw new Error(`WGSL subgroup uniformity is 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;
  
  @group(0) @binding(0) var<storage, read_write> non_uniform: i32;

  fn main() {
    if (non_uniform == 42) {
      _ = subgroupElect();
    }
  }`,
}); // WGSL error: subgroupElect must only be called from subgroup uniform control flow.

Mapeamento de buffer síncrono experimental em workers

Para explorar possíveis maneiras de reduzir o atrito entre a WebGPU e o código do aplicativo, a equipe do Chrome está investigando o mapeamento de buffer síncrono em workers. Como parte desse esforço, um novo método experimental mapSync() para GPUBuffer foi prototipado. Esse método, restrito a workers, funciona de maneira semelhante a mapAsync().

Esse recurso é experimental, e seu feedback é importante para determinar se ele será proposto para padronização. Para testar, inicie o Chrome usando a opção --enable-features=WebGPUMapSyncOnWorkers e informe o feedback sobre a utilidade e o impacto dele. Consulte o snippet a seguir para começar.

// Create a GPU buffer.
const buffer = device.createBuffer({
  size: 42,
  usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});

// Map buffer synchronously when possible.
if ("mapSync" in GPUBuffer.prototype) {
  buffer.mapSync(GPUMapMode.READ);
} else {
  // Awaiting allows other code to run, which can cause application logic issues.
  await buffer.mapAsync(GPUMapMode.READ);
}

Atualizações do Dawn

O recurso wgpu::FeatureName::R8UnormStorage não está mais disponível. Ele foi substituído por wgpu::FeatureName::TextureFormatTier1, que agora o substitui. Consulte o problema 472926167.

O recurso wgpu::FeatureName::Snorm16TextureFormats foi removido. Os recursos dele, com exceção do Resolve, agora são amplamente abrangidos por wgpu::FeatureName::TextureFormatsTier1. Consulte o problema 465347942.

As versões noturnas de binários (além do Emdawnwebgpu) agora são criadas no GitHub e estão disponíveis nas versões google/dawn (links em inglês). Elas são fornecidas como um serviço de melhor esforço e não são assinadas nem garantidas pelo Google ou pela equipe do Dawn.

O suporte a wgpu::ExternalTexture foi adicionado ao Emdawnwebgpu. Ele só pode ser importado do código JavaScript (por exemplo, EM_ASM), já que a construção em C/C++ não é possível devido ao requisito de um objeto JavaScript, como HTMLVideoElement ou VideoFrame. Consulte o problema 462477379 e SpotTests.cpp para ver um exemplo de código.

Isso abrange apenas alguns dos principais destaques. Confira a lista exaustiva de commits.

Novidades na WebGPU

Uma lista de tudo o que foi abordado na série Novidades na WebGPU.

Chrome 147-148

Chrome 146

Chrome 145

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