Novidades da WebGPU (Chrome 130)

François Beaufort
François Beaufort

Combinação de duas origens

A combinação de duas saídas do sombreador de fragmento em um único framebuffer é chamada de mesclagem de fonte dupla. Essa técnica é particularmente útil para aplicativos que exigem operações de mesclagem complexas, como aquelas baseadas nos modos de mesclagem Porter-Duff. Ao substituir as passagens de renderização subsequentes por uma única passagem, a mesclagem de duas fontes pode melhorar o desempenho e a flexibilidade.

O novo recurso "dual-source-blending" da WebGPU permite usar o atributo @blend_src da WGSL em @location(0) para denotar o índice de origem da combinação e os seguintes fatores de combinação: "src1", "one-minus-src1", "src1-alpha" e "one-minus-src1-alpha". Consulte o snippet a seguir, a entrada do chromestatus e o problema 341973423.

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

const code = `
  enable dual_source_blending;

  struct FragOut {
    @location(0) @blend_src(0) color : vec4f,
    @location(0) @blend_src(1) blend : vec4f,
  }

  @fragment fn main() -> FragOut {
    var output : FragOut;
    output.color = vec4f(1.0, 1.0, 1.0, 1.0);
    output.blend = vec4f(0.5, 0.5, 0.5, 0.5);
    return output;
  }
`;

const shaderModule = device.createShaderModule({ code });
// Create a render pipeline with this shader module
// and run the shader on the GPU...

Melhorias no tempo de compilação de sombreador no Metal

A equipe do Chrome está aprimorando o Tint, o compilador de linguagem de sombreador da WebGPU, introduzindo uma representação intermediária (IR) para dispositivos compatíveis com a WebGPU com o back-end do Metal. Esse IR, posicionado entre a árvore de sintaxe abstrata (AST, na sigla em inglês) de Tint e o gravador de back-end Metal, tornará o compilador mais eficiente e fácil de manter, beneficiando desenvolvedores e usuários. Os testes iniciais mostram que a nova versão do Tint é até 10 vezes mais rápida ao traduzir os shaders WGSL do Unity para MSL.

Um fluxograma mostra o processo de conversão do código do sombreador da WGSL em instruções da GPU de baixo nível.
Criação de pipeline de renderização no macOS.

Essas melhorias, que já estão disponíveis no Android e no ChromeOS, estão sendo gradualmente expandidas para dispositivos macOS compatíveis com WebGPU e o back-end do Metal. Consulte o problema 42251016.

Descontinuação do método requestAdapterInfo() do GPUAdapter

O método assíncrono requestAdapterInfo() do GPUAdapter é redundante, porque os desenvolvedores já podem receber GPUAdapterInfo de forma síncrona usando o atributo info do GPUAdapter. Portanto, o método requestAdapterInfo() não padrão do GPUAdapter foi descontinuado. Consulte intent a ser descontinuada.

O console do DevTools mostra um aviso de descontinuação para requestAdapterInfo().
Aviso de descontinuação do recurso requestAdapterInfo() no Chrome DevTools.

Atualizações do Dawn

A API webgpu.h em C definiu algumas convenções de nomenclatura para estruturas de extensão. Confira as mudanças de nome a seguir e o problema 42241174.

WGPURenderPassDescriptor extensões
WGPURenderPassDescriptorMaxDrawCount -> WGPURenderPassMaxDrawCount
WGPUShaderModuleDescriptor extensões
WGPUShaderModuleSPIRVDescriptor -> WGPUShaderSourceSPIRV
WGPUShaderModuleWGSLDescriptor -> WGPUShaderSourceWGSL
WGPUSurfaceDescriptor extensões
WGPUSurfaceDescriptorFromMetalLayer -> WGPUSurfaceSourceMetalLayer
WGPUSurfaceDescriptorFromWindowsHWND -> WGPUSurfaceSourceWindowsHWND
WGPUSurfaceDescriptorFromXlibWindow -> WGPUSurfaceSourceXlibWindow
WGPUSurfaceDescriptorFromWaylandSurface -> WGPUSurfaceSourceWaylandSurface
WGPUSurfaceDescriptorFromAndroidNativeWindow -> WGPUSurfaceSourceAndroidNativeWindow
WGPUSurfaceDescriptorFromXcbWindow -> WGPUSurfaceSourceXCBWindow
WGPUSurfaceDescriptorFromCanvasHTMLSelector -> WGPUSurfaceSourceCanvasHTMLSelector_Emscripten

O tipo de atributo depthWriteEnabled do WGPUDepthStencilState muda de booleano para WGPUOptionalBool para refletir melhor os três estados possíveis (verdadeiro, falso e indefinido), como na API JavaScript. Para saber mais, consulte o snippet de código a seguir e o PR webgpu-headers.

wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default

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

Novidades na WebGPU

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

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