WebGPU: Tips dan perbaikan pemecahan masalah

François Beaufort
François Beaufort

Dokumen ini menjelaskan mengapa WebGPU mungkin tidak dapat dioperasikan atau tidak berfungsi seperti yang diharapkan di browser Chrome, dengan langkah-langkah yang jelas untuk memecahkan 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 contoh dengan urutan berikut ini:

  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 saat ini tidak dapat diakses dari pekerja layanan atau pekerja bersama. Jika menggunakan pekerja layanan atau pekerja bersama, pindahkan kode WebGPU Anda ke pekerja khusus atau konteks jendela global.

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

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

    • Tambahkan origin ke daftar " Asal tidak aman diperlakukan sebagai aman" dari 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() 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 contoh dengan urutan berikut ini:

  1. WebGPU dinonaktifkan jika pengguna telah menonaktifkan "Gunakan akselerasi grafis jika tersedia" di chrome://settings/system. Periksa untuk melihat apakah setelan ini dinonaktifkan dan mengaktifkannya 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 dalam daftar yang tidak diizinkan. Jika melihat pesan "WebGPU telah dinonaktifkan melalui daftar yang tidak diizinkan atau command line" di chrome://gpu, Anda dapat menonaktifkan daftar yang tidak diizinkan 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 oleh 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 saja, akselerasi hardware tidak tersedia", Anda mungkin perlu mengupdate driver GPU.

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

Batasan khusus Windows

Perhatikan batasan berikut saat menggunakan WebGPU pada 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: penghematan daya). Ini berarti opsi powerPreference tidak berpengaruh saat memanggil requestAdapter().