WebGPU: Sorun giderme ipuçları ve düzeltmeleri

François Beaufort
François Beaufort

Bu dokümanda, WebGPU'nun Chrome tarayıcıda neden kullanılamayabileceği veya beklendiği gibi çalışmayabileceği açıklanmakta ve mümkün olduğunda sorunları çözmek için net adımlar verilmektedir.

Aşağıdaki örnekte, gpu navigator'te kullanılamadığında karşılaşabileceğiniz bir JavaScript hatası gösterilmektedir:

const adapter = await navigator.gpu.requestAdapter();
cancel Uncaught TypeError: Cannot read properties of undefined (reading 'requestAdapter')

Bunun nedeni aşağıdakilerden biri olabilir. Aşağıdaki sırayla bu öğelere göz atın:

  1. WebGPU, ChromeOS, macOS ve Windows'ta Chrome 113 veya sonraki bir sürümü, Android'de ise Chrome 121 veya sonraki bir sürümü gerektirir. chrome://version adresinden sürümünüzü kontrol edin ve gerekirse güncelleyin.

  2. WebGPU'ye yalnızca güvenli bağlamlardan erişilebilir. Kodunuzu güvenli olmayan bir protokol üzerinden (ör. http:, file:) sunuyorsanız güvenli https: protokolünü kullanın veya web uygulamanızın geliştirilmesi sırasında aşağıdaki yöntemlerden biriyle bu sorunu giderin:

    • Kodunuzu npx http-server veya python3 -m http.server komutlarından birini kullanarak http://localhost ya da http://127.0.0.1 üzerinde yerel olarak yayınlayın.

    • Kaynağı, chrome://flags/#unsafely-treat-insecure-origin-as-secure'ün "Güvenli olarak değerlendirilen güvenli olmayan kaynaklar" listesine ekleyin ve Chrome'u yeniden başlatın.

    • Node.js'yi yükleyin ve klasörünüzü sahte sertifika ile https üzerinden yayınlamak için npx servez --ssl'ü çalıştırın. Chrome'da yine de bir uyarı alırsınız. "Gelişmiş"i ve ardından "Devam et"i tıklayarak bu uyarıyı atlayabilirsiniz.

    • ngrok ile yerel web sunucunuzu internete açın.

GPU adaptörü null

Aşağıda, requestAdapter() çağrısından aldığınız bağdaştırıcının null olduğunda karşılaşabileceğiniz bir JavaScript hatası örneği verilmiştir:

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
cancel Uncaught TypeError: Cannot read properties of undefined (reading requestDevice)

Bunun nedeni aşağıdakilerden biri olabilir. Aşağıdaki sırayla bu öğelere göz atın:

  1. Kullanıcı chrome://settings/system'te "Kullanılabilir olduğunda grafik hızlandırmayı kullan" ayarını kapattığında WebGPU devre dışı bırakılır. Bu ayarın kapalı olup olmadığını kontrol edin ve tekrar açın

  2. WebGPU henüz bu platformda desteklenmiyor. chrome://flags/#enable-unsafe-webgpu işaretini etkinleştirip Chrome'u yeniden başlatabilirsiniz. Linux deneysel desteği için chrome://flags/#enable-vulkan işaretini de etkinleştirmeniz gerekir. Daha fazla bilgi edinmek için Başsız Chrome'da WebGPU desteği başlıklı makaleyi inceleyin.

  3. GPU donanımı, özellikle engellenenler listesine eklenmiştir. chrome://gpu bölümünde "WebGPU, engellenenler listesi veya komut satırı aracılığıyla devre dışı bırakıldı" ifadesini görürseniz chrome://flags/#enable-unsafe-webgpu işaretini etkinleştirip Chrome'u yeniden başlatarak WebGPU bağdaştırıcılar engellenenler listesini devre dışı bırakabilirsiniz.

  4. requestAdapter() içinde iletilen seçeneklerle eşleşen bir GPU adaptörü yok. requestAdapter()'yi farklı seçeneklerle aramayı deneyin.

  5. WebGPU için bir GPU (donanım veya yazılım tarafından taklit edilen) gerekir. Chrome'un GPU algılayıp algılamadığını chrome://gpu adresini ziyaret ederek kontrol edebilirsiniz.

  6. GPU işlemi birkaç kez kilitlendi. Sayfayı yeniden yükleyebilir veya Chrome'u yeniden başlatabilirsiniz. Daha fazla bilgi edinmek için WebGPU cihaz kaybıyla ilgili en iyi uygulamalara göz atın.

WebGPU, WebGL'den daha yavaştır

  1. chrome://gpu simgesini açın ve "WebGPU: Donanım hızlandırmalı" ifadesini okuyabildiğinizden emin olun. "WebGPU: Yalnızca yazılım, donanım hızlandırma kullanılamıyor" ifadesini görüyorsanız GPU sürücülerinizi güncellemeniz gerekebilir.

  2. WebGL kavramlarını doğrudan WebGPU'ya çevirmek, WebGPU'nun benzersiz optimizasyonlarından tam olarak yararlanmayabilir. Aralarındaki bazı farklar hakkında bilgi edinmek için WebGL'den WebGPU'ya başlıklı makaleyi inceleyin.

Windows'a özgü sınırlamalar

Windows cihazlarda WebGPU'yu kullanırken aşağıdaki sınırlamalara dikkat edin:

  • Chrome, aynı anda birden fazla GPU adaptörünün kullanılmasını desteklemez. chromium:329211593 numaralı soruna bakın.

  • Chrome, diğer Chrome iş yükleri için ayrılan GPU adaptörünü her zaman kullanır. Bu adaptör, dizüstü bilgisayarlarda güç kullanımı (ör. güç tasarrufu) nedeniyle genellikle entegre grafik kartıdır. Bu, requestAdapter() çağrılırken powerPreference seçeneğinin herhangi bir etkisi olmadığı anlamına gelir.