WebGPU: Tips dan perbaikan pemecahan masalah

François Beaufort
François Beaufort

Dokumen ini menjelaskan alasan WebGPU mungkin tidak dapat beroperasi atau tidak berfungsi seperti yang diharapkan di browser Chrome, dengan langkah-langkah yang jelas untuk menyelesaikan masalah jika memungkinkan.

Contoh berikut menunjukkan error JavaScript yang mungkin Anda dapatkan saat gpu tidak tersedia di navigator:

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

Hal ini mungkin disebabkan oleh salah satu alasan berikut. Lihat konversi dalam urutan berikut:

  1. WebGPU memerlukan Chrome 113 atau yang lebih baru di ChromeOS, macOS, Windows, dan Chrome 121 atau yang lebih baru di Android. Periksa versi Anda di chrome://version dan update jika perlu.

  2. WebGPU hanya dapat diakses untuk mengamankan konteks. Jika Anda menyajikan kode melalui protokol yang tidak aman (misalnya, http:, file:), gunakan protokol https: yang aman atau atasi hal ini selama pengembangan aplikasi web Anda dengan salah satu cara berikut:

    • Tayangkan kode Anda secara lokal di http://localhost atau http://127.0.0.1 dengan salah satu perintah berikut: npx http-server atau python3 -m http.server.

    • Tambahkan origin ke daftar "Origin tidak aman yang diperlakukan sebagai aman" di chrome://flags/#unsafely-treat-insecure-origin-as-secure, lalu mulai ulang Chrome.

    • Instal Node.js dan jalankan npx servez --ssl untuk menyalurkan folder Anda melalui HTTPS dengan sertifikat palsu. Anda masih akan mendapatkan peringatan di Chrome yang dapat dilewati dengan mengklik "Lanjutan", lalu "Lanjutkan ke...".

    • Ekspos server web lokal Anda ke Internet dengan ngrok.

Adapter GPU null

Berikut adalah contoh error JavaScript yang mungkin Anda dapatkan saat adaptor yang Anda dapatkan dari memanggil requestAdapter() bernilai null:

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

Hal ini terjadi karena salah satu alasan berikut. Lihat dalam urutan khusus ini:

  1. WebGPU dinonaktifkan saat pengguna menonaktifkan "Gunakan akselerasi grafis jika tersedia" di chrome://settings/system. Periksa apakah setelan ini dinonaktifkan lalu aktifkan kembali

  2. WebGPU belum didukung di platform ini. Anda dapat mengaktifkan tanda chrome://flags/#enable-unsafe-webgpu dan memulai ulang Chrome. Untuk dukungan eksperimental Linux, Anda juga harus mengaktifkan tanda chrome://flags/#enable-vulkan. Lihat Dukungan WebGPU di Chrome Headless untuk mempelajari lebih lanjut.

  3. Hardware GPU telah diblokir secara khusus. Jika Anda melihat "WebGPU telah dinonaktifkan melalui daftar blokir atau command line" di chrome://gpu, Anda dapat menonaktifkan daftar blokir adaptor WebGPU dengan mengaktifkan tanda chrome://flags/#enable-unsafe-webgpu dan memulai ulang Chrome.

  4. Tidak ada adaptor GPU yang cocok untuk opsi yang diteruskan di requestAdapter(). Coba panggil requestAdapter() dengan opsi yang berbeda.

  5. WebGPU memerlukan GPU (baik yang diemulasikan hardware maupun software). Anda dapat memeriksa apakah Chrome mendeteksi GPU dengan membuka chrome://gpu.

  6. Proses GPU mengalami error beberapa kali. Anda dapat memuat ulang halaman atau memulai ulang Chrome. Lihat Praktik terbaik WebGPU Device Loss untuk mempelajari lebih lanjut.

WebGPU lebih lambat daripada WebGL

  1. Buka chrome://gpu dan pastikan Anda dapat membaca "WebGPU: Hardware accelerated". Jika Anda membaca "WebGPU: Software only, hardware acceleration available" (Hanya software, akselerasi hardware tidak tersedia), Anda mungkin perlu mengupdate driver GPU.

  2. Menerjemahkan konsep WebGL secara langsung ke WebGPU mungkin tidak memanfaatkan sepenuhnya pengoptimalan unik WebGPU. Lihat Dari WebGL ke WebGPU untuk mempelajari beberapa perbedaannya.

Batasan khusus Windows

Perhatikan batasan berikut saat menggunakan WebGPU di perangkat Windows:

  • Chrome tidak mendukung penggunaan beberapa adaptor GPU secara bersamaan. Lihat masalah chromium:329211593.

  • Chrome selalu menggunakan adaptor GPU yang sama dengan yang telah dialokasikan untuk beban kerja Chrome lainnya, yang untuk laptop biasanya adalah kartu grafis terintegrasi, karena aspek penggunaan daya (yaitu: penghematan daya). Artinya, opsi powerPreference tidak akan berpengaruh saat memanggil requestAdapter().