Novidades da WebGPU (Chrome 125)

François Beaufort
François Beaufort

O número de recursos da WebGPU pode parecer um pouco escasso desta vez, mas alguns avanços importantes estão chegando! As versões futuras vão incluir recursos como melhorias na velocidade de compilação do sombreador e mudanças no modelo assíncrono da implementação usando WGPUFuture.

Subgrupos (recurso em desenvolvimento)

O recurso de subgrupos permite o paralelismo no nível de SIMD, permitindo que as linhas de execução em um grupo se comuniquem e realizem operações matemáticas coletivas (por exemplo, calcular a soma de 16 números). Isso oferece uma forma altamente eficiente de compartilhamento de dados entre linhas de execução.

As operações de subgrupo são compatíveis com APIs de GPU modernas, mas os detalhes de nomenclatura e implementação variam. A equipe do Chrome identificou as semelhanças e agora está trabalhando para padronizar esse recurso. Confira a proposta e comente se tiver dúvidas.

Há uma implementação mínima e não padronizada de subgrupos por trás da flag "Recursos experimentais da plataforma da Web" em chrome://flags/#enable-experimental-web-platform-features para que os desenvolvedores possam testar e compartilhar feedback, já que os benefícios reais ainda não foram comprovados no contexto da WebGPU.

Quando o recurso "chromium-experimental-subgroups" estiver disponível em um GPUAdapter, solicite um GPUDevice com esse recurso para receber suporte experimental a subgrupos em WGSL e confira os limites minSubgroupSize e maxSubgroupSize.

Você também precisa ativar explicitamente essa extensão no código WGSL com enable chromium_experimental_subgroups. Quando ativado, você tem acesso às seguintes adições:

  • subgroup_invocation_id: um valor integrado para o índice da linha de execução no subgrupo.
  • subgroup_size: um valor integrado para acesso ao tamanho do subgrupo.
  • subgroupBallot(value): Retorna um conjunto de campos de bits em que o bit correspondente a subgroup_invocation_id é 1 se value for verdadeiro para essa invocação ativa e 0 caso contrário.
  • subgroupBroadcast(value, id): transmite o value da invocação com subgroup_invocation_id correspondente a id para todas as invocações no subgrupo. Observação: id precisa ser uma constante de tempo de compilação.

O snippet de código a seguir fornece uma base para testar e descobrir o potencial dos subgrupos.

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

const shaderModule = device.createShaderModule({ code: `
  enable chromium_experimental_subgroups;

  @compute @workgroup_size(64) fn main(
      @builtin(global_invocation_id) global_id : vec3u,
      @builtin(subgroup_size) sg_size : u32,
      @builtin(subgroup_invocation_id) sg_id : u32) {
    // TODO: Use subgroupBallot() and subgroupBroadcast().
  }`,
});

Renderizar para uma fatia de textura 3D

Agora é possível renderizar diretamente para fatias de texturas 3D em passagens de renderização, expandindo as capacidades além da renderização de textura 2D comum, com o novo depthSlice membro em um GPURenderPassColorAttachment. Essa adição permite, por exemplo, criar cenas e efeitos baseados em voxel renderizando diretamente em volumes de textura 3D. Consulte o problema dawn:1020.

Atualizações do Dawn

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