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 simples API JavaScript. Ela é um bloco de construção fundamental semelhante ao WebAssembly, com implicações que se estendem muito além da Web devido ao seu ecossistema em expansã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. O Dawn permite que aplicativos C e C++ usem a WebGPU de forma nativa, oferecendo uma abstração de GPU portátil e ergonômica usando a experiência 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. Ele permite executar seu código sem modificações do 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 a aplicativos Rust, que podem ser transferidos para a Web usando o web-sys. Além disso, o ambiente de execução do JavaScript Deno oferece suporte à 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, já que os engenheiros que trabalham nas 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 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.