Dukungan WebGPU ditambahkan ke Firefox nightly builds

В malam Firefox dibangun muncul dukungan spesifikasi GPU Web, yang menyediakan antarmuka pemrograman untuk pemrosesan grafis 3D dan komputasi sisi GPU, yang secara konseptual mirip dengan API Vulkan, Logam и Langsung3D 12. Spesifikasinya sedang dikembangkan oleh Mozilla, Google, Apple, Microsoft dan anggota komunitas di kelompok kerjadibuat oleh W3C.

Tujuan utama WebGPU adalah menyediakan antarmuka pemrograman yang aman, mudah digunakan, portabel, dan berkinerja tinggi untuk platform Web guna memanfaatkan teknologi grafis 3D dan kemampuan yang disediakan oleh API grafis sistem modern, seperti Direct3D 12 pada Windows, Metal di macOS, dan Vulkan di Linux. Secara konseptual, WebGPU berbeda dari WebGL seperti halnya Vulkan berbeda dari OpenGL, dan pada saat yang sama, WebGPU tidak didasarkan pada API grafis tertentu, tetapi merupakan lapisan universal yang umumnya menggunakan primitif tingkat rendah yang sama seperti yang ditemukan di Vulkan, Logam dan Direct3D.

WebGPU memberi aplikasi JavaScript kontrol tingkat rendah atas organisasi, pemrosesan, dan transmisi perintah ke GPU, mengelola sumber daya terkait, memori, buffer, objek tekstur, dan shader grafis yang dikompilasi. Pendekatan ini memungkinkan Anda mencapai kinerja yang lebih tinggi untuk aplikasi grafis dengan mengurangi biaya overhead dan meningkatkan efisiensi kerja dengan GPU.

WebGPU memungkinkan pembuatan proyek 3D kompleks lengkap untuk Web yang bekerja tidak lebih buruk daripada program mandiri yang mengakses langsung Vulkan, Metal, atau Direct3D, tetapi tidak terikat pada platform tertentu. WebGPU juga memberikan kemampuan tambahan saat mem-porting program grafis asli ke dalam bentuk yang mendukung web melalui penggunaan teknologi WebAssembly. Selain grafis 3D, WebGPU juga mencakup kemampuan yang terkait dengan pembongkaran kalkulasi ke GPU dan mendukung pengembangan shader. shader bisa dibuat dalam WebGPU Shading Language atau ditentukan dalam format perantara SPIR-V, dan kemudian diterjemahkan ke dalam bahasa shader yang didukung oleh driver saat ini.

WebGPU menggunakan pengelolaan sumber daya terpisah, pekerjaan persiapan, dan transmisi perintah ke GPU (di WebGL, satu objek bertanggung jawab atas semuanya sekaligus). Tiga konteks terpisah disediakan:
GPUPerangkat 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.

Perbedaan kedua antara WebGPU dan WebGL adalah pendekatan penanganan status yang berbeda. 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.

Fitur ketiga WebGPU sebagian besar disebut model pengikatan
mengingatkan pada alat pengelompokan sumber daya yang ada di 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.

Dukungan WebGPU ditambahkan ke Firefox nightly builds

Di Firefox, untuk mengaktifkan WebGPU di about:config, ada pengaturan “dom.webgpu.enabled”. Rendering CanvasContext juga memerlukan pengaktifan pengomposisian WebRender (“gfx.webrender.all” di about:config), ditulis dalam Rust dan melakukan outsourcing operasi rendering konten halaman ke GPU. Implementasi WebGPU didasarkan pada kode proyek
wgpu, ditulis dalam Rust dan mampu berjalan di atas DX12, Vulkan, dan Metal API di Linux, Android, Windows, dan macOS (dukungan DX11 dan OpenGL ES 3.0 juga sedang dalam pengembangan). Secara paralel, Google sedang mengembangkan implementasi lain, yang tersedia di Cabang kenari Chromium dan diaktifkan menggunakan tanda “chrome://flags/#enable-unsafe-webgpu”, tetapi sejauh ini hanya berfungsi di macOS dan Windows.

Sumber: opennet.ru

Tambah komentar