Captura el ecosistema de WebGPU

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

WebGPU suele percibirse como una API de gráficos web que otorga acceso unificado y rápido a GPU al exponer capacidades de hardware de vanguardia y habilitar operaciones de procesamiento y procesamiento en una GPU, análoga a Direct3D 12, Metal y Vulkan.

Sin embargo, WebGPU trasciende los límites de una simple API de JavaScript. Es un componente básico similar a WebAssembly, con implicaciones que se extienden mucho más allá de la Web debido a su ecosistema en crecimiento. El equipo de Chrome reconoce que WebGPU es más que solo tecnología web; es un ecosistema próspero centrado en una tecnología central.

Exploración del ecosistema actual

El recorrido comienza con la especificación de JavaScript, un esfuerzo colaborativo que involucra a numerosas organizaciones, como Apple, Google, Intel, Mozilla y Microsoft. Actualmente, todos los principales navegadores web han implementado o están en proceso de implementar WebGPU.

Al mismo tiempo, Mozilla y Google reconocieron el potencial de WebGPU en las aplicaciones específicas de la plataforma y en las implementaciones de WebGPU separadas de los navegadores, lo que permitió el uso independiente.

Para Chrome, esto se materializó como Dawn, una biblioteca C/C++ que convierte las llamadas de WebGPU en comandos del controlador de GPU. Dawn permite que las aplicaciones de C y C++ usen WebGPU de forma nativa, lo que proporciona una abstracción de GPU portátil y ergonómica gracias a la experiencia de los proveedores de navegadores.

Como se demostró en la entrada de blog WebGPU: the cross-platform refiere API of future (WebGPU: la API multiplataforma de gráficos del futuro) es sencillo portar una aplicación WebGPU específica de la plataforma a la Web. Emscripten, la cadena de herramientas de WebAssembly para C++, ya es compatible con WebGPU y solo requiere modificaciones mínimas para migrarla a la Web.

También puedes ejecutar tu código WebGPU de JavaScript fuera del navegador con el entorno de ejecución de JavaScript de Node.js, ya que incluye un módulo de WebGPU basado en Dawn. Te permite ejecutar tu código sin realizar modificaciones en el servidor o en otros contextos específicos de la plataforma.

Existe un ecosistema similar para Rust con wgpu, la implementación de WebGPU de Firefox. Wgpu se puede integrar directamente en las aplicaciones de Rust, que luego se pueden transferir a la Web con web-sys. Además, el entorno de ejecución de JavaScript de Deno es compatible con WebGPU hasta wgpu. Consulta la entrada de blog sobre la alianza de wgpu con Deno.

Esto establece un ecosistema paralelo entre Rust y C++, como se muestra en el siguiente diagrama.

Diagrama del ecosistema de WebGPU en 2023.
Ecosistema de WebGPU en 2023.

Horizontes emergentes

El ecosistema de WebGPU se extiende más allá de los dominios de JavaScript, C++ y Rust.

Es posible que tu lenguaje de programación preferido ya tenga vinculaciones para WebGPU, ya que los ingenieros que trabajan en implementaciones de WebGPU también desarrollan un encabezado C común para WebGPU. Esto se puede usar para orientar Dawn, wgpu y otros, y facilitar la creación de vinculaciones para lenguajes con C FFI.

El equipo de Chrome también está considerando usar Dawn como backend de renderización predeterminado para todos los elementos de la IU del navegador, incluidos los menús, las barras de herramientas, las herramientas para desarrolladores y el contenido web. Esto eliminaría la necesidad de implementaciones de renderización independientes para cada API nativa, lo que simplificaría el proceso de desarrollo. Actualmente, esta función se encuentra en la etapa experimental en macOS y Windows detrás de la marca chrome://flags/#skia-graphite.

Agradecimientos

Hero image de Daniel Öberg en Unsplash.