Mozilla telah memutuskan untuk mengaktifkan dukungan untuk API WebGPU dan WGSL (WebGPU Shading Language) di Firefox. Untuk platform tersebut Windows Dukungan WebGPU akan diaktifkan secara default di Firefox 141, yang dijadwalkan rilis pada 22 Juli. Dukungan WebGPU kemudian direncanakan akan diaktifkan pada versi-versi selanjutnya untuk bulan-bulan berikutnya: Linux и macOS, dan setelah beberapa waktu dalam versi untuk platform tersebut AndroidUntuk mengaktifkan WebGPU secara manual, Anda dapat menggunakan parameter "dom.webgpu.enabled" dan "gfx.webrender.all" pada halaman about:config.
Di Chrome, dukungan WebGPU ditawarkan secara default pada versi 113, yang dirilis pada Mei 2023. Di Safari, dukungan WebGPU rencananya akan diaktifkan secara default pada musim gugur ini (dukungan eksperimental telah tersedia sejak November 2021). Di Firefox, dukungan WebGPU eksperimental telah tersedia sejak 2020, tetapi hanya diaktifkan secara default pada versi Firefox nightly. Implementasi WebGPU Firefox didasarkan pada kode proyek WGPU, yang ditulis dalam Rust dan mampu berjalan di atas API grafis Direct3D 12, Vulkan, OpenGL, dan Metal.
WebGPU menyediakan API yang serupa dengan Vulkan, Metal, dan Direct3D 12 untuk melakukan operasi di sisi GPU. Selain grafis 3D, WebGPU juga mencakup kemampuan terkait pemindahan kalkulasi ke sisi GPU dan eksekusi shader. Secara konseptual, WebGPU berbeda dari spesifikasi WebGL lama, sama seperti API grafis Vulkan berbeda dari OpenGL. Di saat yang sama, WebGPU tidak didasarkan pada API grafis tertentu, melainkan merupakan lapisan universal yang menggunakan primitif tingkat rendah yang sama dengan yang tersedia di Vulkan, Metal, dan Direct3D.
WebGPU memungkinkan aplikasi JavaScript untuk mengontrol pengaturan, pemrosesan, dan transmisi perintah ke GPU, serta mengelola sumber daya terkait, memori, buffer, objek tekstur, dan shader grafis yang dikompilasi. Pendekatan ini memungkinkan kinerja aplikasi grafis yang lebih tinggi dengan mengurangi overhead dan meningkatkan efisiensi kerja dengan GPU.
Dengan WebGPU, Anda dapat membuat proyek 3D kompleks yang tidak bergantung pada platform dan berkinerja sebaik program mandiri yang langsung menggunakan Vulkan, Metal, atau Direct3D. WebGPU juga menyediakan kemampuan tambahan untuk mem-porting program grafis asli ke format yang dapat dijalankan di peramban, berkat kompilasi ke WebAssembly.
Fitur utama WebGPU dan perbedaannya dengan WebGL:
- Manajemen sumber daya yang terpisah, pekerjaan persiapan, dan transmisi perintah ke GPU (di WebGL, satu objek bertanggung jawab atas semuanya sekaligus). Tiga konteks terpisah disediakan: GPUDevice untuk membuat sumber daya seperti tekstur dan buffer; GPUCommandEncoder untuk menyandikan perintah individual, termasuk tahap rendering dan komputasi; GPUCommandBuffer untuk dimasukkan ke dalam antrean untuk dieksekusi pada GPU. Hasilnya dapat dirender di area yang terkait dengan satu atau beberapa elemen kanvas, atau diproses tanpa output (misalnya, saat menjalankan tugas komputasi). Memisahkan tahapan memudahkan untuk memisahkan operasi pembuatan dan persiapan sumber daya ke dalam penangan berbeda yang dapat berjalan di thread berbeda.
- Pendekatan berbeda terhadap status pemrosesan. WebGPU menawarkan dua objek - GURenderPipeline dan GPUComputePipeline, yang memungkinkan Anda menggabungkan berbagai status yang telah ditentukan sebelumnya oleh pengembang, sehingga browser tidak menyia-nyiakan sumber daya untuk pekerjaan tambahan, seperti mengkompilasi ulang shader. Status yang didukung meliputi: shader, buffer vertex dan tata letak atribut, tata letak grup tempel, pencampuran, kedalaman dan pola, serta format keluaran pasca-render.
- Model yang mengikat seperti fitur pengelompokan sumber daya Vulkan. Untuk mengelompokkan sumber daya, WebGPU menyediakan objek GPUBindGroup, yang dapat dikaitkan dengan objek serupa lainnya untuk digunakan dalam shader saat menulis perintah. Membuat grup seperti itu memungkinkan pengemudi untuk melakukan tindakan persiapan yang diperlukan terlebih dahulu, dan memungkinkan browser mengubah pengikatan sumber daya di antara panggilan undian dengan lebih cepat. Tata letak pengikatan sumber daya dapat ditentukan sebelumnya menggunakan objek GPUBindGroupLayout.
Sumber: opennet.ru
