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

François Beaufort
François Beaufort

Bu dokümanda, WebGPU'nun neden Chrome Tarayıcı'da düzgün çalışmadığı veya düzgün çalışmadığı anlatılmaktadır. Ayrıca, mümkün olduğunda sorunların çözümüne ilişkin açık adımlar da yer alıyor.

Aşağıdaki örnekte, gpu, navigator içinde kullanılamadığında alabileceğiniz 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. Bu belirli sıradaki seçeneklere göz atın:

  1. WebGPU için ChromeOS, macOS, Windows ve Android'de Chrome 121 veya sonraki bir sürüm gereklidir. chrome://version adresinden sürümünüzü kontrol edin ve gerekiyorsa güncelleyin.

  2. WebGPU'ya şu anda bir hizmet çalışanından veya paylaşılan bir çalışandan erişilemiyor. Service Worker veya paylaşılan çalışan kullanıyorsanız WebGPU kodunuzu özel çalışana ya da genel pencere bağlamına taşıyın.

  3. WebGPU'ya yalnızca güvenli bağlamlar erişebilir. Kodunuzu güvenli olmayan bir protokol (örneğin, http:, file:) üzerinden sunuyorsanız ya güvenli https: protokolünü kullanın ya da web uygulamanızın geliştirilmesi sırasında aşağıdaki yöntemlerden birini kullanarak bu sorunu giderin:

    • Kodunuzu, npx http-server veya python3 -m http.server komutlarından biriyle http://localhost veya http://127.0.0.1 üzerinde yerel olarak sunun.

    • Kaynağı chrome://flags/#unsafely-treat-insecure-origin-as-secure "Güvenli olmayan kaynaklar tarafından güvenli kabul edilenler" listesine ekleyip Chrome'u yeniden başlatın.

    • Klasörünüzü https üzerinden sahte bir sertifikayla sunmak için Node.js'yi yükleyin ve npx servez --ssl komutunu çalıştırın. Chrome'da yine de "Gelişmiş"i, ardından "Devam et..." seçeneğini tıklayarak atlayabileceğiniz bir uyarı alırsınız.

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

GPU bağdaştırıcısı boş

Aşağıda, requestAdapter() çağrısından aldığınız bağdaştırıcı 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. Bu belirli sıradaki seçeneklere göz atın:

  1. Kullanıcı, chrome://settings/system ürününde "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 edip 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 Gözetimsiz Chrome'da WebGPU desteğine göz atın.

  3. GPU donanımı özel olarak engellenenler listesine eklendi. chrome://gpu içinde "WebGPU, engellenenler listesi veya komut satırı aracılığıyla devre dışı bırakıldı" ifadesini görüyorsanız 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 GPU bağdaştırıcısı yok. requestAdapter() numarasını farklı seçeneklerle aramayı deneyin.

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

WebGPU, WebGL'den daha yavaştır

  1. chrome://gpu uygulamasını açın ve "WebGPU: Donanım hızlandırılmış" bölümünü okuyabildiğinizden emin olun. "WebGPU: Yalnızca yazılım, donanım hızlandırma kullanılamıyor" mesajını 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 yararlanmıyor olabilir. Aralarındaki bazı farklılıklar hakkında bilgi edinmek için WebGL'den WebGPU'ya sayfasına göz atın.

Windows'a özel sınırlamalar

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

  • Chrome, birden fazla GPU bağdaştırıcısının aynı anda kullanılmasını desteklemez. Sorun chrome:329211593 bölümüne bakın.

  • Chrome her zaman diğer Chrome iş yükleri için ayrılmış olan GPU adaptörünü kullanır. Güç kullanımı özelliği (ör. güç tasarrufu) nedeniyle bu adaptör dizüstü bilgisayarlar için genellikle entegre grafik kartıdır. requestAdapter() çağrılırken powerPreference seçeneğinin herhangi bir etkisi yoktur.