ΠΠΎΠ½ΡΠΎΡΡΠΈΡΠΌ W3C ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ» ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΠ΅ΡΠ½ΠΎΠ²ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΉ WebGPU ΠΈ WebGPU Shading Language (WGSL), ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΡ API Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π½Π° GPU, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³ ΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ·ΡΠΊ ΡΠ΅ΠΉΠ΄ΡΠΎΠ² Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ GPU. ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½ΠΎ ΡΡ ΠΎΠΆΠΈΠΉ Ρ API Vulkan, Metal ΠΈ Direct3D 12. Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Ρ ΡΠ°Π±ΠΎΡΠ΅ΠΉ Π³ΡΡΠΏΠΏΠΎΠΉ, Π² ΠΊΠΎΡΠΎΡΡΡ Π²ΠΎΡΠ»ΠΈ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΡ ΠΈΠ· Mozilla, Google, Apple ΠΈ Microsoft.
ΠΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½ΠΎ WebGPU ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ WebGL ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ API Vulkan ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ OpenGL, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ API, Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΎΡΠ»ΠΎΠΉΠΊΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ΅ ΠΆΠ΅ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ, ΡΡΠΎ ΠΈΠΌΠ΅ΡΡΡΡ Π² Vulkan, Metal ΠΈ Direct3D. WebGPU ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ Π½Π° JavaScript ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π·Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΊ GPU, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΌΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ, ΠΏΠ°ΠΌΡΡΡΡ, Π±ΡΡΠ΅ΡΠ°ΠΌΠΈ, ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΡΠ΅ΠΊΡΡΡΡ ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΠ΅ΠΉΠ΄Π΅ΡΠ°ΠΌΠΈ. ΠΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΠΎΠ±ΠΈΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π·Π° ΡΡΡΡ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΡ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΡ ΡΠ°ΡΡ ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΡΠ°Π±ΠΎΡΡ Ρ GPU.
WebGPU Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΄Π»Ρ Web ΡΠ»ΠΎΠΆΠ½ΡΠ΅ 3D-ΠΏΡΠΎΠ΅ΠΊΡΡ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠ΅ Π½Π΅ Ρ ΡΠΆΠ΅, ΡΠ΅ΠΌ ΠΎΠ±ΠΎΡΠΎΠ±Π»Π΅Π½Π½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½Π°ΠΏΡΡΠΌΡΡ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΠΈΠ΅ΡΡ Ρ Vulkan, Metal ΠΈΠ»ΠΈ Direct3D, Π½ΠΎ Π½Π΅ ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΠΌ. WebGPU ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΈ ΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π½Π°ΡΠΈΠ²Π½ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π² ΡΠΎΡΠΌΡ, ΡΠΏΠΎΡΠΎΠ±Π½ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° Π±Π°Π·Π΅ web-ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π² WebAssembly. ΠΡΠΎΠΌΠ΅ 3D-Π³ΡΠ°ΡΠΈΠΊΠΈ WebGPU ΠΎΡ Π²Π°ΡΡΠ²Π°Π΅Ρ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π²ΡΠ½ΠΎΡΠΎΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Π½Π° ΡΡΠΎΡΠΎΠ½Ρ GPU ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ².
Fitur utama WebGPU:
- ManajemΓ©n misah sumberdaya, karya preparatory sarta pangiriman parΓ©ntah ka GPU (dina WebGL hiji obyΓ©k Γ©ta jawab sagalana sakaligus). Tilu konteks misah disadiakeun: GPUDevice pikeun nyieun sumberdaya kayaning tΓ©kstur jeung buffers; GPUCommandEncoder pikeun ngodekeun parΓ©ntah individu, kalebet tahapan rendering sareng komputasi; GPUCommandBuffer bakal antrian pikeun palaksanaan on GPU. Hasilna tiasa ditingalikeun 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.
- Pendekatan anu bΓ©da pikeun ngolah nagara. WebGPU nawiskeun dua obyΓ©k - GPURenderPipeline sareng GPUComputePipeline, anu ngamungkinkeun anjeun ngagabungkeun rupa-rupa 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.
- Model anu ngariung sapertos fitur pengelompokan sumber daya 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.
sumber: opennet.ru