Novidades da WebGPU (Chrome 153-154)

François Beaufort
François Beaufort

Publicado em: 15 de setembro de 2026

Extensão buffer_view do WGSL

A extensão de linguagem WGSL buffer_view permite que os dados de uma variável uniforme, de armazenamento ou de grupo de trabalho sejam interpretados como vários tipos diferentes. Isso tem uma ampla gama de utilidades, desde usos convencionais de type-punning até a partição de uma variável em várias variáveis lógicas.

Para segurança e simplicidade de implementação, os tipos reinterpretados só podem ser acessados usando as seguintes funções integradas:

  • bufferView<T>() interpreta a memória em um determinado deslocamento de bytes como um ponteiro para o tipo T.
  • bufferArrayView<T>() cria um ponteiro de matriz limitada com uma contagem de elementos explícita.
  • bufferLength() retorna o tamanho em bytes do buffer.

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

requires buffer_view;

//  +-------------------+-----------------------------+----------------------------+
//  | Byte 0 .. 3       | Byte 4 .. (4 + N - 1)       | Byte (4 + N) .. End        |
//  +-------------------+-----------------------------+----------------------------+
//  | indices_size (u32)| indices (array<u32, count>) | vertices (array<f32>)      |
//  +-------------------+-----------------------------+----------------------------+
@group(0) @binding(0) var<storage> indices_and_vertices : buffer;

fn unpack_and_process_geometry() {
  let indices_size = *bufferView<u32>(&indices_and_vertices, 0);

  let indices = bufferArrayView<array<u32>>(&indices_and_vertices, 4, indices_size);
  let vertices = bufferView<array<f32>>(&indices_and_vertices, indices_size + 4);
  ...
}

Você também pode conferir a proposta de visualização de buffer para mais detalhes e testar o exemplo do Wireframe WebGPU.

Extensão swizzle_assignment do WGSL

Em resposta a um dos recursos da comunidade mais solicitados, a extensão WGSL swizzle_assignment permite gravar diretamente em swizzles de vetor, possibilitando atualizar vários componentes em uma única instrução. Ele reduz drasticamente o boilerplate e melhora a legibilidade do shader, ao mesmo tempo em que alinha o WGSL a outras linguagens de sombreamento.

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

if (!navigator.gpu.wgslLanguageFeatures.has("swizzle_assignment")) {
  throw new Error(`WGSL swizzle assignment is not available`);
}

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

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

  @vertex
  fn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {
    var position = vec4f(0.0, 0.0, 0.0, 1.0);
    position.xy = vec2f(10.0, 20.0); // Swizzle assignment

    return position;
  }`,
});

Atualizações de extensão do WGSL

A extensão de linguagem texture-formats-tier1, embora seja compatível com o código WGSL, não era mapeada corretamente para navigator.gpu.wgslLanguageFeatures (como texture_formats_tier1) em JavaScript. Esse problema de mapeamento já foi resolvido. Consulte Chromium CL 8159562.

A extensão de linguagem subgroups agora é ativada automaticamente quando subgroup_size_control está ativado em WGSL. Consulte o problema dawn:545285663.

Atualizações do amanhecer

O novo recurso experimental wgpu::FeatureName::BufferMapWriteExtendedUsages permite criar um buffer com wgpu::BufferUsage::MapWrite combinado com qualquer outro wgpu::BufferUsage, exceto wgpu::BufferUsage::MapRead, para gravar diretamente em um buffer mapeável que também pode ser usado pela GPU, eliminando o buffer de estágio e a cópia extra nos back-ends Vulkan e D3D12. Para mais informações, consulte Buffer Map Write Extended Usages e o problema dawn:386255678.

Agora você pode usar as vinculações webgpu_cpp.h em qualquer implementação webgpu.h em vez de ficar vinculado ao sabor do Dawn usando o novo webgpu_upstream_cpp_headers. Consulte o problema #596 do webgpu-headers.

Agora, o Dawn requer o macOS 13.0 ou versões mais recentes. Consulte Dawn CL 334415.

Isso abrange apenas alguns dos principais destaques. Confira a lista completa de commits para mais detalhes.

Novidades no WebGPU

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

Chrome 153-154

Chrome 151-152

Chrome 149-150

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