Captura do ecossistema WebGPU

François Beaufort
François Beaufort

A WebGPU é frequentemente vista como uma API de gráficos da Web que concede acesso unificado e rápido às GPUs, expondo recursos de hardware de ponta e permitindo operações de renderização e computação em uma GPU, análoga ao Direct3D 12, Metal e Vulkan.

No entanto, a WebGPU transcende os limites de uma mera API JavaScript. Ela é um elemento básico fundamental semelhante ao WebAssembly, com implicações que se estendem muito além da Web devido ao seu ecossistema emergente. 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 central.

Explorar o ecossistema atual

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

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

Para o Chrome, isso se materializou como Dawn, uma biblioteca C/C++ que traduz 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 conhecimento do fornecedor do navegador.

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

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

Existe um ecossistema semelhante para o Rust com wgpu, a implementação da WebGPU do Firefox. 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 Deno JavaScript oferece suporte à WebGPU por wgpu. Consulte a postagem do blog wgpu Alliance with Deno (link em inglês).

Isso estabelece um ecossistema paralelo entre o Rust e o C++, como mostrado no diagrama abaixo.

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

Horizontes emergentes

O ecossistema da WebGPU se estende além dos realms JavaScript, C++ e Rust.

Talvez a linguagem de programação de sua preferência já tenha vinculações para a WebGPU, porque os engenheiros que trabalham em implementações dela 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 idiomas usando C FFI.

A equipe do Chrome também está considerando usar o Dawn como 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. No momento, esse recurso está na fase experimental no macOS e no Windows usando a flag chrome://flags/#skia-graphite.

Agradecimentos

Imagem principal de Daniel Öberg no Unsplash.