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

François Beaufort
François Beaufort

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

Aşağıdaki örnekte, navigator içinde gpu 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. İlgili sıralamaya göre sıralananlara göz atın:

  1. WebGPU; ChromeOS, macOS, Windows ve Android cihazlarda Chrome 121 veya sonraki sürümlerinde Chrome 113 veya sonraki sürümlerin kullanılmasını gerektirir. Sürümünüzü chrome://version adresinden kontrol edin ve gerekirse güncelleyin.

  2. WebGPU yalnızca güvenli bağlamlarda erişilebilir. Kodunuzu güvenli olmayan bir protokol (örneğin, http:, file:) üzerinden sunuyorsanız güvenli https: protokolünü kullanın veya web uygulamanızı geliştirirken aşağıdaki yöntemlerden birini kullanarak bu sorunu giderin:

    • Kodunuzu http://localhost veya http://127.0.0.1 üzerinde şu komutlardan biriyle yerel olarak sunun: npx http-server veya python3 -m http.server.

    • Kaynağı "Güvenli olarak kabul edilen güvenli olmayan kaynaklar"a ekleme chrome://flags/#unsafely-treat-insecure-origin-as-secure listesini yapıp Chrome'u yeniden başlatın.

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

    • ngrok ile yerel web sunucunuzu internete sunun.

GPU adaptörü boş

Aşağıda, requestAdapter() çağrısından aldığınız bağdaştırıcının null olması durumunda karşılaşabileceğiniz bir JavaScript hatasının ö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. İlgili sıralamaya göre sıralananlara göz atın:

  1. WebGPU, "Kullanılabilir olduğunda grafik hızlandırmayı kullan" ayarını kapattığında devre dışı bırakılır chrome://settings/system içinde. 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 Gözetimsiz Chrome'da WebGPU desteği sayfasına göz atın.

  3. GPU donanımı özel olarak engellenenler listesine eklendi. "WebGPU, engellenenler listesi veya komut satırı aracılığıyla devre dışı bırakıldı" mesajını görüyorsanız chrome://gpu içinde, 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çenekler için eşleşen GPU adaptörü yok. Farklı seçeneklerle requestAdapter() numaralı telefonu aramayı deneyin.

  5. WebGPU, GPU gerektirir (donanım veya yazılım emülasyonu). chrome://gpu adresini ziyaret ederek Chrome'un 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ırmalı" yazısını okuduğunuzdan emin olun. "WebGPU: Yalnızca yazılım, donanım hızlandırma kullanılamıyor" mesajını görürseniz GPU sürücülerinizi güncellemeniz gerekebilir.

  2. WebGL kavramlarını doğrudan WebGPU'ya çevirmek, WebGPU'nun benzersiz optimizasyonlarından tam anlamıyla yararlanmıyor olabilir. Bazı farkları öğrenmek için WebGPU'dan WebGPU'ya başlıklı makaleye bakın.

Windows'a özgü sınırlamalar

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

  • Chrome, aynı anda birden çok GPU adaptörünün kullanılmasını desteklemez. Chromium:329211593 hatası konusuna bakın.

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