Konsorciumi W3C paraqiti draftet e para të specifikimeve WebGPU dhe WebGPU Shading Language (WGSL), që përcaktojnë API për ekzekutimin e operacioneve në GPU, të tilla si renderimi dhe llogaritjet, si dhe një gjuhë shaders për të shkruar programe që funksionojnë në anën e GPU. Kjo është konceptualisht e ngjashme me API-të Vulkan, Metal dhe Direct3D 12. Specifikimet janë përgatitur nga një grup pune, i cili përfshin inxhinierë nga Mozilla, Google, Apple dhe Microsoft.
Koncespualisht, WebGPU ndryshon nga WebGL në një mënyrë të ngjashme me diferencën midis API-të grafike Vulkan dhe OpenGL, por nuk është e bazuar në një API të caktuar grafik, por përfaqëson një shtresë universale që përdor të njëjtat primitive të nivelit të ulët që gjenden në Vulkan, Metal dhe Direct3D. WebGPU i ofron aplikacioneve në JavaScript mjete për kontroll të nivelit të ulët mbi organizimin, përpunimin dhe dërgimin e komandeve në GPU, menaxhimin e burimeve të lidhura, kujtesën, buferët, objektet e teksturave dhe shaders të kompiluar grafik. Qasja e tillë lejon arritjen e performancës më të lartë të aplikacioneve grafike përmes uljes së kostove dhe rritjes së efektivitetit të punës me GPU.
WebGPU mundëson krijimin e projekteve komplekse 3D për Web, të cilat kanë performancë të ngjashme me programet autonome që komunikojnë drejtpërdrejt me Vulkan, Metal ose Direct3D, por nuk janë të lidhura me platforma të caktuara. WebGPU gjithashtu ofron mundësi shtesë në portimin e programeve grafike natyrore në formën që është e aftë të funksionojë mbi teknologjitë web, përmes kompilimit në WebAssembly. Përveç grafikës 3D, WebGPU mbulon gjithashtu mundësi të lidhura me shfrytëzimin e llogaritjeve në anën e GPU dhe ekzekutimin e shaders.
Karakteristikat kryesore të WebGPU:
- Menaxhimi i ndarë i burimeve, punëve përgatitore dhe transferimit të komandave në GPU (në WebGL një objekt iu përgjigj të gjitha në të njëjtën kohë). Ofron tre kontekste të veçanta: GPUDevice për krijimin e burimeve, si teksturat dhe tamponët; GPUCommandEncoder për kodimin e komandave të veçanta, duke përfshirë fazat e renderimit dhe llogaritjes; GPUCommandBuffer për t'u dërguar për ekzekutim në GPU. Rezultati mund të vizatohet në një zonë të lidhur me një ose më shumë elemente canvas, ose të përpunuar pa dalë (për shembull, gjatë kryerjes së detyrave llogaritëse). Ndarja e fazave lehtëson ndarjen e krijimit të burimeve dhe operacioneve përgatitore në menaxherë të ndryshëm, të cilët mund të ekzekutohen në Threads të ndryshme.
- NjĂ« qasje tjetĂ«r pĂ«r procesimin e gjendjeve. NĂ« WebGPU ofrohen dy objekte â GPURenderPipeline dhe GPUComputePipeline, qĂ« mundĂ«sojnĂ« kombinimin e gjendjeve tĂ« ndryshme, tĂ« paracaktuara nga zhvilluesi, duke i dhĂ«nĂ« mundĂ«sinĂ« shfletuesit qĂ« tĂ« mos shpenzojĂ« burime nĂ« kryerjen e punĂ«ve shtesĂ«, tĂ« tilla si rikompilimi i shaderĂ«ve. NdĂ«r gjendjet e mbĂ«shtetura: shaderĂ«t, pĂ«rshkrimet e tamponĂ«ve tĂ« verge dhe atributeve, pĂ«rshkrimet e grupeve tĂ« lidhura, pĂ«rzierja, thellĂ«sia dhe masat, format e daljes pas renderimit.
- Modeli i lidhjeve, i ngjashëm me mjetet e grupimit të burimeve të pranishme në Vulkan. Për të bashkuar burimet në grupe, WebGPU ofron objektin GPUBindGroup, i cili gjatë regjistrimit të komandave mund të lidhet me objekte të tjera të ngjashme për t'u përdorur në shaderë. Krijimi i grupeve të tilla i jep mundësinë drejtuesit që të kryejë paraprakisht veprimet përgatitore të nevojshme, dhe shfletuesit i lejon të ndryshojë ndërlidhjet e burimeve shumë më shpejt midis thirrjeve të renderimit. Shpërndarja e ndërlidhjeve të burimeve mund të përcaktohet paraprakisht duke përdorur objektin GPUBindGroupLayout.
Burimi: opennet.ru
