Kompania Google shpalli përfshirjen automatikisht të mbështetjes për API-në grafike WebGPU dhe gjuhën e shenjave WGSL (WebGPU Shading Language) në versionin Chrome 113, i cili pritet të lansohet më 2 maj. WebGPU ofron një ndërfaqe programimi të ngjashme me Vulkan, Metal dhe Direct3D 12 për kryerjen e operacioneve në anën e GPU, siç janë renderimi dhe llogaritjet, si dhe lejon përdorimin e gjuhës së shenjave për të shkruar programe që funksionojnë në anën e GPU. Zbatimi i WebGPU do të përfshihet fillimisht vetëm në ndërtimet për ChromeOS, macOS dhe Windows. Mbështetja për WebGPU për Linux dhe Android do të aktivizohet më vonë.
Përveç Chrome, mbështetjes eksperimentale të WebGPU po dëshmohet që nga prilli i vitit 2020 në Firefox dhe që nga nëntori i vitit 2021 në Safari. Për të aktivizuar WebGPU në Firefox, duhet të vendosen flags dom.webgpu.enabled dhe gfx.webgpu.force-enabled në about:config. Për planet për të ndarë WebGPU si opsion të paracaktuar në Firefox dhe Safari, ende nuk ka informacion. Implementimet e WebGPU që po zhvillohen për Firefox dhe Chrome janë të disponueshme në formën e bibliotekave të veçanta — Dawn (C++) dhe wgpu (Rust), të cilat mund të përdoren për të integruar mbështetje për WebGPU në aplikacionet tuaja. Po ashtu, po punohet për të shtuar mbështetje për WebGPU në bibliotekat e njohura JavaScript, që fillimisht përdorin WebGL. Për shembull, mbështetje e plotë për WebGPU është shpallur tashmë në Babylon.js, ndërsa mbështetje e pjesshme në Three.js, PlayCanvas dhe TensorFlow.js.
Konceptualisht, WebGPU ndryshon nga WebGL njëlloj siç ndryshon API grafike Vulkan nga OpenGL, por WebGPU nuk bazohet në një API grafik specifik; ai përfaqëson një ndërfaqe universale që përdor të njëjtat primitive të nivelit të ulët si Vulkan, Metal dhe Direct3D. WebGPU u ofron aplikacioneve në JavaScript mjete për kontrollin në nivel të ulët mbi organizimin, përpunimin dhe dërgimin e komandave në GPU, si dhe menaxhimin e burimeve të lidhura, memories, buffer-eve, objekteve të teksturave dhe shenjuesve grafikë të përpunuar. Ky qasje lejon arritjen e performancës më të lartë të aplikacioneve grafike përmes reduktimit të shpenzimeve dhe rritjes së efikasitetit të punës me GPU.
WebGPU ofron mundësinë për të krijuar projekte komplekse 3D për Web, që funksionojnë po aq mirë sa programet e ndara që përdorin drejtpërdrejt Vulkan, Metal ose Direct3D, por që nuk janë të lidhura me platforma të caktuara. WebGPU gjithashtu ofron mundësi të mëtejshme për portimin e programeve native grafike në një formë që mund të funksionojë mbi teknologjitë web, falë kompilimit në WebAssembly. Përveç grafikes 3D, WebGPU mbulon edhe mundësitë e lidhura me transferimin e llogaritjeve në anën e GPU dhe ekzekutimin e shenjave.
Karakteristikat kryesore të WebGPU:
- Menaxhimi i ndarë i burimeve, punëve përgatitore dhe transferimit të komandave në GPU (në WebGL, një objekt përgjigjej për gjithçka). 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 llogarisë; GPUCommandBuffer për radhitjen për ekzekutim në GPU. Rezultati mund të vizatohet në një zonë të lidhur me një ose më shumë elemente canvas, ose të përpunohen pa dalje (p.sh., kur kryhen detyra llogaritur). Ndarja e fazave lehtëson ndarjen e krijimit të burimeve dhe operacioneve përgatitore në trajtues të ndryshëm, të cilët mund të ekzekutohen në thesare të ndryshme.
- Një qasje e ndryshme për përpunimin e gjendjeve. Në WebGPU ofrohen dy objekte — GPURenderPipeline dhe GPUComputePipeline, të cilat lejojnë kombinimin e gjendjeve të ndryshme, të përcaktuara paraprakisht nga zhvilluesi, duke i dhënë mundësi shfletuesit të mos harxhojë burime në kryerjen e punëve të tjera, siç është ripompimi i shaderëve. Disa nga gjendjet e mbështetura përfshijnë: shaderat, vendosjet e bufferave të pikëve dhe atributet, vendosjet e grupeve të lidhura, përzierja, thellësia dhe modelet, format e daljes pas renderimit.
- Modeli i lidhjes, i ngjashëm në masë me mjetet e grupit të burimeve që gjenden në Vulkan. Për të bashkuar burimet në grupe, WebGPU ofron objektin GPUBindGroup, i cili gjatë shkrimit 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ësi drejtuesit të kryejë paraprakisht veprimet e nevojshme, ndërsa shfletuesit i lejon të ndryshojë lidhjet e burimeve shumë më shpejt midis thirrjeve të renderimit. Vendosja e lidhjeve të burimeve mund të përcaktohet paraprakisht me ndihmën e objektit GPUBindGroupLayout.
Burimi: opennet.ru
