Novidades da WebGPU (Chrome 149-150)

François Beaufort
François Beaufort

Publicado em 17 de junho de 2026

Imediatos

Os imediatos, também conhecidos como constantes de push ou constantes de raiz, permitem transmitir pequenas quantidades de dados que mudam com frequência diretamente para os sombreadores. Esse processo ignora o overhead de criar buffers de GPU e gerenciar grupos de vinculação.

A atualização das vinculações de buffer uniforme para dados que mudam a cada chamada de desenho, como um ID de objeto exclusivo ou uma matriz de transformação 3D para centenas de objetos, cria um overhead de CPU. Insira valores brutos diretamente no codificador de passagem para evitar gravar dados na memória e gerenciar pesquisas de GPU.

Os imediatos fornecem um caminho rápido para variáveis pequenas e altamente dinâmicas. Use buffers uniformes ou de armazenamento para grandes matrizes de dados, estruturas de iluminação complexas ou matrizes enormes.

No sombreador WGSL, o espaço de endereço <immediate> permite definir dados imediatos que podem ser transmitidos diretamente para o codificador de passagem. Chame setImmediates() em JavaScript antes de uma chamada de desenho para fornecer esses dados sem vincular um grupo. Para verificar o suporte, detecte o recurso da extensão de linguagem WGSL immediate_address_space usando navigator.gpu.wgslLanguageFeatures. Consulte o exemplo a seguir e a intenção de envio.

if (!navigator.gpu.wgslLanguageFeatures.has('immediate_address_space')) {
   throw new Error(`WGSL immediate address space is not available`);
}

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

const module = device.createShaderModule({ code: `
  requires immediate_address_space;

  var<immediate> color: vec4f;

  @vertex fn vertexMain(@builtin(vertex_index) i : u32) -> @builtin(position) vec4f {
    const pos = array(vec2f(0, 1), vec2f(-1, -1), vec2f(1, -1));
    return vec4f(pos[i], 0, 1);
  }

  @fragment fn fragmentMain() -> @location(0) vec4f {
    return color;
  }`,
});

// Create render pass encoder (omitted)...

// By using layout: 'auto', WebGPU will automatically infer the `immediateSize`
// required by the pipeline layout from the WGSL module.
const pipeline = device.createRenderPipeline({
  layout: 'auto',
  vertex: { module },
  fragment: { module, targets: [{ format }] },
});
myRenderPassEncoder.setPipeline(pipeline);

// Send immediate data to the GPU, then issue a draw call
myRenderPassEncoder.setImmediates(/*rangeOffset=*/0, new Float32Array([255, 0, 0, 255]));
myRenderPassEncoder.draw(3);
myRenderPassEncoder.end();

Para saber mais sobre esse recurso, consulte Imediatos do WebGPUFundamentals.

Parabéns à equipe da Microsoft pelas contribuições.

Validação mais rigorosa para anexos temporários

O WebGPU recentemente introduziu a flag GPUTextureUsage TRANSIENT_ATTACHMENT, que permite aos desenvolvedores criar anexos de renderização temporários, como buffers de profundidade-estêncil ou destinos multiamostrados. Esses anexos permanecem na memória de bloco rápida e no chip sem alocar a VRAM principal.

As atualizações recentes (#6248 e #6267) refinam as regras de validação para evitar o uso indevido desses anexos de textura com eficiência de memória:

  • Devido a limitações da plataforma, viewFormats precisa ser uma matriz vazia ao criar texturas temporárias. Formatos de visualização alternativos não são necessários porque as texturas temporárias são apenas para renderização.
  • A criação de uma visualização de textura não restringe as flags de uso. Ao chamar createView() em uma textura temporária, a visualização não pode mudar o uso.
  • Anexos temporários não podem ser usados como um resolveTarget em uma passagem de renderização.

Atualizações do Dawn

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

Novidades no WebGPU

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

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