Google ha annunciato l'inclusione per impostazione predefinita del supporto per l'API grafica WebGPU e il linguaggio di shader WGSL (WebGPU Shading Language) nella versione 113 di Chrome, il cui rilascio è previsto per il 2 maggio. WebGPU offre un'interfaccia di programmazione simile a Vulkan, Metal e Direct3D 12 per l'esecuzione di operazioni sul lato GPU, come il rendering e i calcoli, e consente l'utilizzo del linguaggio shader per scrivere programmi che girano sul lato GPU. L'implementazione di WebGPU sarà inizialmente disponibile solo nelle build per ChromeOS, macOS e Windows. Per Linux e Android, il supporto per WebGPU sarà attivato successivamente.
Oltre a Chrome, il supporto sperimentale per WebGPU è in fase di test da aprile 2020 in Firefox e da novembre 2021 in Safari. Per attivare WebGPU in Firefox è necessario impostare i flag dom.webgpu.enabled e gfx.webgpu.force-enabled in about:config. Attualmente non ci sono notizie sui piani per includere WebGPU per impostazione predefinita in Firefox e Safari. Le implementazioni di WebGPU sviluppate per Firefox e Chrome sono disponibili sotto forma di librerie separate: Dawn (C++) e wgpu (Rust), che possono essere utilizzate per integrare il supporto per WebGPU nelle proprie applicazioni. Sono anche in corso lavori per aggiungere il supporto di WebGPU in popolari librerie JavaScript, originariamente basate su WebGL. Ad esempio, il supporto completo per WebGPU è già stato annunciato in Babylon.js, mentre quello parziale si trova in Three.js, PlayCanvas e TensorFlow.js.
Concettualmente, WebGPU si differenzia da WebGL in modo simile a come l'API grafica Vulkan si distingue da OpenGL, ma a differenza di WebGL, WebGPU non si basa su un'API grafica specifica, ma rappresenta un livello universale che utilizza gli stessi primitivi a basso livello disponibili in Vulkan, Metal e Direct3D. WebGPU fornisce alle applicazioni JavaScript strumenti per un controllo a basso livello dell'organizzazione, elaborazione e invio di comandi alla GPU, gestione delle risorse correlate, memoria, buffer, oggetti texture e shader grafici compilati. Questo approccio consente di ottenere prestazioni più elevate delle applicazioni grafiche riducendo le spese generali e migliorando l'efficienza del lavoro con la GPU.
WebGPU consente di creare progetti 3D complessi per il web, funzionanti allo stesso livello di applicazioni dedicate che utilizzano direttamente Vulkan, Metal o Direct3D, senza essere vincolate a piattaforme specifiche. WebGPU offre anche ulteriori opportunità per il porting di applicazioni grafiche native in una forma in grado di funzionare con tecnologie web, grazie alla compilazione in WebAssembly. Oltre alla grafica 3D, WebGPU abbraccia anche le possibilità di eseguire calcoli sulla GPU e di eseguire shader.
Caratteristiche principali di WebGPU:
- Gestione separata delle risorse, dei lavori di preparazione e dell'invio di comandi alla GPU (in WebGL un singolo oggetto gestiva tutto insieme). Sono forniti tre contesti separati: GPUDevice per la creazione di risorse, come texture e buffer; GPUCommandEncoder per la codifica di comandi separati, inclusi stadi di rendering e calcolo; GPUCommandBuffer per l'invio in coda per l'esecuzione sulla GPU. Il risultato può essere visualizzato in un'area associata a uno o più elementi canvas, oppure può essere elaborato senza output (ad esempio, durante l'esecuzione di compiti di calcolo). La separazione degli stadi semplifica la distribuzione della creazione delle risorse e delle operazioni preparatorie in gestori diversi, che possono essere eseguiti in thread differenti.
- Un diverso approccio nella gestione degli stati. In WebGPU vengono proposti due oggetti — GPURenderPipeline e GPUComputePipeline — che consentono di combinare diversi stati definiti in anticipo dallo sviluppatore, permettendo al browser di non sprecare risorse per lavori supplementari, come la ricompilazione degli shader. Tra gli stati supportati ci sono: shader, layout dei buffer dei vertici e degli attributi, layout dei gruppi associati, miscelazione, profondità e maschere, formati di output dopo il rendering.
- Un modello di binding che ricorda molto i mezzi di raggruppamento delle risorse presenti in Vulkan. Per raggruppare le risorse in insiemi, WebGPU fornisce un oggetto GPUBindGroup, che può essere collegato ad altri oggetti simili durante la scrittura dei comandi per essere utilizzato negli shader. La creazione di tali gruppi consente al driver di eseguire in anticipo le necessarie operazioni preparatorie e permette al browser di cambiare molto più rapidamente i binding delle risorse tra le chiamate di rendering. La disposizione dei binding delle risorse può essere definita in anticipo utilizzando l'oggetto GPUBindGroupLayout.
Fonte: opennet.ru
