WebGPU: Tips dan perbaikan pemecahan masalah

François Beaufort
François Beaufort

Dokumen ini menjelaskan alasan WebGPU mungkin tidak dapat dioperasikan atau tidak berfungsi seperti yang diharapkan di browser Chrome, disertai 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 terjadi karena salah satu alasan berikut. Lihat yang berikut dalam urutan spesifik:

  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.

    • Menambahkan origin ke "Insecure origin diperlakukan as secure" (Asal tidak aman yang diperlakukan sebagai aman) daftar chrome://flags/#unsafely-treat-insecure-origin-as-secure dan mulai ulang Chrome.

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

    • Ekspos server web lokal Anda ke Internet dengan ngrok.

Adaptor GPU bernilai null

Berikut adalah contoh error JavaScript yang mungkin Anda dapatkan saat adaptor yang Anda dapatkan dari memanggil requestAdapter() adalah 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 yang berikut dalam urutan spesifik:

  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 pada 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 masuk daftar yang tidak diizinkan. Jika Anda melihat pesan "WebGPU telah dinonaktifkan melalui daftar yang tidak diizinkan atau command line" di chrome://gpu, Anda dapat menonaktifkan daftar adaptor WebGPU yang tidak diizinkan dengan mengaktifkan tanda chrome://flags/#enable-unsafe-webgpu dan memulai ulang Chrome.

  4. Tidak ada adaptor GPU yang cocok untuk opsi yang diteruskan dalam 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.

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" (Khusus perangkat lunak, akselerasi hardware tidak tersedia), Anda mungkin perlu mengupdate driver GPU.

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

Batasan khusus Windows

Perhatikan batasan-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 yang telah dialokasikan untuk beban kerja Chrome lainnya, yang untuk laptop umumnya merupakan kartu grafis terintegrasi, karena aspek penggunaan daya (yaitu: hemat daya). Artinya, opsi powerPreference tidak akan berpengaruh saat memanggil requestAdapter().