A empresa Google anunciou que a partir da versão 113 do Chrome, que será lançada em 2 de maio, o suporte ao API gráfico WebGPU e à linguagem de sombreamento WGSL (WebGPU Shading Language) será ativado por padrão. O WebGPU fornece uma interface de programação semelhante ao Vulkan, Metal e Direct3D 12 para executar operações do lado da GPU, como renderização e cálculos, além de permitir o uso da linguagem de sombreamento para escrever programas que rodam na GPU. A implementação do WebGPU será inicialmente incluída apenas em versões para ChromeOS, macOS e Windows. O suporte ao WebGPU para Linux e Android será ativado posteriormente.
Além do Chrome, o suporte experimental ao WebGPU está sendo testado desde abril de 2020 no Firefox e desde novembro de 2021 no Safari. Para ativar o WebGPU no Firefox, os flags dom.webgpu.enabled e gfx.webgpu.force-enabled devem ser configurados em about:config. Até agora, não há informações sobre planos para incluir o WebGPU por padrão no Firefox e no Safari. As implementações do WebGPU em desenvolvimento para Firefox e Chrome estão disponíveis na forma de bibliotecas separadas — Dawn (C++) e wgpu (Rust), que podem ser usadas para integrar o suporte ao WebGPU em suas aplicações. Também está em andamento o trabalho para adicionar suporte ao WebGPU em bibliotecas JavaScript populares que originalmente utilizam o WebGL. Por exemplo, suporte completo ao WebGPU já foi declarado no Babylon.js, e suporte parcial em Three.js, PlayCanvas e TensorFlow.js.
Conceitualmente, o WebGPU difere do WebGL de forma semelhante ao que o API gráfico Vulkan difere do OpenGL, mas o WebGPU não se baseia em um API gráfico específico, representando sim uma camada universal que utiliza os mesmos primitivos de baixo nível disponíveis no Vulkan, Metal e Direct3D. O WebGPU fornece aos aplicativos em JavaScript ferramentas para controle de baixo nível sobre a organização, processamento e transmissão de comandos para a GPU, além de gerenciar recursos relacionados, memória, buffers, objetos de textura e sombreados gráficos compilados. Essa abordagem permite alcançar um desempenho mais alto em aplicativos gráficos, reduzindo a sobrecarga e aumentando a eficiência no trabalho com a GPU.
WebGPU permite criar projetos 3D complexos para a web que funcionam tão bem quanto programas isolados que usam Vulkan, Metal ou Direct3D diretamente, mas sem estarem restritos a plataformas específicas. O WebGPU também oferece capacidades adicionais na portabilidade de programas gráficos nativos para uma forma que pode operar com tecnologias web, graças à compilação em WebAssembly. Além da gráficos 3D, o WebGPU abrange também capacidades relacionadas ao deslocamento de cálculos para a GPU e à execução de shaders.
Principais características do WebGPU:
- Gerenciamento separado de recursos, tarefas preparatórias e envio de comandos para a GPU (no WebGL, um único objeto lidava com tudo de uma vez). São fornecidos três contextos distintos: GPUDevice para a criação de recursos, como texturas e buffers; GPUCommandEncoder para a codificação de comandos individuais, incluindo fases de renderização e computação; GPUCommandBuffer para o envio à fila de execução na GPU. O resultado pode ser renderizado em uma área associada a um ou mais elementos canvas, ou processado sem saída (por exemplo, ao executar tarefas computacionais). A separação das fases simplifica a distribuição da criação de recursos e operações preparatórias em diferentes manipuladores, que podem ser executados em diferentes threads.
- Uma abordagem diferente na manipulação de estados. O WebGPU oferece dois objetos — GPURenderPipeline e GPUComputePipeline — que permitem combinar diferentes estados, previamente definidos pelo desenvolvedor, o que possibilita ao navegador não desperdiçar recursos em trabalhos adicionais, como a recompilação de shaders. Entre os estados suportados estão: shaders, layouts de buffers de vértices e atributos, layouts de grupos anexados, mesclagem, profundidade e templates, formatos de saída após a renderização.
- O modelo de ligação, que se assemelha muito aos mecanismos de agrupamento de recursos presentes no Vulkan. Para agrupar recursos no WebGPU, é fornecido o objeto GPUBindGroup, que pode ser associado a outros objetos semelhantes durante a gravação de comandos para uso em shaders. A criação de tais grupos permite que o driver execute antecipadamente as ações preparatórias necessárias, além de permitir que o navegador altere as ligações de recursos de forma significativamente mais rápida entre as chamadas de renderização. A disposição das ligações de recursos pode ser definida previamente utilizando o objeto GPUBindGroupLayout.
Fonte: opennet.ru
