Novidades da WebGPU (Chrome 130)

François Beaufort
François Beaufort

Combinação de duas origens

A combinação de duas saídas de sombreador de fragmentos em um único framebuffer é chamada de mistura de duas fontes. 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 do WGSL em @location(0) para indicar o índice de origem da mistura e os seguintes fatores de mistura: "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) do Tint e o gravador de back-end do Metal, vai 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 WGSL em instruções de 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, já que os desenvolvedores já podem receber o 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 Intenção de descontinuação.

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 C webgpu.h 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 confirmações.

Novidades na WebGPU

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

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