WebGPU: نصائح عن تحديد المشاكل وحلّها

François Beaufort
François Beaufort

يوضّح هذا المستند الأسباب التي قد تجعل WebGPU غير قابلة للتشغيل أو لا تعمل على النحو المتوقَّع في متصفِّح Chrome، مع خطوات واضحة لحل المشاكل حيثما أمكن.

يعرض المثال التالي خطأ JavaScript قد يظهر لك عند عدم توفّر gpu في navigator:

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

وقد يرجع ذلك إلى أحد الأسباب التالية. تحقق من هذه بالترتيب المحدد:

  1. تتطلّب WebGPU توفُّر الإصدار 113 من Chrome أو الإصدارات الأحدث على أنظمة التشغيل 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 وإعادة تشغيل Chrome.

    • ثبِّت Node.js وشغِّل npx servez --ssl لعرض المجلد عبر https باستخدام شهادة مزيفة. سيستمر ظهور تحذير في Chrome يمكنك تجاوزه بالنقر على "إعدادات متقدّمة". ثم "متابعة إلى...".

    • اعرض خادم الويب المحلي على الإنترنت باستخدام ngrok.

محوّل وحدة معالجة الرسومات فارغ

في ما يلي مثال على خطأ JavaScript الذي قد يظهر لك عندما يكون المحوِّل الذي تحصل عليه من استدعاء الدالة requestAdapter() فارغًا:

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

يحدث ذلك لأحد الأسباب التالية. تحقق من هذه بالترتيب المحدد:

  1. يتم إيقاف WebGPU عندما يوقف المستخدم خيار "استخدام تسريع الرسومات عند توفّره". في chrome://settings/system. تحقّق ممّا إذا كان هذا الإعداد غير مفعَّل ثم أعِد تفعيله.

  2. إنّ وحدة معالجة الرسومات WebGPU غير متاحة على هذا النظام الأساسي بعد. يمكنك تفعيل العلامة chrome://flags/#enable-unsafe-webgpu وإعادة تشغيل Chrome. للحصول على الدعم التجريبي لنظام التشغيل Linux، عليك أيضًا تفعيل العلامة chrome://flags/#enable-vulkan. ويمكنك الاطّلاع على التوافق مع WebGPU في Chrome بلا واجهة مستخدم رسومية لمزيد من المعلومات.

  3. تمّت إضافة أجهزة وحدة معالجة الرسومات إلى القائمة المحظورة بشكل خاص. في حال ظهور الرسالة "تم إيقاف WebGPU من خلال القائمة المحظورة أو سطر الأوامر". في chrome://gpu، يمكنك إيقاف القائمة المحظورة لمحوّلات WebGPU من خلال تفعيل العلامة chrome://flags/#enable-unsafe-webgpu وإعادة تشغيل Chrome.

  4. ما مِن محوّل وحدة معالجة رسومات مطابِق للخيارات التي تم ضبطها في requestAdapter(). حاوِل الاتصال بالرقم requestAdapter() مع تقديم خيارات مختلفة.

  5. تتطلب واجهة برمجة التطبيقات WebGPU وحدة معالجة رسومات (إما أجهزة أو برامج في وضع المحاكاة). يمكنك التحقّق مما إذا رصد Chrome وحدة معالجة رسومات من خلال الانتقال إلى chrome://gpu.

WebGPU أبطأ من WebGL.

  1. افتح chrome://gpu وتأكَّد من أنّه يمكنك قراءة النص "WebGPU: Accelerated Accelerated" (تسريع الأجهزة). في حال قراءة "WebGPU: البرامج فقط، تسريع الأجهزة غير متاح"، قد تحتاج إلى تحديث برامج تشغيل وحدة معالجة الرسومات.

  2. قد لا تستفيد ترجمة مفاهيم WebGL مباشرةً إلى WebGPU من التحسينات الفريدة لـ WebGPU. يمكنك الانتقال إلى الصفحة من WebGL إلى WebGPU للتعرف على بعض الاختلافات.

القيود الخاصة بنظام التشغيل Windows

انتبِه إلى القيود التالية عند استخدام WebGPU على أجهزة Windows:

  • لا يتيح Chrome استخدام عدة محوّلات لوحدة معالجة رسومات في آنٍ واحد. يُرجى الاطّلاع على issue chromium:329211593.

  • يستخدم Chrome دائمًا محول وحدة معالجة الرسومات نفسه الذي تم تخصيصه لأعباء العمل الأخرى في Chrome، والذي يمثل بشكل عام بطاقة الرسومات المدمجة لأجهزة الكمبيوتر المحمولة، وذلك بسبب جانب استخدام الطاقة (أي: توفير الطاقة). وهذا يعني أنّ الخيار powerPreference لن يحدث أي تأثير عند الاتصال بالرقم requestAdapter().