L'ecosistema WebGPU

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

WebGPU è spesso percepita come un'API di grafica web che consente l'accesso unificato e rapido alle GPU esponendo funzionalità hardware all'avanguardia e attivando operazioni di rendering e calcolo su una GPU, in modo analogo 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 vanno ben oltre il web grazie al suo ecosistema fiorente. Il team di Chrome riconosce che WebGPU è molto più di una tecnologia web: è un ecosistema fiorente incentrato su una tecnologia di base.

Esplorazione dell'ecosistema attuale

Il percorso inizia con la specifica JavaScript, un impegno collaborativo che coinvolge numerose organizzazioni come Apple, Google, Intel, Mozilla e Microsoft. 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 WebGPU dai browser, consentendo l'utilizzo autonomo.

Per Chrome, questo si è concretizzato in Dawn, una libreria C/C++ che traduce le chiamate WebGPU in comandi del driver della GPU. Dawn consente alle applicazioni C e C++ di utilizzare WebGPU in modo nativo, fornendo un'astrazione della GPU portatile ed ergonomica utilizzando l'esperienza dei fornitori di browser.

Come dimostrato nel post del blog WebGPU: l'API grafica multipiattaforma del futuro, il porting di un'applicazione WebGPU specifica della piattaforma sul web è semplice. Emscripten, la toolchain WebAssembly C++, supporta già WebGPU e richiede solo modifiche minime per il porting al web.

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

Esiste un ecosistema simile per Rust con wgpu, l'implementazione di WebGPU di Firefox. Wgpu può essere integrato direttamente nelle applicazioni Rust, che possono poi essere trasferite sul web utilizzando web-sys. Inoltre, il runtime JavaScript di Deno supporta WebGPU tramite wgpu. Leggi il post del blog su wgpu alliance with Deno.

Viene così stabilito un ecosistema parallelo tra Rust e C++, come mostrato nel seguente diagramma.

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

Orizzonti emergenti

L'ecosistema WebGPU si estende oltre i domini JavaScript, C++ e Rust.

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

Il team di Chrome sta anche valutando la possibilità 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. In questo modo, non sarà più necessario implementare il rendering separatamente per ogni API nativa, semplificando il processo di sviluppo. Questa funzionalità è in fase sperimentale su macOS e Windows dietro il flag chrome://flags/#skia-graphite.