Captura do ecossistema WebGPU

François Beaufort
François Beaufort
Corentin Wallez
Corentin Wallez

A WebGPU é frequentemente percebida como uma API de gráficos da Web que oferece acesso unificado e rápido a GPUs, expondo recursos de hardware de última geração e permitindo operações de renderização e computação em uma GPU, de forma análoga ao Direct3D 12, Metal e Vulkan.

No entanto, a WebGPU transcende os limites de uma mera API JavaScript. É um elemento básico fundamental como o WebAssembly, com implicações que se estendem muito além da Web devido ao seu ecossistema em ascensão. A equipe do Chrome reconhece a WebGPU como mais do que apenas uma tecnologia da Web. Ela é um ecossistema próspero centrado em uma tecnologia principal.

Como conhecer o ecossistema atual

A jornada começa com a especificação do JavaScript, um esforço colaborativo que envolve várias organizações, como Apple, Google, Intel, Mozilla e Microsoft. Todos os principais navegadores da Web já implementaram ou estão em processo de implementação da WebGPU.

Ao mesmo tempo, Mozilla e Google reconheceram o potencial da WebGPU em aplicativos específicos da plataforma e separaram as implementações da WebGPU dos navegadores, permitindo o uso independente.

No Chrome, isso se materializou como Dawn, uma biblioteca C/C++ que converte chamadas da WebGPU em comandos do driver da GPU. A Dawn capacita aplicativos em C e C++ a usar a WebGPU nativamente, fornecendo uma abstração de GPU portátil e ergonômica usando o especialista do fornecedor do navegador.

Como demonstrado na postagem do blog WebGPU: a API gráfica multiplataforma do futuro, a conversão de um aplicativo WebGPU específico da plataforma para a Web é simples. O Emscripten, a cadeia de ferramentas do C++ WebAssembly, já oferece suporte à WebGPU, exigindo apenas modificações mínimas para a portabilidade para a Web.

Também é possível executar seu código JavaScript WebGPU fora do navegador com o ambiente de execução JavaScript do Node.js, já que ele inclui um módulo WebGPU baseado em Dawn. Ela permite executar o código sem modificações no lado do servidor ou em outros contextos específicos da plataforma.

Um ecossistema semelhante existe para Rust com wgpu, a implementação do Firefox da WebGPU. O Wgpu pode ser integrado diretamente aos aplicativos Rust, que podem ser transferidos para a Web usando o web-sys. Além disso, o ambiente de execução do JavaScript do Deno oferece suporte ao WebGPU pelo wgpu. Consulte a postagem do blog aliança wgpu com Deno.

Isso estabelece um ecossistema paralelo entre Rust e C++, conforme mostrado no diagrama a seguir.

Diagrama do ecossistema da WebGPU em 2023.
Ecossistema da WebGPU em 2023.

Horizontes emergentes

O ecossistema da WebGPU vai além dos domínios JavaScript, C++ e Rust.

Sua linguagem de programação preferida pode já ter vinculações para a WebGPU, porque os engenheiros que trabalham em implementações da WebGPU também estão desenvolvendo um cabeçalho C comum para a WebGPU. Isso pode ser usado para segmentar Dawn, wgpu e outros, facilitando a criação de vinculações para linguagens que usam FFI (link em inglês) em C.

A equipe do Chrome também está considerando usar o Dawn como o back-end de renderização padrão para todos os elementos da interface do navegador, incluindo menus, barras de ferramentas, ferramentas para desenvolvedores e conteúdo da Web. Isso eliminaria a necessidade de implementações de renderização separadas para cada API nativa, simplificando o processo de desenvolvimento. Esse recurso está em fase experimental no macOS e no Windows, atrás da flag chrome://flags/#skia-graphite.