Le build notturne di Firefox ora includono il supporto WebGPU

В notte Compilazione di Firefox apparso supporto alle specifiche Web GPU, che fornisce un'interfaccia di programmazione per l'elaborazione grafica 3D e l'elaborazione lato GPU, concettualmente simile all'API Vulcano, Metallo и Diretto3D 12. La specifica è stata sviluppata da Mozilla, Google, Apple, Microsoft e dai membri della community di gruppo di lavoro, creato dall'organizzazione W3C.

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 può essere creato nel WebGPU Shading Language o specificato nel formato intermedio SPIR-V, e poi tradotto nei linguaggi shader supportati dai driver attuali.

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.

Le build notturne di Firefox ora includono il supporto WebGPU

In Firefox, l'impostazione "dom.webgpu.enabled" è fornita in about:config per abilitare WebGPU. Il rendering CanvasContext richiede anche l'abilitazione della composizione WebRender (“gfx.webrender.all” in about:config), scritto in Rust e affidando in outsourcing le operazioni di rendering del contenuto della pagina alla GPU. L'implementazione WebGPU si basa sul codice del progetto
wgpu, scritto in Rust e in grado di funzionare sulle API DX12, Vulkan e Metal su Linux, Android, Windows e macOS (anche il supporto DX11 e OpenGL ES 3.0 è in fase di sviluppo). Parallelamente, Google sta sviluppando un'altra implementazione, disponibile in Ramo delle Canarie Chromium ed è abilitato utilizzando il flag "chrome://flags/#enable-unsafe-webgpu", ma finora funziona solo su macOS e Windows.

Fonte: opennet.ru

Aggiungi un commento