Novidades do WebGPU (Chrome 142)

François Beaufort
François Beaufort

Publicado em: 22 de outubro de 2025

Recursos de suporte a formatos de textura estendidos

O novo "texture-formats-tier1" recurso de GPU permite que os desenvolvedores portem conteúdo atual para a Web sem precisar reescrevê-lo para os recursos mais baixos da WebGPU. Ele oferece suporte a novos formatos de textura "r16unorm", "r16snorm", "rg16unorm", "rg16snorm", "rgba16unorm" e "rgba16snorm" com recursos de anexo de renderização, mesclagem e multiamostragem e acesso à textura de armazenamento "read-only" ou "write-only". Ele também permite formatos de textura "r8snorm", "rg8snorm", "rgba8snorm" atuais com recursos de anexo de renderização, mesclagem, multiamostragem e resolução. Mais formatos de textura também podem ser usados com "read-only" ou "write-only" acesso à textura de armazenamento.

O novo "texture-formats-tier2" recurso de GPU permite o acesso à textura de armazenamento "read-write" para formatos específicos, o que é essencial para projetos como a portabilidade do Unreal Engine para a Web. Observação: a ativação de "texture-formats-tier2" na criação do dispositivo ativa automaticamente "texture-formats-tier1".

Consulte o snippet e a entrada do chromestatus a seguir.

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

const requiredFeatures = [];
if (adapter.features.has("texture-format-tier1")) {
  requiredFeatures.push("texture-format-tier1");
}
if (adapter.features.has("texture-format-tier2")) {
  requiredFeatures.push("texture-format-tier2");
}
const device = await adapter.requestDevice({ requiredFeatures });

// Later on, when dealing with "r8unorm" texture formats for example...
if (device.features.has("texture-format-tier2")) {
  // Use "read-write" storage texture access...
} else if (device.features.has("texture-format-tier1")) {
  // Use "read-only" or "write-only" storage texture access...
} else {
  // Fallback: Use another texture format...
}

Agradecemos muito ao pessoal da Intel pelo trabalho.

Índice primitivo na WGSL

O primitive_index é um valor WGSL integrado que identifica exclusivamente a primitiva atual (por exemplo, um ponto, uma linha ou um triângulo) que está sendo processada por um sombreador de fragmentos. Ele começa em 0, aumenta em 1 após o processamento de cada primitiva e é redefinido para 0 entre cada instância desenhada.

Quando o recurso "primitive-index" estiver disponível em um GPUAdapter, solicite um GPUDevice com esse recurso para receber suporte ao índice primitivo na WGSL e ative explicitamente essa extensão no código WGSL com enable primitive_index;. Depois de ativado, use o valor inteiro integrado primitive_index no sombreador de fragmentos para acessar dados por primitiva ou realizar uma lógica que varia para cada forma geométrica distinta que está sendo renderizada, por exemplo.

O snippet de código a seguir mostra um sombreador de fragmentos que renderiza a segunda primitiva em vermelho e todas as outras primitivas em azul.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("primitive-index")) {
  throw new Error("Primitive index support is not available");
}
// Explicitly request primitive index support.
const device = await adapter.requestDevice({
  requiredFeatures: ["primitive-index"],
});

const fragmentShaderModule = device.createShaderModule({ code: `
  enable primitive_index;

  @fragment
  fn main(@builtin(primitive_index) i : u32) -> @location(0) vec4f {
    if (i == 1) {
      return vec4f(1, 0, 0, 1);
    }
    return vec4f(0, 1, 0, 1);
  }`,
});
// Send the appropriate commands to the GPU...

Para saber mais, confira o exemplo de seleção primitiva e a entrada do chromestatus.

Os triângulos do modelo de bule de chá 3D são coloridos com base nos valores de índice primitivo.
O exemplo de seleção primitiva no modo "índices primitivos".

Atualizações do Dawn

A variável CMake DAWN_BUILD_MONOLITHIC_LIBRARY usada para processar o tipo de biblioteca monolítica a ser criada mudou o valor padrão de OFF para STATIC. Assim, por padrão, os arquivos libwebgpu* serão gerados.

O Dawn agora processa corretamente o padrão wgpu::PresentMode::Undefined ao configurar um wgpu::Surface. Consulte o problema 441410668.

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 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