Mozilla a decis să activeze suportul pentru API-ul WebGPU și WGSL (WebGPU Shading Language) în Firefox. Pentru platforma Windows Compatibilitatea cu WebGPU va fi activată în mod implicit în Firefox 141, programată pentru 22 iulie. Se preconizează apoi ca suportul pentru WebGPU să fie activat în versiunile următoare pentru lunile următoare: Linux и macOSși, după un timp, în versiunea pentru platformă AndroidPentru a activa manual WebGPU, puteți utiliza parametrii „dom.webgpu.enabled” și „gfx.webrender.all” de pe pagina about:config.
În Chrome, suportul WebGPU a fost oferit în mod implicit în versiunea 113, lansată în mai 2023. În Safari, suportul WebGPU este planificat să fie activat în mod implicit în această toamnă (suportul experimental este disponibil din noiembrie 2021). În Firefox, suportul experimental WebGPU este prezent din 2020, dar a fost activat în mod implicit doar în versiunile nocturne ale Firefox. Implementarea WebGPU în Firefox se bazează pe codul proiectului WGPU, scris în Rust și capabil să ruleze pe API-urile grafice Direct3D 12, Vulkan, OpenGL și Metal.
WebGPU oferă o API similară cu Vulkan, Metal și Direct3D 12 pentru efectuarea operațiunilor pe partea GPU. Pe lângă grafica 3D, WebGPU acoperă și capabilități legate de descărcarea calculelor pe partea GPU și executarea shaderelor. Conceptual, WebGPU diferă de vechea specificație WebGL în același mod în care API-ul grafic Vulkan diferă de OpenGL. În același timp, WebGPU nu se bazează pe o API grafică specifică, ci este un strat universal care utilizează aceleași primitive de nivel scăzut disponibile în Vulkan, Metal și Direct3D.
WebGPU permite aplicațiilor JavaScript să controleze organizarea, procesarea și transmiterea comenzilor către GPU și să gestioneze resursele asociate, memoria, bufferele, obiectele de textură și shaderele grafice compilate. Această abordare permite o performanță mai mare a aplicațiilor grafice prin reducerea suprasarcinii și creșterea eficienței lucrului cu GPU-ul.
Cu WebGPU, puteți crea proiecte 3D complexe, independente de platformă, care funcționează la fel de bine ca și programe independente care utilizează direct Vulkan, Metal sau Direct3D. WebGPU oferă, de asemenea, capabilități suplimentare pentru portarea programelor grafice native într-un formular care poate rula în browsere, datorită compilării în WebAssembly.
Caracteristici cheie ale WebGPU și diferențe față de WebGL:
- Gestionarea separată a resurselor, munca pregătitoare și transmiterea comenzilor către GPU (în WebGL un singur obiect era responsabil pentru totul deodată). Sunt furnizate trei contexte separate: GPUDevice pentru crearea de resurse precum texturi și buffere; GPUCommandEncoder pentru codificarea comenzilor individuale, inclusiv etapele de randare și de calcul; GPUCommandBuffer va fi pus în coadă pentru execuție pe GPU. Rezultatul poate fi redat într-o zonă asociată cu unul sau mai multe elemente de pânză sau procesat fără ieșire (de exemplu, când rulează sarcini de calcul). Separarea etapelor facilitează separarea operațiunilor de creare și pregătire a resurselor în diferiți handlere care pot rula pe fire diferite.
- O abordare diferită a stărilor de procesare. WebGPU oferă două obiecte - GPURenderPipeline și GPUComputePipeline, care vă permit să combinați diferite stări predefinite de dezvoltator, ceea ce permite browserului să nu irosească resurse pentru lucrări suplimentare, cum ar fi recompilarea shaderelor. Stările acceptate includ: shaders, vertex buffer și machete de atribute, sticky group layouts, amestecare, adâncime și modele și formate de ieșire post-randare.
- Un model obligatoriu asemănător caracteristicilor de grupare a resurselor Vulkan. Pentru a grupa resursele împreună, WebGPU oferă un obiect GPUBindGroup, care poate fi asociat cu alte obiecte similare pentru utilizare în shadere în timpul scrierii comenzilor. Crearea unor astfel de grupuri permite șoferului să efectueze în avans acțiunile pregătitoare necesare și permite browserului să modifice mult mai rapid legăturile de resurse între apelurile de extragere. Aspectul legăturilor de resurse poate fi predefinit folosind obiectul GPUBindGroupLayout.
Sursa: opennet.ru
