- WebGPU, uzun süren geliştirmenin ardından Firefox 141 Windows sürümünde resmen destekleniyor
- WebGPU, modern grafik işleme ve yüksek performanslı hesaplama için web tabanlı bir GPU arayüzü; oyun, görselleştirme ve yerel hesaplama düzeyini önemli ölçüde yükseltmesi bekleniyor
- Firefox içindeki WebGPU uygulaması, Rust tabanlı WGPU kütüphanesi üzerine kuruldu ve Direct3D 12, Metal, Vulkan gibi çeşitli backend'leri destekliyor
- Şu anda yalnızca Windows üzerinde resmen etkinleştiriliyor; Mac, Linux ve Android desteği de ileride gelecek
- Performans iyileştirmeleri ve standartlara uyum gibi alanlarda hâlâ ek geliştirme çalışmaları gerekiyor
Windows'ta WebGPU desteğinin anlamı
- Uzun süredir geliştirilen WebGPU, Firefox 141 ile Windows ortamında resmen sunuldu
- WebGPU, web içeriğinin kullanıcının GPU'su ile doğrudan entegre olarak yüksek performanslı grafik ve paralel hesaplama gerçekleştirmesini sağlayan modern bir standart
- Bu teknoloji sayesinde web tabanlı oyunlar, veri görselleştirme, makine öğrenimi gibi alanlarda performans sınırlarının önemli ölçüde genişlemesi bekleniyor
- WebGPU tutorial, WebGPU samples ve MDN belgeleri üzerinden konuyla ilgili öğrenme ve pratik yapma imkânı var
- WebGPU, WebGPU W3C standardı ve WGSL standardı ile tanımlanıyor; Mozilla da 2017'den bu yana standardizasyon sürecine aktif olarak katılıyor
Tarayıcılara göre WebGPU durumu
- Chrome, WebGPU desteğini zaten 2023'ten beri sunuyor
- Safari 26 için çıkış bu sonbaharda planlanıyor
- Firefox 141, şu anda yalnızca Windows için resmî destek veriyor; Mac/Linux/Android desteği ise gelecekteki güncellemelerle genişletilecek
- Firefox Nightly sürümünde ise bugüne kadar Android hariç tüm platformlarda deneysel olarak kullanılabiliyordu
Firefox'un WebGPU uygulaması
- Firefox'un WebGPU'su, açık kaynaklı Rust kütüphanesi WGPU temel alınarak geliştirildi
- WGPU, farklı platformlardaki donanımlara göre Direct3D 12, Metal, Vulkan gibi düşük seviyeli grafik API'lerine bağlanıyor
- Mozilla, WGPU projesinin başlıca katkı sağlayıcılarından biri
- Rust geliştiricileri için, Firefox WebGPU'ya katkı vermek isteyenlerin başlangıç noktası olarak WGPU projesi uygun görülüyor
- WGPU, Firefox dışında da yaygın biçimde kullanılıyor ve aktif bir topluluğa sahip
Başlıca zorluklar ve iyileştirme çalışmaları
- WebGPU, büyük ve karmaşık bir API; şimdiye kadar istikrar çalışmaları daha çok başlıca demolar ve gerçek kullanım senaryoları etrafında yürütüldü
- Ek iyileştirme gerektiren alanlar:
- GPU sandbox süreci ile buffer'sız IPC nedeniyle ortaya çıkan performans düşüşünün giderilmesi (hata 1968122, Firefox 142'de performans iyileştirmesi planlanıyor)
- GPU işlerinin tamamlanma zamanının yalnızca interval timer ile algılanması nedeniyle bekleme süresinin artması (hata 1870699, daha iyi bir yöntemle iyileştiriliyor)
- importExternalTexture desteğinin olmaması nedeniyle video verisinin decoder'dan GPU'ya doğrudan okunamaması (hata 1827116, geliştirme sürüyor)
- Gerçek kullanımda bir sorun yaşanırsa, ayrıntılı bilgiler eklenerek Bugzilla'nın WebGPU bileşenine bildirim yapılması isteniyor
Sonraki planlar
- Windows sonrasında Mac, Linux ve Android için resmî desteğin kademeli olarak genişletilmesi planlanıyor
- Performans, uyumluluk ve standartlara uyum alanlarında sürekli iyileştirme hedefleniyor
- WebGPU'nun resmî desteğiyle birlikte web uygulamaları için yeni olasılıkların önünün açılması bekleniyor
1 yorum
Hacker News görüşleri
Gerçekten heyecan verici bir haber, Firefox ekibini tebrik ederim
Şirketim, Unreal'ı tarayıcıda çalıştırabilmek için geliştirme yapıyor ve Unreal Engine 5 için özel bir WebGPU RHI oluşturduk
Teknik demoyu bizzat görmek isteyenler aşağıdaki bağlantılara bakabilir
(yalnızca masaüstünde Chromium tabanlı tarayıcılarda ve bazı Android telefonlarda çalışır)
Cropout: https://play-dev.simplystream.com/?token=aa91857c-ab14-4c24-963a-36203784474b
Car configurator: https://garage.cjponyparts.com/
Firefox 142 (nightly) üzerinde test ettim
Cropout uzun süre %0'da kaldı ve 1200'den fazla ağ isteği yaptı
Sonunda menüye kadar yükleniyor ama arka plan siyah ve sadece UI öğeleri görünüyor
Shader ayrıştırma sırasında çok sayıda hata çıktı, ayrıca başka hatalar da vardı
Car configurator ise çeşitli hatalar verip %0'da takılıyor ve yüklenmiyor
"Oyun dosyaları eksik olduğu için global shader ve içerik başlatılamıyor" mesajı görünüyor
Keşke Firefox'ta da en azından temel bir test yaptıktan sonra paylaşsaydınız
"Yalnızca Chromium tabanlı tarayıcılarda çalışıyor" denmiş ama bu gönderi doğrudan Firefox'un WebGPU'su hakkında olduğu için
Acaba Firefox uyumlu bir sürümü test etme ya da yayımlama planınız var mı?
Pixel 7a'da Android Chrome ile "cropout"u çalıştırmayı denedim, %0'da kaldı
"car configurator" ise %97~98'e kadar ilerliyor ama sonrasında hiç devam etmiyor
Firefox 141 kullanan Windows'ta çalışıp çalışmadığını merak ediyorum
Çalışmıyorsa nedeni nedir, bilmek isterim
macOS için Google Chrome'da ilk bağlantı %0'da takılıp hiç ilerlemedi
İkinci demo ise %98 ya da %97'de kaldı
Safari'de de aynı durum vardı
Şu an grafik API'lerinin durumuna bakınca, sanki OpenGL döneminden bile daha geriye gidilmiş gibi geliyor
Modern API'lerin kullanım kolaylığı ya da gerçek anlamda taşınabilirlik ve çapraz platform desteği sunduğunu düşünmüyorum
Vulkan, Metal, DirectX12 gibi farklı grafik arka uçları için özel wrapper'lar yapmak neredeyse zaman kaybı gibi
Sanki performans uğruna string yerine tekrar char dizilerine dönmüşüz gibi
Nasıl bir söz verilmişti, bunu kim vermişti bilmiyorum
Grafik API'lerinin amacı her şeyden önce kodu ve veriyi GPU'ya olabildiğince hızlı aktarmaktır; geliştirici deneyimi birinci öncelik değildi
Bana göre WebGPU, tarayıcı içinde compute ve render işlemlerini oldukça iyi wrapper'lıyor
Henüz kusursuz değil ama WebGL ya da OpenGL'den daha sezgisel ve keşfedilebilir olduğunu düşünüyorum
Sorunun ne olduğunu pek göremiyorum
Grafik yığınında uzun zamandır düşük seviye API'ler vardı (örnek: Mesa'nın Gallium'u); şimdi bunlar standartlaştı ve kullanıcı bunları doğrudan seçiyor
Yüksek seviye API'ler hâlâ var ve OpenGL de makul platformlarda destekleniyor
WebGPU'yu native kodda da gayet kullanılabilir buldum
Bu düşük seviye API'lerdeki gerçek taşınabilirlik eksikliğinin neredeyse tamamı Apple ve konsol üreticilerinden kaynaklanıyor
Gerçi konsol üreticilerinin zaten iş birliği yapması beklenmiyordu
OpenGL döneminden alınacak ders, tüm platformların aynı yüksek seviye API'yi kullanmasının mutlaka iyi sonuç vereceği değildir
Sonuçta önemli olan, o platformun donanımını iyi kontrol eden bir API'nin olup olmamasıdır
OpenGL'i doğrudan çeviren bir wrapper'a her zaman ihtiyaç vardı ve geçmişte bundan kaçınmanın yolu yoktu
Her donanım türü için en iyi sonucu veren ayrı yaklaşım pratik değil
Asıl önemli olan, kolay bir çeviri katmanı sunup sunmadığıdır
Donanıma gerçekten derinlemesine erişmek istiyorsanız, basit ya da genel amaçlı bir arayüz yerine donanıma doğrudan yaklaşmanıza izin veren bir API gerekir
OpenGL, 2.0'dan sonra API olarak fazla karmaşık hale geldi; WebGPU ise Vk, D3D12 ve Metal'in özelliklerini oldukça rahat biçimde wrapper'lıyor
Bence OpenGL'den çok daha iyi tasarlanmış
Ayrıca D3D11 ve Metalv1 muhtemelen kullanılabilirlik ve performans açısından en iyi denge noktasıydı (özellikle D3D11 performansını Vulkan ve D3D12'de bile yakalamak zor)
Ben de katılıyorum
Geliştirmeye OpenGL ve CUDA interop ile devam edeceğim
Vulkan, aşırı mühendislik ürünü karmaşıklığına rağmen pratikte bir fayda sunmadığı için sonunda CUDA kullanmaya yöneldim
WebGPU'nun tarayıcı dışındaki ortamlara da başarılı biçimde genişleyip
resmî spesifikasyon kapsamında kullanımı kolay, çapraz platform bir API'ye (yani OpenGL'in yerine geçebilecek bir şeye) dönüşmesini hâlâ umuyorum
Ancak Rust tarafı dışında native kodda WebGPU kullanmaya yönelik büyük bir akım varmış gibi gelmiyor
Örneğin Dawn kullanan büyük bir proje duymadım
Muhtemelen bunun bir nedeni de WebGPU'nun çok geç gelmiş olması; çoğu proje zaten dx, vulkan ve metal üzerinde kendi soyutlama katmanını kurmuştu
Sonuçta yaygınlaşacağını sanmıyorum
Bir miktar sadelik var ama işlevler de epey eksik
Vulkan'da isteğe bağlı olan bazı özellikler (örneğin render pass) WebGPU'da hâlâ zorunlu
Bind group'ların statik olması da ayrı bir kullanım zorluğu yaratıyor
Ayrıca WebGPU'nun çeşitli kısıtları ve gereksiz unsurları var
Örneğin host tarafından buffer alt bölgelerine doğrudan yazamıyorsunuz; mutlaka ara buffer (staging buffer) kullanmanız gerekiyor
Alternatif olmadığı için web'de kullanırım ama masaüstünde OpenGL+CUDA interop framework'üyle devam edeceğim
Daha mantıklı modern bir grafik API'si çıkmasını umuyorum
cuMemAlloc, cuMemcpy ile bitebilecek bir iş; karmaşık buffer allocation ve binding, pipeline, explicit sync, binding group, descriptor set gibi gereksiz unsurlarla zorlaşıyorsa kullanmak istemem
WebGPU, Vulkan düzeyinde optimizasyon ve ince ayarlı kontrol sağlamıyor; performansı da genelde Vulkan kadar iyi değil
Vulkan'daki çeşitli extension'lar da WebGPU'da henüz desteklenmiyor
Zaten mevcut middleware'ler var
Tarayıcı dışında WebGPU'yu beklemeye gerek olduğunu düşünmüyorum
Sonuçta API tasarımı baştan tarayıcı sandbox'ına odaklanmıştı ve bunun getirdiği kısıtlar var
Bence ismi de büyük bir sorundu
Ben saf native geliştiricisiyim; "web gpu" adını yıllarca gerçekten sadece web'e özgü bir teknoloji sandım ve ilgilenmedim, ama sonradan bunun yanlış anlaşıldığını fark ettim
gpu-allocator https://github.com/Traverse-Research/gpu-allocator/ crate'imizin çok daha fazla kişi tarafından bilinecek olmasından büyük memnuniyet duyuyorum
Şimdiye kadar bunu wgpu'nun dx12 backend'inde ve kendi GPU benchmark ürünümüz evolve https://www.evolvebenchmark.com/ içinde kullanıyorduk
Bundan sonra daha geniş kullanım alanı bulmasını umuyorum
macOS için Firefox Nightly'de WebGPU'nun zaten kullanılabildiğini ancak şimdi fark ettim
https://www.mozilla.org/en-US/firefox/channel/desktop/ adresinden Mac için nightly'yi indirip
https://huggingface.co/spaces/reach-vb/github-issue-generator-webgpu demosunu çalıştırdım ve sorunsuz çalıştı
Bu demo, SmolLM2 modelini WebAssembly'ye derleyip yapılandırılmış veri çıkarımı için kullanıyor
Daha önce bunun yalnızca Chrome'da çalıştığını sanıyordum, ama normal Firefox (Stable) sürümünde "WebGPU desteklenmiyor" hatası alıyorum
macOS desteğini yakında resmî olarak sunacağız
Windows'un yanı sıra yakında Mac, Linux ve en son Android'de de WebGPU desteği vermeyi planlıyoruz
"Mac, Linux ve en son Android'de WebGPU desteği vermeyi planlıyoruz" kısmını görmek sevindirici
Ama şu aşamada büyük beklentiye girmek zor
Linux tarayıcılarında WebGPU desteğinin şimdiye kadar olmamasının nedeni muhtemelen yeni bir attack surface oluşturmanın fazlasıyla zor olması
Bu karmaşıklık, web standartlarının devasa boyutunun tarayıcı geliştirmeyi ne kadar zorlaştırdığını da gösteriyor
Netscape döneminden kalan tasarım kararlarının etkisi bugün bile sürüyor; bunlar web tarayıcılarının tekelleşmesi ve finansman sorunları gibi kaygıların kökünde yatıyor gibi görünüyor
Android/Linux, WebOS/Linux, ChromeOS/Linux üzerinde WebGPU zaten destekleniyor
Ancak GNU/Linux'ta bu tür iş yükleri için desteğin, tarayıcı üreticileri açısından düşük öncelikli kaldığını gösteriyor
Linux için olan uygulamayı da heyecanla bekliyorum
WebGPU çıktığında denenmeye değer demolar var mı, merak ediyorum
En etkileyici demolardan biri şuydu:
https://github.com/ArthurBrussee/brush
WebGPU tabanlı Gaussian splatting eğitimi ve render'ı
Unity tabanlı demoları da paylaşayım
Demo sitelerinin çoğu web demosu şeklinde
Ben şahsen Compute Toys https://compute.toys/ sitesini seviyorum
Shadertoy tarzında WebGPU compute shader denemeleri yapılabiliyor
Daha fazla demo için https://github.com/mikbry/awesome-webgpu
Kendi deneylerinizi yapabileceğiniz proje de şu: https://github.com/s-macke/WebGPU-Lab
Bevy motorunun örnekleri hem WebGL hem de WebGPU sürümleriyle sunuluyor
Karşılaştırmalı öğrenme için faydalı
Bağlantılar: https://bevy.org/examples-webgpu/, https://bevy.org/examples
Oldukça etkileyici bulduğum bir başka demo da şu: https://huggingface.co/spaces/webml-community/kokoro-webgpu
WebGPU olmadan da çalışıyor ama çok yavaş
Firefox, Chrome'dan önce Linux'ta WebGPU desteği sunacak gibi görünüyor
dawn (Google'ın WebGPU implementasyonu) Linux'ta oldukça iyi çalışmasına rağmen Firefox'un daha önce destek vermesi ilginç
Nihayet WebGPU desteği başlıyor; emeği geçen herkesi alkışlıyorum
WebGPU ile yalnızca Chrome'da deney yapmak biraz rahatsız ediciydi
Safari de yakın zamanda preview sürümünde destek vermeye başladı
Ana projelerimden birinde neredeyse 2 yıldır wgpu kullanıyorum
Bu WebGPU genişlemesi sayesinde bakım yapanların sayısının artmasını
ve 18 ay önce açtığım issue'ların daha hızlı çözülmesini umuyorum
Henüz Rust'a el atmadım ama bir gün doğrudan katkı sunacak motivasyon ve zamanı bulmayı isterim
wgpu-native binding'lerine bağımlıyım ve güncellemeler yavaş geliyor
Örneğin geçen hafta nihayet v25'e geçebildik, ama sadece birkaç gün önce v26 çıkmıştı