- WebGPU resmi didukung di Firefox 141 versi Windows setelah pengembangan yang panjang
- WebGPU adalah antarmuka GPU berbasis web untuk pemrosesan grafis modern dan komputasi berkinerja tinggi, dan diharapkan akan meningkatkan level game, visualisasi, dan komputasi lokal secara signifikan
- Implementasi WebGPU di Firefox dibangun di atas library WGPU berbasis Rust, dengan dukungan berbagai backend seperti Direct3D 12, Metal, dan Vulkan
- Untuk saat ini hanya diaktifkan secara resmi di Windows, sementara dukungan untuk Mac, Linux, dan Android direncanakan menyusul
- Masih ada tugas pengembangan lanjutan seperti peningkatan performa dan kepatuhan terhadap standar
Arti dukungan WebGPU di Windows
- WebGPU yang telah dikembangkan dalam waktu lama kini resmi hadir di Firefox 141 untuk lingkungan Windows
- WebGPU adalah standar modern yang memungkinkan konten web terhubung langsung dengan GPU pengguna untuk mewujudkan grafis berkinerja tinggi dan komputasi paralel
- Dengan teknologi ini, batas performa di berbagai bidang seperti game berbasis web, visualisasi data, dan machine learning diperkirakan akan meluas secara signifikan
- Pembelajaran dan praktik terkait dapat dilakukan melalui tutorial WebGPU, contoh WebGPU, dan dokumentasi MDN
- WebGPU didefinisikan oleh standar WebGPU W3C dan standar WGSL, dan Mozilla telah aktif berpartisipasi dalam proses standardisasi sejak 2017
Status WebGPU di tiap browser
- Di Chrome, dukungan WebGPU sudah tersedia sejak 2023
- Di Safari 26, rilisnya dijadwalkan pada musim gugur tahun ini
- Firefox 141 saat ini hanya mendukung Windows secara resmi, sementara Mac/Linux/Android akan diperluas melalui pembaruan mendatang
- Pada versi Firefox Nightly, selama ini WebGPU dapat digunakan secara eksperimental di semua platform kecuali Android
Implementasi WebGPU di Firefox
- WebGPU di Firefox dikembangkan berdasarkan library open source Rust WGPU
- WGPU terhubung ke API grafis tingkat rendah seperti Direct3D 12, Metal, dan Vulkan agar sesuai dengan perangkat keras di berbagai platform
- Mozilla adalah salah satu kontributor utama proyek WGPU
- Jika Anda adalah pengembang Rust, memulai dari proyek WGPU adalah pendekatan yang tepat untuk berkontribusi pada WebGPU di Firefox
- WGPU juga digunakan luas di luar Firefox dan memiliki komunitas yang aktif
Tantangan utama dan pekerjaan perbaikan
- WebGPU adalah API yang besar dan kompleks, dan hingga kini stabilisasi difokuskan pada demo utama dan kasus penggunaan nyata
- Area yang masih perlu ditingkatkan:
- Menyelesaikan masalah penurunan performa akibat IPC tanpa buffering dengan proses sandbox GPU (bug 1968122, peningkatan performa direncanakan di Firefox 142)
- Latensi yang meningkat karena waktu selesainya pekerjaan GPU hanya dideteksi dengan timer interval (bug 1870699, sedang diperbaiki dengan pendekatan yang lebih baik)
- Karena importExternalTexture belum didukung, data video belum bisa dibaca langsung dari decoder ke GPU (bug 1827116, sedang dalam pengembangan)
- Jika masalah muncul dalam penggunaan nyata, detailnya perlu dilaporkan melalui komponen WebGPU di Bugzilla
Rencana ke depan
- Setelah Windows, dukungan resmi akan diperluas ke Mac, Linux, lalu Android
- Ada rencana peningkatan berkelanjutan untuk performa, kompatibilitas, dan kepatuhan standar
- Dukungan resmi WebGPU diharapkan membuka kemungkinan baru bagi aplikasi web
1 komentar
Komentar Hacker News
Ini kabar yang sangat ditunggu-tunggu, selamat untuk tim Firefox
Perusahaan saya sedang mengembangkan cara agar Unreal bisa berjalan di browser, dan kami telah membangun WebGPU RHI kustom yang disesuaikan untuk Unreal Engine 5
Bagi yang ingin melihat demo teknologinya langsung, silakan lihat tautan di bawah
(Hanya berfungsi di browser berbasis Chromium pada desktop dan beberapa ponsel Android)
Cropout: https://play-dev.simplystream.com/?token=aa91857c-ab14-4c24-963a-36203784474b
Car configurator: https://garage.cjponyparts.com/
Saya sudah mencobanya di Firefox 142 (nightly)
Cropout lama tertahan di 0% sambil menghasilkan lebih dari 1200 permintaan jaringan
Pada akhirnya menu memang termuat, tetapi latarnya hitam dan hanya elemen UI yang terlihat
Banyak error muncul saat parsing shader, dan ada juga error lain
Car configurator menghasilkan beberapa error, berhenti di 0%, dan tidak memuat
Muncul pesan bahwa "file game hilang sehingga sulit menginisialisasi shader global dan konten"
Saya harap ini dibagikan setelah setidaknya diuji secara minimal di Firefox juga
Memang disebutkan "hanya berfungsi di browser berbasis Chromium", tetapi karena postingan ini membahas WebGPU di Firefox,
saya penasaran apakah ada rencana untuk menguji atau merilis versi yang kompatibel dengan Firefox
Saya mencoba menjalankan "cropout" di Android Chrome pada Pixel 7a dan macet di 0%
"car configurator" berjalan sampai 97~98%, tetapi setelah itu tidak lanjut lagi
Saya penasaran apakah ini berjalan di Windows dengan Firefox 141
Jika tidak, saya ingin tahu alasannya
Di Google Chrome untuk macOS, tautan pertama berhenti di 0% dan tidak bergerak
Demo kedua berhenti di 98% atau 97%
Hal yang sama juga terjadi di Safari
Melihat situasi API grafis saat ini, rasanya malah seperti kemunduran dibanding era OpenGL
Menurut saya API modern tidak benar-benar memberikan kemudahan penggunaan maupun portabilitas dan lintas platform dalam arti yang sesungguhnya
Membuat wrapper kustom untuk berbagai backend grafis seperti Vulkan, Metal, dan DirectX12 terasa nyaris seperti pemborosan waktu
Rasanya mirip kembali memakai array
charalih-alih string demi performaSaya tidak tahu janji apa yang pernah dibuat, atau siapa yang membuat janji itu
Tujuan API grafis sejak awal adalah memasukkan kode dan data ke GPU secepat mungkin, bukan mengutamakan pengalaman pengembang
Saya merasa WebGPU membungkus compute dan render di browser dengan cukup baik
Memang belum sempurna, tetapi menurut saya lebih intuitif dan lebih mudah dieksplorasi dibanding WebGL atau OpenGL
Saya kurang melihat masalahnya
Stack grafis sudah lama memiliki API level rendah (contohnya Gallium di Mesa), dan sekarang itu distandardisasi lalu pengguna bisa memilihnya sendiri
API level tinggi juga masih ada, dan OpenGL tetap didukung di platform yang masuk akal
WebGPU juga cukup bisa dipakai di kode native
Kurangnya portabilitas sejati pada API level rendah seperti ini hampir sepenuhnya kesalahan Apple dan para pembuat konsol
Meski begitu, dari pembuat konsol memang sejak awal tidak banyak yang mengharapkan kerja sama
Pelajaran dari era OpenGL adalah bahwa memakai API level tinggi yang sama di semua platform tidak otomatis menghasilkan hasil yang baik
Pada akhirnya yang penting adalah apakah ada API yang mampu mengendalikan hardware platform tersebut dengan baik
Wrapper yang menerjemahkan OpenGL selalu dibutuhkan, dan dulu tidak ada cara untuk menghindari wrapper ini
Pendekatan untuk menghasilkan hasil terbaik bagi tiap jenis hardware kurang praktis
Yang benar-benar penting adalah apakah tersedia lapisan translasi yang mudah
Jika memang ingin akses sangat dalam ke hardware, justru dibutuhkan API yang bisa mendekati hardware secara langsung, bukan antarmuka yang terlalu sederhana atau terlalu umum
OpenGL menjadi terlalu kompleks setelah 2.0, dan WebGPU membungkus fitur-fitur Vk, D3D12, dan Metal dengan cukup nyaman
Menurut saya desainnya jauh lebih baik daripada OpenGL
Secara terpisah, D3D11 dan Metalv1 mungkin adalah titik keseimbangan terbaik antara kegunaan dan performa (terutama performa D3D11 yang bahkan sulit dikejar oleh Vulkan dan D3D12)
Saya juga setuju
Saya tetap akan mengembangkan dengan interop OpenGL dan CUDA
Vulkan terlalu penuh kompleksitas hasil overengineering tanpa manfaat praktis yang nyata, jadi akhirnya saya malah memilih CUDA
Saya masih berharap WebGPU berhasil meluas ke luar lingkungan browser
dan menjadi API lintas platform yang mudah digunakan dan diatur lewat spesifikasi resmi (yakni pengganti OpenGL)
Tetapi selain di ekosistem Rust, saya merasa arus penggunaan WebGPU di kode native tidak terlalu besar
Misalnya, saya belum pernah mendengar proyek besar yang memakai Dawn
Mungkin juga karena WebGPU hadir terlalu terlambat, sehingga kebanyakan pihak sudah lebih dulu membangun lapisan abstraksi sendiri di atas dx, vulkan, dan metal
Pada akhirnya saya rasa ini tidak akan menyebar luas
Memang ada sedikit kesederhanaan, tetapi banyak fiturnya juga kurang
Beberapa fitur yang opsional di Vulkan (misalnya render pass) masih wajib di WebGPU
Bind group bersifat statis sehingga justru merepotkan
Selain itu WebGPU punya banyak batasan dan elemen yang tidak perlu
Misalnya, host tidak bisa langsung menulis ke subregion buffer dan harus memakai buffer perantara (staging buffer)
Karena tidak ada alternatif, saya akan memakainya di web, tetapi di desktop saya akan tetap memakai framework interop OpenGL+CUDA
Saya berharap ada API grafis modern yang lebih masuk akal
Jika pekerjaan yang mestinya cukup dengan
cuMemAlloc,cuMemcpymalah menjadi rumit karena alokasi dan binding buffer yang kompleks, pipeline, explicit sync, bind group, descriptor set, dan elemen-elemen tak perlu lainnya, saya tidak ingin memakainyaWebGPU tidak memberi optimasi dan kontrol serinci Vulkan, dan performanya juga cenderung tidak setara Vulkan
Berbagai extension yang ada di Vulkan juga masih belum didukung di WebGPU
Middleware yang dibutuhkan sebenarnya sudah ada
Di luar browser, menurut saya tidak perlu menunggu WebGPU
Soalnya ada keterbatasan yang berasal dari desain API yang sejak awal berfokus pada sandbox browser
Menurut saya namanya sendiri juga masalah besar
Saya pengembang native murni, jadi selama bertahun-tahun saya menganggap nama "web gpu" itu benar-benar teknologi khusus web dan tidak memperhatikannya, padahal setelah saya pelajari ternyata itu salah paham
Saya sangat senang crate gpu-allocator kami https://github.com/Traverse-Research/gpu-allocator/ tampaknya akan dikenal jauh lebih luas
Selama ini dipakai di backend dx12 milik wgpu dan produk benchmark GPU kami sendiri, evolve https://www.evolvebenchmark.com/
Ke depannya saya berharap bisa dipakai lebih luas lagi
Baru sekarang saya sadar bahwa WebGPU sebenarnya sudah bisa dipakai di Firefox Nightly untuk macOS
Saya mengunduh nightly untuk Mac dari https://www.mozilla.org/en-US/firefox/channel/desktop/
lalu menjalankan demo https://huggingface.co/spaces/reach-vb/github-issue-generator-webgpu, dan itu berjalan dengan baik
Demo ini memakai model SmolLM2 yang dikompilasi ke WebAssembly untuk ekstraksi data terstruktur
Sebelumnya saya kira ini hanya berjalan di Chrome, tetapi di Firefox resmi (Stable) muncul error bahwa "WebGPU tidak didukung"
Dukungan macOS akan segera dirilis secara resmi
Selain Windows, kami juga berencana segera mendukung WebGPU di Mac, Linux, dan terakhir Android
Senang mendengar bahwa ada rencana "mendukung WebGPU di Mac, Linux, dan terakhir Android"
Tetapi untuk saat ini saya masih sulit terlalu berharap
Saya rasa alasan dukungan WebGPU selama ini sulit hadir di browser Linux kemungkinan karena terlalu sulit membuka attack surface baru
Kompleksitas seperti inilah yang menunjukkan betapa besarnya standar web yang membuat pengembangan browser menjadi sulit
Pengaruh keputusan desain sejak era Netscape tampaknya masih tersisa hingga sekarang, dan menjadi akar dari kekhawatiran seperti monopolisasi browser dan masalah pendanaan
Di Android/Linux, WebOS/Linux, dan ChromeOS/Linux, WebGPU sudah didukung
Namun ini memang menunjukkan bahwa dukungan untuk workload seperti ini di GNU/Linux tidak terlalu diprioritaskan oleh vendor browser
Saya juga menantikan implementasi untuk Linux
Saya penasaran demo apa saja yang layak dicoba saat WebGPU hadir nanti
Salah satu demo yang paling mengesankan menurut saya adalah
https://github.com/ArthurBrussee/brush
pelatihan dan rendering Gaussian splatting berbasis WebGPU
Saya juga ingin memperkenalkan demo berbasis Unity
Sebagian besar situs demo berbentuk demo web
Secara pribadi saya suka Compute Toys https://compute.toys/
Di sana kita bisa bereksperimen dengan compute shader WebGPU ala Shadertoy
Untuk demo yang lebih beragam ada https://github.com/mikbry/awesome-webgpu
Ada juga proyek eksperimen langsung https://github.com/s-macke/WebGPU-Lab
Contoh-contoh dari engine Bevy juga tersedia baik untuk WebGL maupun WebGPU
Ini berguna untuk pembelajaran perbandingan
Tautan referensi: https://bevy.org/examples-webgpu/, https://bevy.org/examples
Demo yang menurut saya cukup mengesankan adalah https://huggingface.co/spaces/webml-community/kokoro-webgpu
Ini juga bisa berjalan tanpa WebGPU, tetapi sangat lambat
Sepertinya Firefox akan mendukung WebGPU di Linux lebih dulu daripada Chrome
dawn (implementasi webgpu dari Google) sebenarnya berjalan cukup baik di Linux, tetapi Firefox justru tampak akan lebih dulu mendukungnya
Akhirnya dukungan WebGPU mulai hadir, tepuk tangan untuk semuanya
Saya agak merasa kurang nyaman bereksperimen dengan WebGPU yang hanya ada di Chrome
Safari juga baru-baru ini mulai mendukungnya di versi preview
Saya sudah hampir 2 tahun memakai wgpu di proyek utama saya
Dengan meluasnya WebGPU kali ini, saya berharap jumlah maintainer bertambah
sehingga issue yang saya buka 18 bulan lalu bisa diselesaikan lebih cepat
Saya memang belum menyentuh Rust, tetapi semoga suatu hari saya punya motivasi dan waktu untuk ikut berkontribusi langsung
Saya bergantung pada binding wgpu-native, dan pembaruannya datang dengan lambat
Misalnya, minggu lalu akhirnya baru masuk ke v25, padahal beberapa hari lalu v26 sudah rilis