Novidades do WebGPU (Chrome 142)

François Beaufort
François Beaufort

Publicado em: 22 de outubro de 2025

Recursos de compatibilidade com formatos de textura estendidos

O novo recurso de GPU "texture-formats-tier1" permite que os desenvolvedores portem conteúdo existente para a Web sem precisar reescrever para as capacidades inferiores do WebGPU. Ele oferece suporte a novos formatos de textura "r16unorm", "r16snorm", "rg16unorm", "rg16snorm", "rgba16unorm" e "rgba16snorm" com recursos de anexação de renderização, capacidade de mistura, multissampling e acesso a texturas de armazenamento "read-only" ou "write-only". Ele também permite formatos de textura "r8snorm", "rg8snorm" e "rgba8snorm" atuais com recursos de anexação de renderização, capacidade de mesclagem, multissampling e resolução. Mais formatos de textura também podem ser usados com o acesso à textura de armazenamento "read-only" ou "write-only".

O novo recurso de GPU "texture-formats-tier2" 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. A ativação do "texture-formats-tier2" na criação do dispositivo ativa automaticamente o "texture-formats-tier1".

Consulte o snippet a seguir e a entrada do chromestatus.

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 à equipe da Intel pelo trabalho!

Índice primitivo em 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 shader de fragmento. Ele começa em 0, aumenta em 1 depois que cada primitiva é processada e é redefinido para 0 entre cada instância extraída.

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

O snippet de código a seguir mostra um shader de fragmentos que renderiza a segunda primitiva em vermelho e todas as outras 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...

Confira mais detalhes no exemplo de seleção de primitivas e na 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 de primitivas no modo "índices primitivos".

Atualizações do amanhecer

A variável DAWN_BUILD_MONOLITHIC_LIBRARY do CMake 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 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 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