В
L'obiettivo principale di WebGPU è fornire un'interfaccia di programmazione sicura, facile da usare, portatile e ad alte prestazioni per la piattaforma Web per sfruttare le tecnologie e le funzionalità grafiche 3D fornite dalle moderne API grafiche di sistema, come Direct3D 12 su Windows, Metal su macOS e Vulkan su Linux. Concettualmente, WebGPU differisce da WebGL più o meno allo stesso modo in cui Vulkan differisce da OpenGL, e allo stesso tempo non si basa su un'API grafica specifica, ma è un livello universale che generalmente utilizza le stesse primitive di basso livello trovate in Vulkan, Metallo e Direct3D.
WebGPU fornisce alle applicazioni JavaScript un controllo di livello inferiore 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 a tutti gli effetti 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 durante il porting di programmi grafici nativi in un formato abilitato per il Web tramite l'uso della tecnologia WebAssembly. Oltre alla grafica 3D, WebGPU copre anche funzionalità relative allo scarico dei calcoli sulla GPU e al supporto dello sviluppo di shader. Shader
WebGPU utilizza la gestione separata delle risorse, del lavoro preparatorio e della trasmissione dei comandi alla GPU (in WebGL un oggetto era responsabile di tutto in una volta). Sono 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 mettere in coda per l'esecuzione sulla GPU. Il risultato può essere sottoposto a rendering in un'area associata a uno o più elementi canvas o elaborato senza output (ad esempio, durante l'esecuzione di attività di calcolo). La separazione delle fasi semplifica la separazione delle operazioni di creazione e preparazione delle risorse in gestori diversi che possono essere eseguiti su thread diversi.
La seconda differenza tra WebGPU e WebGL è un approccio diverso alla gestione degli stati. WebGPU offre due oggetti: GPURenderPipeline e GPUComputePipeline, che consentono di combinare vari stati predefiniti dallo sviluppatore, consentendo al browser di non sprecare risorse in lavoro aggiuntivo, come la ricompilazione degli shader. Gli stati supportati includono: shader, buffer dei vertici e layout degli attributi, layout dei gruppi permanenti, fusione, profondità e modelli e formati di output post-rendering.
La terza caratteristica di WebGPU è chiamata modello vincolante, in gran parte
ricorda gli strumenti di raggruppamento delle risorse presenti in Vulkan.
Per raggruppare insieme le risorse, WebGPU fornisce un oggetto GPUBindGroup, che può essere associato ad altri oggetti simili da utilizzare negli shader durante la scrittura dei comandi. La creazione di tali gruppi consente al conducente di eseguire in anticipo le azioni preparatorie necessarie e consente al browser di modificare molto più rapidamente i collegamenti delle risorse tra le chiamate di estrazione. Il layout dei collegamenti delle risorse può essere predefinito utilizzando l'oggetto GPUBindGroupLayout.
In Firefox, l'impostazione "dom.webgpu.enabled" è fornita in about:config per abilitare WebGPU. Il rendering CanvasContext richiede anche l'abilitazione della composizione
Fonte: opennet.ru