Tüm Yazılar
KategoriFull-Stack
Okuma Süresi
12 dk
Yayın Tarihi
2025-12-04
Kelime Sayısı
2.633kelime

Kahveni hazırla - bu içerikli bir makale!

WebGPU Üretime Hazır mı? Safari 26 Sonrası Platform Durumu

Özet

WebGPU tarayıcı desteği üretim için 4 Aralık 2025 itibarıyla platform bazında inceleniyor: iOS Safari tam destek, masaüstü Safari yalnızca macOS Tahoe'da açık, Firefox'ta yalnızca Windows'ta açık.

WebGPU Üretime Hazır mı? Safari 26 Sonrası Platform Durumu

WebGPU tarayıcı desteği üretim ortamı için yeterli mi, yoksa hâlâ deney aşamasında mı diye soruyorsan, kısa cevap: platforma göre değişir. Safari 26 ile birlikte Apple ekosistemi WebGPU'yu resmen açtı, Chrome ve Edge yıllardır varsayılan olarak destekliyor, Firefox ise yalnızca belirli platformlarda varsayılan açık. Bu yazıda 4 Aralık 2025 itibarıyla gerçek destek tablosunu, WebGL'den mimari farkını, ilk compute shader örneğini ve WebGPU'ya ne zaman güvenmemen gerektiğini kaynaklı şekilde anlatıyorum.

💡 Pro Tip: Üretime WebGPU ile çıkmadan önce navigator.gpu kontrolünü her zaman bir WebGL fallback'iyle birlikte yaz — Safari masaüstünde bile destek koşullu (yalnız macOS 26 Tahoe'da varsayılan açık), bu yüzden feature detection olmadan "destekleniyor" varsaymak üretimde beyaz ekrana çıkar.

İçindekiler

Destek Tablosu ve Platform Koşulları (4 Aralık 2025)

WebGPU'nun spesifikasyon durumu W3C Candidate Recommendation Draft — w3.org yayın geçmişinde bu tarihten hemen önceki sürüm 26 Kasım 2025 tarihli ve aynı statüde. caniuse.com/webgpu verisine göre tarayıcı matrisi platform başına ciddi farklılık gösteriyor; aşağıdaki tablo 4 Aralık 2025'te geçerli olan durumu özetliyor.

Masaüstü ve Mobil Tarayıcı Matrisi

