Consorțiul W3C a prezentat primele versiuni preliminary ale specificațiilor WebGPU și WebGPU Shading Language (WGSL), care definesc API-ul pentru executarea operațiunilor pe GPU, cum ar fi redarea și calculele, precum și limbajul shaderelor pentru scrierea programelor care rulează pe GPU. Acesta este conceptual similar cu API-urile Vulkan, Metal și Direct3D 12. Specificațiile au fost redactate de un grup de lucru format din ingineri de la Mozilla, Google, Apple și Microsoft.
Concepțional, WebGPU se diferențiază de WebGL aproximativ la fel cum API-ul grafic Vulkan se diferențiază de OpenGL, dar nu se bazează pe un API grafic specific, ci reprezintă un strat universal care utilizează aceleași primitive de nivel inferior disponibile în Vulkan, Metal și Direct3D. WebGPU oferă aplicațiilor JavaScript instrumente pentru controlul de nivel inferior asupra organizării, procesării și transmiterii comenzilor către GPU, gestionarea resurselor asociate, memorie, buffer-e, obiecte de texturi și shadere grafice compilate. Această abordare permite obținerea unei performanțe mai ridicate pentru aplicațiile grafice prin reducerea costurilor indirecte și îmbunătățirea eficienței în interacțiunea cu GPU-ul.
WebGPU permite crearea de proiecte complexe 3D pentru web care funcționează la fel de bine ca programele autonome care interacționează direct cu Vulkan, Metal sau Direct3D, fără a fi legate de platforme specifice. WebGPU oferă, de asemenea, capacități suplimentare atunci când se portabilizează programele grafice native într-o formă capabilă să funcționeze pe baza tehnologiilor web, datorită compilării în WebAssembly. Pe lângă grafica 3D, WebGPU acoperă și capacitățile legate de externalizarea calculelor pe GPU și executarea shaderelor.
Trăsăturile cheie ale WebGPU:
- Control separat al resurselor, al proceselor pregătitoare și al transmiterii comenzii către GPU (în WebGL, un singur obiect se ocupa de toate simultan). Sunt furnizate trei contexte separate: GPUDevice pentru crearea resurselor, cum ar fi texturi și buffere; GPUCommandEncoder pentru codificarea comenzilor individuale, inclusiv etapele de randare și calcul; GPUCommandBuffer pentru a fi trimis în coadă pentru executare pe GPU. Rezultatul poate fi redat într-o zonă asociată cu unul sau mai multe elemente canvas, sau procesat fără redare (de exemplu, în cazul executării sarcinilor de calcul). Separarea etapelor simplifică delegarea creării resurselor și a operațiunilor pregătitoare în diferite manejere care pot fi executate pe fire diferite.
- O abordare diferită în gestionarea stărilor. În WebGPU sunt propuse două obiecte — GPURenderPipeline și GPUComputePipeline, care permit combinarea diferitelor stări, predefinite de dezvoltator, ceea ce permite browserului să nu își irosească resursele pe muncă suplimentară, cum ar fi recompilarea shaderelor. Printre stările acceptate se numără: shader-uri, structuri ale bufferelor de vârfuri și a atributelor, structuri ale grupurilor atașate, amestecare, adâncime și șabloane, formate de ieșire după randare.
- Modelul de legătură, în mare măsură similar cu metodele de grupare a resurselor prezente în Vulkan. Pentru a grupa resursele în grupuri, WebGPU oferă un obiect GPUBindGroup, care poate fi legat la alte obiecte similare în timpul înregistrării comenzilor pentru utilizarea în shadere. Crearea acestor grupuri permite driverului să efectueze în prealabil acțiunile pregătitoare necesare, iar browserului îi permite să schimbe semnificativ mai repede legăturile resurselor între apelurile de redare. Dispunerea legăturilor resurselor poate fi definită dinainte prin intermediul obiectului GPUBindGroupLayout.
Sursa: opennet.ro
