Il W3C presenta la bozza dello standard WebGPU

Il W3C ha rilasciato le prime bozze delle specifiche WebGPU e WebGPU Shading Language (WGSL), che definiscono le API per eseguire operazioni GPU come rendering e calcolo, nonché un linguaggio shader per scrivere programmi eseguiti sulla GPU. concettualmente simile alle API Vulkan, Metal e Direct3D 12. Le specifiche sono state preparate da un gruppo di lavoro che comprendeva ingegneri di Mozilla, Google, Apple e Microsoft.

Concettualmente, WebGPU differisce da WebGL più o meno allo stesso modo in cui l'API grafica Vulkan differisce da OpenGL, ma non è basata su un'API grafica specifica, ma è un livello universale che utilizza le stesse primitive di basso livello trovate in Vulkan, Metal e Diretto3D. WebGPU fornisce alle applicazioni JavaScript un controllo di basso livello sull'organizzazione, l'elaborazione e la trasmissione dei comandi alla GPU, gestendo le risorse associate, la memoria, i buffer, gli oggetti texture e gli shader grafici compilati. Questo approccio consente di ottenere prestazioni più elevate per le applicazioni grafiche riducendo i costi generali e aumentando l'efficienza del lavoro con la GPU.

WebGPU consente di creare progetti 3D complessi per il Web che funzionano non peggio dei programmi autonomi che accedono direttamente a Vulkan, Metal o Direct3D, ma non sono legati a piattaforme specifiche. WebGPU fornisce inoltre funzionalità aggiuntive per il porting di programmi grafici nativi in ​​un modulo abilitato per il Web tramite la compilazione in WebAssembly. Oltre alla grafica 3D, WebGPU include anche funzionalità relative allo scarico dei calcoli sulla GPU e all'esecuzione degli shader.

Caratteristiche principali di WebGPU:

  • Gestione separata delle risorse, lavoro preparatorio e trasmissione dei comandi alla GPU (in WebGL, un oggetto era responsabile di tutto in una volta). Vengono forniti tre contesti separati: GPUDevice per la creazione di risorse come texture e buffer; GPUCommandEncoder per la codifica di singoli comandi, comprese le fasi di rendering e calcolo; GPUCommandBuffer da passare alla coda di esecuzione della GPU. Il risultato può essere visualizzato in un'area associata a uno o più elementi canvas o visualizzato senza output (ad esempio, durante l'esecuzione di attività computazionali). La separazione delle fasi semplifica la separazione delle operazioni di creazione e provisioning delle risorse in diversi gestori che possono essere eseguiti su thread diversi.
  • Un approccio diverso alla gestione degli stati. WebGPU fornisce due oggetti: GPURenderPipeline e GPUComputePipeline, che consentono di combinare diversi stati predefiniti dallo sviluppatore, il che consente al browser di non sprecare risorse per lavoro aggiuntivo, come la ricompilazione degli shader. Gli stati supportati includono: shader, vertex buffer e layout di attributi, layout di gruppo appiccicoso, blending, profondità e pattern, formati di output post-rendering.
  • Un modello vincolante, molto simile agli strumenti di raggruppamento delle risorse di Vulkan. Per raggruppare le risorse in gruppi, WebGPU fornisce un oggetto GPUBindGroup che, al momento della scrittura dei comandi, può essere associato ad altri oggetti simili da utilizzare negli shader. La creazione di tali gruppi consente al driver di eseguire le azioni preparatorie necessarie in anticipo e consente al browser di modificare i binding delle risorse tra le chiamate draw molto più velocemente. Il layout delle associazioni di risorse può essere predefinito utilizzando l'oggetto GPUBindGroupLayout.

Fonte: opennet.ru

Aggiungi un commento