WebGPU: نکات و راه حل های عیب یابی

فرانسوا بوفور
François Beaufort

منتشر شده: ۷ فوریه ۲۰۲۴، آخرین به‌روزرسانی: ۱۷ اکتبر ۲۰۲۵

این سند توضیح می‌دهد که چرا WebGPU ممکن است در مرورگر کروم غیرقابل استفاده باشد یا آنطور که انتظار می‌رود کار نکند، و در صورت امکان، گام‌های روشنی برای حل مشکلات ارائه می‌دهد.

مثال زیر یک خطای جاوا اسکریپت را نشان می‌دهد که ممکن است هنگام عدم وجود gpu در navigator با آن مواجه شوید:

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

این ممکن است به یکی از دلایل زیر باشد. موارد زیر را به ترتیب خاص بررسی کنید:

  1. WebGPU به Chrome 113 یا بالاتر در ChromeOS، macOS، Windows و Chrome 121 یا بالاتر در Android نیاز دارد. نسخه خود را در chrome://version بررسی کنید و در صورت لزوم به‌روزرسانی کنید.

  2. WebGPU فقط برای زمینه‌های امن قابل دسترسی است. اگر کد خود را از طریق یک پروتکل ناامن (مثلاً http: file: ارائه می‌دهید، یا از پروتکل امن https: استفاده کنید یا در طول توسعه برنامه وب خود به یکی از روش‌های زیر این مشکل را برطرف کنید:

    • کد خود را به صورت محلی در http://localhost یا http://127.0.0.1 با یکی از این دستورات npx http-server یا python3 -m http.server اجرا کنید.

    • مبدا را به لیست «منابع ناامن به عنوان امن در نظر گرفته می‌شوند» در chrome://flags/#unsafely-treat-insecure-origin-as-secure اضافه کنید و کروم را مجدداً راه‌اندازی کنید.

    • Node.js را نصب کنید و npx servez --ssl اجرا کنید تا پوشه شما از طریق https و با یک گواهی جعلی سرویس‌دهی شود. همچنان در کروم هشداری دریافت خواهید کرد که می‌توانید با کلیک روی «پیشرفته» و سپس «ادامه به...» آن را دور بزنید.

    • سرور وب محلی خود را با ngrok در اینترنت قرار دهید.

آداپتور GPU تهی است

مثال زیر یک خطای جاوا اسکریپت است که ممکن است هنگام تهی بودن آداپتوری که از فراخوانی requestAdapter() دریافت می‌کنید، دریافت کنید:

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

این اتفاق به یکی از دلایل زیر رخ می‌دهد. موارد زیر را به ترتیب خاص بررسی کنید:

  1. وقتی کاربر گزینه «استفاده از شتاب گرافیکی در صورت وجود» را در chrome://settings/system غیرفعال کرده باشد، WebGPU غیرفعال می‌شود. بررسی کنید که آیا این تنظیم غیرفعال است یا خیر و آن را دوباره فعال کنید.

  2. WebGPU هنوز در این پلتفرم پشتیبانی نمی‌شود. می‌توانید پرچم chrome://flags/#enable-unsafe-webgpu فعال کرده و کروم را مجدداً راه‌اندازی کنید. برای پشتیبانی آزمایشی لینوکس، باید پرچم chrome://flags/#enable-vulkan را نیز فعال کنید. برای کسب اطلاعات بیشتر ، پشتیبانی WebGPU در Chrome بدون سر را بررسی کنید.

  3. سخت‌افزار پردازنده گرافیکی (GPU) به‌طور خاص در فهرست مسدودسازی قرار گرفته است. اگر در chrome://gpu با عبارت "WebGPU از طریق فهرست مسدودسازی یا خط فرمان غیرفعال شده است" مواجه شدید، می‌توانید با فعال کردن پرچم chrome://flags/#enable-unsafe-webgpu و راه‌اندازی مجدد کروم، فهرست مسدودسازی آداپتورهای WebGPU را غیرفعال کنید. همچنین می‌توانید با فعال کردن پرچم chrome://flags/#ignore-gpu-blocklist و راه‌اندازی مجدد کروم، فهرست رندر نرم‌افزار داخلی را لغو کنید.

  4. هیچ آداپتور GPU منطبقی برای گزینه‌های ارسالی در requestAdapter() وجود ندارد. فراخوانی requestAdapter() با گزینه‌های مختلف امتحان کنید .

  5. WebGPU به یک پردازنده گرافیکی (چه سخت‌افزاری و چه نرم‌افزاری) نیاز دارد. می‌توانید با مراجعه به chrome://gpu بررسی کنید که آیا کروم پردازنده گرافیکی را شناسایی می‌کند یا خیر.

  6. فرآیند GPU چندین بار از کار افتاد. می‌توانید صفحه را مجدداً بارگیری کنید یا Chrome را مجدداً راه‌اندازی کنید. برای کسب اطلاعات بیشتر ، بهترین شیوه‌های از دست دادن دستگاه WebGPU را بررسی کنید.

WebGPU کندتر از WebGL است

  1. chrome://gpu را باز کنید و مطمئن شوید که می‌توانید عبارت «WebGPU: Hardware accelerator» را بخوانید. اگر عبارت «WebGPU: Software only, hardware acceleration unavailable» را می‌بینید، ممکن است لازم باشد درایورهای GPU خود را به‌روزرسانی کنید.

  2. ترجمه مستقیم مفاهیم WebGL به WebGPU ممکن است به معنای بهره‌برداری کامل از بهینه‌سازی‌های منحصر به فرد WebGPU نباشد. برای آشنایی با برخی از تفاوت‌های آنها، به مقاله «از WebGL تا WebGPU» مراجعه کنید.

محدودیت‌های خاص ویندوز

هنگام استفاده از WebGPU در دستگاه‌های ویندوزی، از محدودیت‌های زیر آگاه باشید:

  • کروم از استفاده همزمان از چندین آداپتور پردازنده گرافیکی پشتیبانی نمی‌کند. به شماره ‎chromium:329211593 مراجعه کنید.

  • کروم همیشه از همان آداپتور GPU که برای سایر بارهای کاری کروم اختصاص داده شده است، استفاده می‌کند که برای لپ‌تاپ‌ها معمولاً کارت گرافیک یکپارچه است، به دلیل جنبه مصرف برق (یعنی: صرفه‌جویی در مصرف برق). این بدان معناست که گزینه powerPreference هنگام فراخوانی requestAdapter() هیچ تاثیری ندارد. می‌توانید با فعال کردن پرچم chrome://flags/#force-high-performance-gpu و راه‌اندازی مجدد کروم، استفاده از GPU با کارایی بالا را در صورت وجود، اجباری کنید.