В Firefox ngawangun rojongan spésifikasi , nu nyadiakeun antarbeungeut program pikeun ngolah grafik 3D jeung komputasi GPU-sisi, konseptual sarupa jeung API. , и . Spésifikasina dikembangkeun ku Mozilla, Google, Apple, Microsoft sareng anggota komunitas di , dijieun ku organisasi W3C.
Tujuan utama WebGPU nyaéta pikeun nyiptakeun antarmuka parangkat lunak anu aman, merenah, portabel, sareng berkinerja tinggi pikeun ngagunakeun téknologi grafis 3D sareng kamampuan anu disayogikeun ku API grafis sistem modéren, sapertos Direct3D 12 dina platform Wéb. Windows, Logam dina macOS sareng Vulkan di LinuxSacara konséptual, WebGPU béda ti WebGL sapertos Vulkan béda ti OpenGL. Ieu henteu dumasar kana API grafik khusus, tapi mangrupikeun lapisan universal anu umumna nganggo primitif tingkat handap anu sami anu aya dina Vulkan, Metal, sareng Direct3D.
WebGPU nyayogikeun aplikasi JavaScript kalayan kontrol tingkat handap kana organisasi, pamrosésan, sareng pangiriman paréntah ka GPU, ngatur sumber daya, mémori, panyangga, objék tékstur, sareng shaders grafik anu disusun. Pendekatan ieu ngamungkinkeun anjeun pikeun ngahontal prestasi anu langkung luhur pikeun aplikasi grafik ku cara ngirangan biaya overhead sareng ningkatkeun efisiensi gawé bareng GPU.
WebGPU ngamungkinkeun pikeun nyieun proyék 3D kompléks full-fledged pikeun Web nu gawéna teu leuwih goreng ti program mandiri nu langsung ngakses Vulkan, Metal atanapi Direct3D, tapi teu dihijikeun ka platform husus. WebGPU ogé nyadiakeun kamampuhan tambahan nalika porting program grafik asli kana formulir web-diaktipkeun ngaliwatan pamakéan téknologi WebAssembly. Salian grafik 3D, WebGPU ogé nyertakeun kamampuhan nu patali jeung offloading itungan ka GPU tur ngarojong ngembangkeun shader. Shaders dijieun dina WebGPU Shading Language atawa ditangtukeun dina format SPIR-V panengah, lajeng ditarjamahkeun kana basa shader dirojong ku supir ayeuna.
WebGPU nganggo manajemén sumberdaya anu misah, padamelan persiapan, sareng pangiriman paréntah ka GPU (dina WebGL, hiji obyék nanggung jawab sadayana sakaligus). Tilu konteks misah disadiakeun:
GPUDevice pikeun nyiptakeun sumber sapertos tékstur sareng panyangga; GPUCommandEncoder pikeun ngodekeun paréntah individu, kalebet tahapan rendering sareng komputasi; GPUCommandBuffer bakal antrian pikeun palaksanaan on GPU. Hasilna tiasa dipasihan di daérah anu aya hubunganana sareng hiji atanapi langkung elemen kanvas, atanapi diolah tanpa kaluaran (contona, nalika ngajalankeun tugas ngitung). Misahkeun tahapan ngagampangkeun pikeun misahkeun produksi sumber daya sareng operasi persiapan kana panangan anu béda anu tiasa dijalankeun dina benang anu béda.
Beda kadua antara WebGPU sareng WebGL nyaéta pendekatan anu béda pikeun nanganan nagara. WebGPU nawiskeun dua obyék - GPURenderPipeline sareng GPUComputePipeline, anu ngamungkinkeun anjeun ngagabungkeun sababaraha nagara anu tos ditetepkeun ku pamekar, anu ngamungkinkeun browser henteu miceunan sumber pikeun padamelan tambahan, sapertos nyusun ulang shaders. Kaayaan anu dirojong kalebet: shaders, buffer vertex sareng perenah atribut, perenah grup caket, blending, jero sareng pola, sareng format kaluaran post-render.
Fitur katilu WebGPU disebut model mengikat, lolobana
ngingetkeun alat pengelompokeun sumberdaya anu aya dina Vulkan.
Pikeun ngahijikeun sumberdaya, WebGPU nyayogikeun obyék GPUBindGroup, anu tiasa dikaitkeun sareng objék anu sami pikeun dianggo dina shaders nalika nyerat paréntah. Nyiptakeun grup sapertos kitu ngamungkinkeun supir ngalaksanakeun tindakan persiapan anu dipikabutuh sateuacanna, sareng ngamungkinkeun browser pikeun ngarobih beungkeutan sumber daya antara telepon tarik langkung gancang. Tata perenah beungkeutan sumberdaya tiasa didefinisikeun nganggo obyék GPUBindGroupLayout.

Dina Firefox, pikeun ngaktipkeun WebGPU ngeunaan: config, aya setelan "dom.webgpu.enabled". CanvasContext rendering ogé merlukeun compositing diaktipkeun ("gfx.webrender.all" dina ngeunaan: config), ditulis dina Rust na outsourcing eusi operasi rendering eusi ka GPU. palaksanaan WebGPU dumasar kana kode proyék
, ditulis dina Rust sareng tiasa dijalankeun di luhur API DX12, Vulkan sareng Metal dina Linux, Android, Windows и macOS (Dukungan pikeun DX11 sareng OpenGL ES 3.0 ogé nuju dikembangkeun.) Google ogé nuju ngembangkeun implementasi anu sanés, anu sayogi dina Chromium sareng diaktipkeun nganggo bandéra "chrome://flags/#enable-unsafe-webgpu", tapi éta ngan ukur tiasa dianggo dina macOS и Windows.
sumber: opennet.ru