Tarayıcı
Durum (4 Aralık 2025)
Not
Chrome / Edge
Destekleniyor (113. sürümden beri)
Varsayılan açık; Chrome'da Linux'ta değil (caniuse #5) — Edge satırında caniuse notu yok
Safari (masaüstü)
Kısmi destek (26.0–26.1)
Yalnız macOS 26 Tahoe'da varsayılan açık
Safari (iOS)
Destekleniyor (26.0'dan beri)
Masaüstünden farklı olarak tam destek
Firefox
Kısmi destek (141. sürümden beri)
Windows'ta varsayılan açık (145+ ile macOS 26 Tahoe/Apple Silicon dahil); diğerlerinde dom.webgpu.enabled
Opera
Destekleniyor (99. sürümden beri)
Chromium tabanlı; Linux'ta varsayılan değil (caniuse #5)

Kaynak: caniuse.com/webgpu tablosu ve sürüm notları.

Safari'nin "Kısmi Destek" Notu Ne Anlama Geliyor

caniuse'un Safari satırındaki "Partial support" ibaresi rastgele bir uyarı değil, spesifik bir koşula bağlı: caniuse'un kendi notu şöyle diyor — "Partial support refers to only being enabled by default on macOS 26 Tahoe or later." Yani Safari 26.0 kurulu olsa bile, işletim sistemi macOS 26 Tahoe'dan eskiyse WebGPU varsayılan olarak kapalı kalabiliyor. Bu, masaüstü Safari kullanıcı tabanını segmentlere ayırman gerektiği anlamına geliyor: aynı Safari sürüm numarası, farklı işletim sistemi sürümünde farklı davranış sergiliyor.

Tahoe koşulunun kaynağı caniuse'un #7 notu; WebKit duyurusu yalnız sürümü doğruluyor: "WebKit for Safari 26.0 adds support for WebGPU" başlığı altında, WebGPU'nun Safari Technology Preview'da bir yıldan uzun süredir aktif olduğunu ve şimdi macOS, iOS, iPadOS ve visionOS için Safari 26.0 ile birlikte gönderildiğini belirtiyor.

WebGPU vs WebGL: Mimari Fark

WebGPU, WebGL'in devamı değil, tamamen yeni bir nesil API. İkisi arasındaki fark yalnızca performans değil, hedef aldıkları native GPU katmanı da farklı.

Neden WebGL Artık Gelişmiyor

MDN'in WebGPU_API sayfası bu durumu açıkça özetliyor: "There are no more updates planned to OpenGL (and therefore WebGL), so it won't get any of these new features. WebGPU on the other hand will have new features added to it going forwards." Yani WebGL, dayandığı OpenGL ES 2.0 ailesiyle birlikte donmuş durumda; yeni GPU yeteneklerinden (compute, modern bellek modeli, düşük seviye kontrol) faydalanamıyor. WebGPU ise Direct3D 12, Apple Metal ve Vulkan gibi modern native GPU API'lerine karşılık gelecek şekilde tasarlandı.

Compute Shader'lar: WebGL'de Olmayan Yetenek

MDN'in tanımıyla WebGPU "hem grafik render'ı destekliyor hem de GPGPU hesaplamaları için birinci sınıf destek sunuyor" ("it supports graphic rendering, but also has first-class support for GPGPU computations"). WebKit'in Safari 26.0 duyurusu bunu somutlaştırıyor: "Additionally, it adds compute shaders, which allow general purpose computations on the GPU, something not previously possible with WebGL." Pratikte bu, görüntü işleme, fizik simülasyonu veya küçük ölçekli makine öğrenmesi çıkarımı gibi işleri artık tarayıcıda, WebGL'de mümkün olmayan bir şekilde GPU'ya devredebileceğin anlamına geliyor.

Karşılaştırma Tablosu

Özellik
WebGL
WebGPU
Dayandığı native katman
OpenGL ES 2.0 ailesi
Metal / Direct3D 12 / Vulkan'a eşlenir
Compute shader desteği
Yok
Var (WGSL ile)
Gelecek geliştirme
Planlanmıyor (dondu)
Aktif geliştiriliyor
Shader dili
GLSL ES
WGSL
Safari'deki konumu
Kısıtlı, eski nesil
Yeni sitelerde önerilen ("supersedes WebGL")

WebKit'in kendi ifadesiyle, WebGPU "macOS, iOS, iPadOS ve visionOS'ta WebGL'in yerini alıyor ve yeni siteler ile web uygulamaları için tercih ediliyor" ("WebGPU supersedes WebGL on macOS, iOS, iPadOS, and visionOS and is preferred for new sites and web apps"). Bu, Apple'ın kendi platformunda yön verdiği net bir sinyal — ama bu sinyalin diğer tarayıcılarda (özellikle Firefox'ta) aynı hızda karşılık bulmadığını bir sonraki bölümde göreceksin.

Fallback Stratejisi: Firefox ve Eski Cihazlar

Firefox kullanıcı tabanını göz ardı edemiyorsan (ve çoğu üretim sitesi edemez), WebGPU'yu tek yol olarak kodlamak riskli. caniuse verisine göre Firefox'ta destek platforma bağlı: 141. sürümden beri Windows'ta varsayılan açık, 145. sürümden itibaren buna macOS 26 Tahoe (Apple Silicon) da eklendi; Linux ve eski macOS'ta ise dom.webgpu.enabled bayrağı gerekiyor. Yani aynı Firefox sürümü, işletim sistemine göre WebGPU'yu gösteriyor ya da göstermiyor.

Feature detection, WebGPU projelerinde opsiyonel değil, zorunlu bir ilk adım:

js
1async function initGpu() {
2 if (!("gpu" in navigator)) {
3 console.warn("WebGPU desteklenmiyor, WebGL fallback devrede.");
4 return null;
5 }
6 
7 const adapter = await navigator.gpu.requestAdapter();
8 if (!adapter) {
9 console.warn("Uygun GPU adaptörü bulunamadı, WebGL fallback devrede.");
10 return null;
11 }
12 
13 return await adapter.requestDevice();
14}

Bu desen üç farklı başarısızlık noktasını ayrı ayrı ele alıyor: API hiç yok (navigator.gpu tanımsız — bayrak gerektiren Firefox platformları veya macOS Tahoe öncesi Safari), API var ama adaptör bulunamadı (eski/entegre GPU), ya da adaptör var ama cihaz isteği reddedildi. Her üçü de aynı fallback yoluna düşmeli.

WebGL'e Düşüş Deseni

Pratikte en sağlam yaklaşım, render katmanını soyutlayıp hangi backend'in kullanılacağına çalışma zamanında karar vermek:

js
1const device = await initGpu();
2 
3const renderer = device
4 ? createWebGpuRenderer(device)
5 : createWebGlRenderer(canvas);
6 
7renderer.draw(scene);

Bu satırlarda kritik nokta şu: createWebGpuRenderer ve createWebGlRenderer aynı draw(scene) arayüzünü paylaşmalı. Aksi halde iki backend'i eşzamanlı büyütmek zorunda kalırsın ve bakım maliyeti katlanır. Three.js ve Babylon.js gibi framework'lerin WebGPU render'ını "opsiyonel backend" olarak sunmasının nedeni tam olarak bu — sahne grafiği aynı kalıyor, yalnızca render arka ucu değişiyor.

İlk Compute Shader: Pipeline Kurulumu

WebGPU'nun asıl farkı — WebGL'de mümkün olmayan compute shader'ları — küçük bir örnekle görelim: bir sayı dizisindeki her elemanı GPU'da ikiye katlayan minimal bir pipeline.

Adapter ve Device Alma

Her WebGPU programı aynı üç adımla başlar: adaptör iste, cihaz iste, shader modülünü derle.

js
1const adapter = await navigator.gpu.requestAdapter();
2const device = await adapter.requestDevice();
3 
4const shaderModule = device.createShaderModule({
5 code: computeShaderCode, // aşağıdaki WGSL kodu
6});

requestAdapter() fiziksel GPU'ya bir tutamaç verir, requestDevice() ise o adaptör üzerinden gerçek komutları gönderebileceğin mantıksal cihazı açar. Bu API yüzeyi (GPUDevice, GPUShaderModule) MDN'in WebGPU_API referansında tanımlanan isimlerle birebir eşleşiyor.

Bind Group, Pipeline ve Dispatch

Önce GPU'nun anlayacağı dilde, WGSL (WebGPU Shading Language) ile shader'ı yazıyoruz:

wgsl
1@group(0) @binding(0) var<storage, read_write> data: array<f32>;
2 
3@compute @workgroup_size(64)
4fn main(@builtin(global_invocation_id) id: vec3<u32>) {
5 data[id.x] = data[id.x] * 2.0;
6}

Sonra bu shader'ı bir compute pipeline'a bağlıyoruz — MDN'in GPUDevice.createComputePipeline() referans örneğindeki adımları takip ederek:

js
1const bindGroupLayout = device.createBindGroupLayout({
2 entries: [
3 {
4 binding: 0,
5 visibility: GPUShaderStage.COMPUTE,
6 buffer: { type: "storage" },
7 },
8 ],
9});
10 
11const computePipeline = device.createComputePipeline({
12 layout: device.createPipelineLayout({
13 bindGroupLayouts: [bindGroupLayout],
14 }),
15 compute: {
16 module: shaderModule,
17 entryPoint: "main",
18 },
19});

GPUShaderStage.COMPUTE görünürlüğü, bu buffer'ın yalnızca compute aşamasında erişilebilir olduğunu belirtiyor; buffer: { type: 'storage' } ise shader'ın var<storage, read_write> ile bildirdiği bellek türüyle eşleşiyor. Komutu gönderip GPU'yu çalıştırmak için son adım computePass.dispatchWorkgroups() çağrısıdır — dizinin boyutuna göre kaç workgroup tetikleneceğini belirler.

Mobil Safari ve Chrome'da Termal/Pil Gerçeği

Bu konuda net olmak gerekiyor: Apple ve Google, WebGPU'nun mobilde spesifik bir pil tüketimi veya termal artış rakamı için resmi bir ölçüm yayınlamadı. Elimizdeki tek dayanak, genel GPU programlama prensibi: compute shader'lar GPU'yu CPU'dan daha yoğun ve sürekli meşgul ettiği için, uzun süreli çalışan GPU iş yükleri (özellikle mobilde) ısı ve pil tüketimini artırma potansiyeli taşır — bu, WebGPU'ya özgü değil, native Metal/Vulkan compute iş yüklerinde de geçerli olan genel bir GPU programlama gerçeği.

Somut rakam yerine somut tavsiye: mobil Safari veya Chrome for Android'de WebGPU tabanlı bir özelliği üretime almadan önce gerçek cihazda (simülatör değil) uzun süreli bir oturum test et, cihaz ısınmasını ve pil yüzdesini gözlemle, ve iş yükünü mümkünse kullanıcı etkileşimiyle sınırlı tut (sürekli arka planda çalışan bir compute döngüsü yerine, talep üzerine tetiklenen kısa işler tercih et).

Ne Zaman Kullanmamalı: Karar Kriterleri

Destek tablosu ve fallback deseni netleştikten sonra, gerçek karar şu üç soruya indirgenebiliyor:

  • Kullanıcı tabanının önemli bir kısmı Firefox mu? Firefox'ta WebGPU yalnızca Windows'ta (145+ ile ayrıca macOS 26 Tahoe/Apple Silicon'da) varsayılan açık olduğu için, Linux ya da eski macOS ağırlıklı bir Firefox kitlesinde WebGPU'yu tek yol yapmak riskli — bu durumda WebGL birincil yol, WebGPU "varsa kullan" iyileştirmesi olmalı.
  • Masaüstü Safari kullanıcıların işletim sistemi sürümü bilinmiyor mu? macOS 26 Tahoe öncesi sürümlerde WebGPU kapalı kalabiliyor; analytics'inde macOS sürüm dağılımı yoksa, masaüstü Safari için WebGPU'yu opsiyonel bir yol olarak tasarla.
  • Özellik gerçekten compute shader mı gerektiriyor? Yalnızca 2D/3D render yapıyorsan ve WebGL zaten yetiyorsa, WebGPU'ya geçmenin karmaşıklık/kazanç oranı düşük olabilir — WebGPU'nun asıl farkı GPGPU/compute yeteneğinde.

Bu üç kriterden ikisi "hayır" ise, WebGPU'yu progressive enhancement olarak ele almak (WebGL varsayılan, WebGPU tespit edilirse devreye giren bir iyileştirme) en güvenli yol.

Hangi Framework'ler Zaten WebGPU Kullanıyor

Kendi WebGPU pipeline'ını sıfırdan yazmak zorunda değilsin. WebKit'in Safari 26.0 duyurusu, WebGPU'yu üretimde zaten kullanan framework'leri şöyle sıralıyor: Babylon.js, Three.js, Unity, PlayCanvas, Transformers.js ve ONNX Runtime — "Currently, Babylon.js, Three.js, Unity, PlayCanvas, Transformers.js, ONNX Runtime and others all work great in Safari 26.0." Bu framework'lerden Three.js ve Babylon.js, WebGPU mevcut değilse otomatik olarak WebGL'e düşen bir backend soyutlaması sunuyor; yani yukarıdaki fallback desenini elle yazmak yerine framework'ün kendi backend seçimine güvenebilirsin.

ALTIN İPUCU

Bu yazının en değerli bilgisi

Bu ipucu, yazının en önemli çıkarımını içeriyor.

Easter Egg

Gizli bir bilgi buldun!

Bu bölümde gizli bir bilgi var. Keşfetmek ister misin?

Okuyucu Ödülü

Üretime WebGPU ile çıkmadan önce gözden geçirmen gereken kısa bir kontrol listesi hazırladım — her satır bu yazıda anlatılan bir kaynağa dayanıyor ve kopyala-yapıştır şeklinde kullanılabilir.

SSS

WebGPU hangi tarayıcılarda destekleniyor?

4 Aralık 2025 itibarıyla Chrome ve Edge 113. sürümden beri varsayılan olarak destekliyor, Opera 99. sürümden beri destekliyor, Safari iOS'ta 26.0'dan beri tam destekli, Safari masaüstünde 26.0–26.1 arasında yalnızca macOS 26 Tahoe'da varsayılan açık "kısmi destek" durumunda, Firefox ise 141. sürümden beri Windows'ta (145+ ile ayrıca macOS 26 Tahoe/Apple Silicon'da) varsayılan açık, diğer platformlarda dom.webgpu.enabled bayrağı arkasında.

WebGPU üretim projelerinde kullanılabilir mi?

Kullanılabilir, ama koşullu: Chrome/Edge/Opera kullanıcı tabanı için doğrudan güvenilir, Safari iOS için güvenilir, Safari masaüstü ve Firefox için mutlaka bir WebGL fallback'iyle birlikte. Spesifikasyon W3C Candidate Recommendation Draft statüsünde olsa da, Babylon.js, Three.js, Unity, PlayCanvas gibi üretim framework'leri WebGPU'yu zaten backend olarak kullanıyor.

WebGL fallback'ini ne kadar süre tutmalıyım?

Firefox'ta bayrak gerektiren platformlarda (Linux, eski macOS) WebGPU'nun varsayılan açılacağına dair duyurulmuş bir tarih yok. Bu nedenle net bir "şu tarihte kaldır" cevabı vermek yanıltıcı olur — fallback'i, hedef kitlenin tarayıcı/işletim sistemi dağılımını kendi analytics'inden izleyerek, bayrak gerektiren platformların payı ihmal edilebilir düzeye inene kadar tutman daha güvenilir bir yaklaşım.

WebGPU ile WebGL'i aynı anda kullanabilir miyim?

Aynı <canvas> üzerinde aynı anda değil, ama uygulama seviyesinde ikisini birbirinin fallback'i olarak kullanabilirsin. Framework'lerin çoğu (Three.js, Babylon.js) bu seçimi çalışma zamanında navigator.gpu varlığına göre otomatik yapıyor; sen manuel yazıyorsan, backend seçimini bir kez yapıp render döngüsü boyunca sabit tutman önerilir (bkz. Altın İpucu).

Safari'de WebGPU neden hâlâ "kısmi destek" olarak işaretli?

Çünkü destek işletim sistemi sürümüne bağlı: caniuse'un kendi notu, kısmi desteğin "yalnızca macOS 26 Tahoe veya sonrasında varsayılan olarak etkin olmayı" ifade ettiğini belirtiyor. Safari 26.0 kurulu olsa bile altındaki macOS sürümü Tahoe'dan eskiyse WebGPU kapalı kalabiliyor — bu da "Safari 26 kullanıyor" bilgisinin tek başına yeterli olmadığı anlamına geliyor.

Güncelleme (Eylül 2026)

Bu makalenin gövdesi 4 Aralık 2025 tarihindeki destek durumunu yansıtıyor. O tarihten bu yana platformlarda somut, kaynaklı ilerlemeler oldu:

  • Safari 27.0 (17 Eylül 2026) WebGPU'ya clip_distances WGSL built-in'ini ekledi (kırpma düzlemleri desteği) — 26.6 ve 27.0 sürüm notları içinde WebGPU'ya dair tek somut ekleme bu. Kaynak: webkit.org/blog/18325/webkit-features-for-safari-27-0/
  • Safari 26.6 sürüm notlarında WebGPU'ya dair herhangi bir değişiklik yok; yani WebGPU ilerlemesi 26.x serisinde değil, 27.0'da yoğunlaştı. Kaynak: webkit.org/blog/18178/webkit-features-for-safari-26-6/
  • Chrome 144 (7 Ocak 2026) WGSL'e subgroup_id ve num_subgroups built-in'lerini ekledi. Kaynak: developer.chrome.com/blog/new-in-webgpu-144
  • Chrome 146 (25 Şubat 2026) WebGPU "Compatibility Mode" adında, OpenGL ES 3.1 hedefli daha kısıtlı bir alt küme sundu — önce Android'de, ChromeOS ve Windows (D3D11) için araştırma sürüyor. Kaynak: developer.chrome.com/blog/new-in-webgpu-146
  • Masaüstü Safari hâlâ "Partial support" statüsünde kalmaya devam ediyor; caniuse'un #7 notuna göre yalnızca macOS 26 Tahoe veya sonrasında varsayılan etkin. Kaynak: caniuse.com/webgpu
  • Firefox'ta tablo Aralık 2025'ten bu yana değişmedi: caniuse'un #8 notu "Only enabled by default on Windows as well as macOS 26 Tahoe or later on Apple Silicon" diyor; Linux ile eski macOS'ta hâlâ dom.webgpu.enabled gerekiyor. Kaynak: caniuse.com/webgpu

Kısacası, Eylül 2026 itibarıyla temel görüntü Aralık 2025'tekiyle aynı kalıyor: Chrome/Edge/Opera güvenilir, Safari iOS güvenilir, Safari masaüstü ve Firefox hâlâ koşullu. Asıl ilerleme yeni platform açılışında değil, mevcut platformlardaki WGSL özellik setinin (subgroup'lar, clip distances, compatibility mode) genişlemesinde oldu.

Sonuç

WebGPU'nun "üretime hazır mı" sorusuna tek cümlelik cevap yok — Chrome/Edge/Opera ve iOS Safari için evet, masaüstü Safari ve Firefox için henüz koşullu bir evet. Doğru yaklaşım, WebGPU'yu tek yol olarak değil, navigator.gpu kontrolüyle tespit edilen, WebGL'e sorunsuz düşen bir progressive enhancement katmanı olarak tasarlamak. GPU tarafında native geliştirme yapıyorsan Apple'ın kendi Metal Framework ile GPU programlama rehberi veya SwiftUI Metal Shaders yazısı karşılaştırma için iyi bir referans; web tarafında build/tooling kararları için Next.js 16.3 Instant Navigations rehberi, Webpack'ten Vite'a geçiş rehberi ve TypeScript 7 geçiş kararı yazısı bu kampanyanın diğer platform-kararı içeriklerine bakabilirsin.

Kaynaklar

Etiketler

#WebGPU#WebGL#Safari#WGSL#compute shader#tarayıcı desteği#GPU#web performans
Muhittin Çamdalı

Muhittin Çamdalı

Lead Mobile Engineer

12+ yıllık deneyime sahip Lead Mobile Engineer. Swift, SwiftUI, Kotlin ve Flutter ile iOS, Android ve cross-platform mimarilerde uzman. Performanslı ve kullanıcı dostu mobil uygulamalar geliştiriyorum.

iOS Geliştirme Haberleri

Haftalık Swift tips, SwiftUI tricks ve iOS best practices. Spam yok, sadece değerli içerik.

Gizliliğinize saygı duyuyoruz. İstediğiniz zaman abonelikten çıkabilirsiniz.

Paylaş

İlgili İçerik