L'ecosistema WebGPU

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

WebGPU è spesso percepito come un'API per grafica web che concede accesso unificato e rapido alle GPU grazie all'esposizione di funzionalità hardware all'avanguardia e all'abilitazione di operazioni di rendering e calcolo su una GPU, analogamente a Direct3D 12, Metal e Vulkan.

Tuttavia, WebGPU trascende i confini di una mera API JavaScript; è un componente di base fondamentale simile a WebAssembly, con implicazioni che si estendono ben oltre il web a causa del suo ecosistema in crescita. Per il team di Chrome, WebGPU non è soltanto una tecnologia web, ma un florido ecosistema incentrato su una tecnologia di base.

Esplorare l'ecosistema attuale

Il percorso inizia con la specifica JavaScript, un'impegno collaborativo che coinvolge numerose organizzazioni come Apple, Google, Intel, Mozilla e Microsoft. Attualmente, tutti i principali browser web hanno implementato o stanno per implementare WebGPU.

Allo stesso tempo, Mozilla e Google hanno riconosciuto il potenziale di WebGPU nelle applicazioni specifiche della piattaforma e hanno separato le implementazioni di WebGPU dai browser, consentendo l'utilizzo autonomo.

Per Chrome, questo si è materializzato come Dawn, una libreria C/C++ che traduce le chiamate WebGPU in comandi del driver GPU. Dawn consente alle applicazioni C e C++ di utilizzare WebGPU in modo nativo, fornendo un'astrazione GPU ergonomica e portatile grazie all'esperienza del fornitore di browser.

Come dimostrato nel blog post WebGPU: l'API grafica multipiattaforma di domani, il trasferimento sul web di un'applicazione WebGPU specifica per la piattaforma è semplice. Emscripten, la toolchain C++ WebAssembly, supporta già WebGPU, pertanto sono necessarie solo modifiche minime per portarla sul web.

Puoi anche eseguire il codice WebGPU JavaScript all'esterno del browser con il runtime JavaScript Node.js, in quanto include un modulo WebGPU basato su Dawn. Consente di eseguire il codice senza modifiche lato server o in altri contesti specifici della piattaforma.

Un ecosistema simile esiste anche per Rust con wgpu, l'implementazione di WebGPU di Firefox. Wgpu può essere integrato direttamente nelle applicazioni Rust, che possono poi essere portate sul web utilizzando web-sys. Inoltre, il runtime JavaScript Deno supporta WebGPU tramite wgpu. Leggi il post del blog sull'alleanza di wgpu con Deno.

Questo stabilisce un ecosistema parallelo tra Rust e C++, come mostrato nel diagramma seguente.

Diagramma dell'ecosistema WebGPU nel 2023.
Ecosistema WebGPU nel 2023.

Orizzonti emergenti

L'ecosistema WebGPU va oltre le aree di autenticazione JavaScript, C++ e Rust.

Il tuo linguaggio di programmazione preferito potrebbe avere già associazioni per WebGPU, in quanto gli ingegneri che lavorano alle implementazioni di WebGPU stanno sviluppando anche un intestazione C comune per WebGPU. Questo può essere utilizzato per scegliere come target Dawn, wgpu e altri, semplificando la creazione di associazioni per le lingue che utilizzano C FFI.

Il team di Chrome sta anche valutando di utilizzare Dawn come backend di rendering predefinito per tutti gli elementi dell'interfaccia utente del browser, inclusi menu, barre degli strumenti, strumenti per sviluppatori e contenuti web. Questo elimina la necessità di implementazioni di rendering separate per ogni API nativa, semplificando il processo di sviluppo. Questa funzionalità è attualmente in fase sperimentale su macOS e Windows, dietro il flag chrome://flags/#skia-graphite.

Ringraziamenti

Immagine hero di Daniel Öberg su Unsplash.