Il supporto WebGPU sarà abilitato in Chrome

Google ha annunciato il supporto predefinito per l'API grafica WebGPU e WebGPU Shading Language (WGSL) in Chrome 113, il cui rilascio è previsto per il 2 maggio. WebGPU fornisce un'API simile a Vulkan, Metal e Direct3D 12 per l'esecuzione di operazioni lato GPU come il rendering e il calcolo e consente inoltre di utilizzare un linguaggio shader per scrivere programmi lato GPU. L'implementazione WebGPU sarà abilitata inizialmente solo nelle build per ChromeOS, macOS e Windows. Per Linux e Android, il supporto WebGPU verrà attivato in un secondo momento.

Oltre a Chrome, il supporto sperimentale di WebGPU è stato testato da aprile 2020 in Firefox e da novembre 2021 in Safari. Per abilitare WebGPU in Firefox, imposta i flag dom.webgpu.enabled e gfx.webgpu.force-enabled in about:config. Non ci sono ancora piani per abilitare WebGPU per impostazione predefinita in Firefox e Safari. Le implementazioni WebGPU sviluppate per Firefox e Chrome sono disponibili sotto forma di librerie separate: Dawn (C++) e wgpu (Rust), che puoi utilizzare per integrare il supporto WebGPU nelle tue applicazioni. È inoltre in corso il lavoro per aggiungere il supporto WebGPU alle librerie JavaScript più diffuse in modo nativo utilizzando WebGL. Ad esempio, il supporto completo per WebGPU è già stato annunciato in Babylon.js e il supporto parziale in Three.js, PlayCanvas e TensorFlow.js.

Concettualmente, WebGPU differisce da WebGL più o meno allo stesso modo in cui l'API grafica Vulkan differisce da OpenGL, ma WebGPU non si basa su un'API grafica specifica, ma è un livello generico che utilizza le stesse primitive di basso livello trovate in Vulkan, Metallo e Direct3D. WebGPU fornisce alle applicazioni JavaScript un controllo di basso livello sull'organizzazione, l'elaborazione e la trasmissione dei comandi alla GPU, la gestione delle risorse associate, la memoria, i buffer, gli oggetti texture e gli shader grafici compilati. Questo approccio consente di ottenere applicazioni grafiche con prestazioni più elevate riducendo l'overhead e aumentando l'efficienza della GPU.

WebGPU consente di creare progetti 3D complessi per il Web che funzionano così come programmi autonomi che utilizzano direttamente Vulkan, Metal o Direct3D, ma non sono legati a piattaforme specifiche. WebGPU fornisce anche opzioni aggiuntive per il porting di programmi grafici nativi in ​​un modulo abilitato per il Web mediante la compilazione in WebAssembly. Oltre alla grafica 3D, WebGPU copre anche le possibilità associate all'offload dei calcoli sul lato GPU e all'esecuzione di 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