يوضح هذا المستند سبب عدم عمل WebGPU أو عدم عمله على النحو المتوقَّع في متصفِّح Chrome، مع تقديم خطوات واضحة لحل المشاكل حيثما أمكن.
navigator.gpu غير معرَّفة
يوضّح المثال التالي خطأ JavaScript قد يظهر لك عند عدم توفّر gpu
في navigator
:
const adapter = await navigator.gpu.requestAdapter();
cancel Uncaught TypeError: Cannot read properties of undefined (reading 'requestAdapter')
وقد يرجع ذلك إلى أحد الأسباب التالية. تحقق من هذه الخيارات بالترتيب المحدد:
تتطلّب واجهة برمجة التطبيقات WebGPU استخدام الإصدار 113 من Chrome أو الإصدارات الأحدث على أنظمة التشغيل ChromeOS وmacOS وWindows وChrome 121 أو الإصدارات الأحدث على أنظمة التشغيل Android. تحقق من الإصدار على
chrome://version
وقم بتحديثه إذا لزم الأمر.لا يمكن حاليًا الوصول إلى WebGPU من أحد مشغّلي الخدمات أو عاملين مشترَكين. في حال الاستعانة بمشغِّل خدمات أو عامل مشترك، عليك نقل رمز WebGPU إلى عامل مخصَّص أو إلى سياق النافذة العامة.
لا يمكن الوصول إلى 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)
ويحدث ذلك لأحد الأسباب التالية. تحقق من هذه الخيارات بالترتيب المحدد:
يتم إيقاف WebGPU عندما يوقِف المستخدم ميزة "استخدام تسريع الرسومات عند توفُّرها" في
chrome://settings/system
. التأكد ممّا إذا كان هذا الخيار غير مفعَّل وإعادة تفعيلهتنسيق WebGPU غير متوافق مع هذا النظام الأساسي حتى الآن. يمكنك تفعيل العلامة
chrome://flags/#enable-unsafe-webgpu
وإعادة تشغيل Chrome. بالنسبة إلى الدعم التجريبي لنظام التشغيل Linux، عليك أيضًا تفعيل العلامةchrome://flags/#enable-vulkan
. اطّلِع على دعم WebGPU في Chrome بلا واجهة مستخدم رسومية لمزيد من المعلومات.لقد تم حظر أجهزة وحدة معالجة الرسومات على وجه التحديد. إذا ظهرت لك رسالة "تم إيقاف WebGPU من خلال القائمة المحظورة أو سطر الأوامر" في
chrome://gpu
، يمكنك إيقاف القائمة المحظورة لمحوّلات WebGPU من خلال تفعيل العلامةchrome://flags/#enable-unsafe-webgpu
ثم إعادة تشغيل Chrome.ما مِن محوِّل وحدة معالجة رسومات مطابق للخيارات التي تم تمريرها في
requestAdapter()
. جرِّب الاتصال بالرقمrequestAdapter()
باستخدام خيارات مختلفة.تتطلّب WebGPU وحدة معالجة رسومات (إما أجهزة أو برامج في وضع محاكاة). يمكنك التحقق مما إذا كان Chrome اكتشف وحدة معالجة رسومات من خلال الانتقال إلى
chrome://gpu
.
WebGPU أبطأ من WebGL
افتح
chrome://gpu
وتأكَّد من أنّه يمكنك قراءة "WebGPU: تسريع الأجهزة". إذا ظهرت لك الرسالة "WebGPU: البرامج فقط، لا يتوفّر تسريع الأجهزة"، قد تحتاج إلى تحديث برامج تشغيل وحدة معالجة الرسومات.قد لا تستفيد ترجمة مفاهيم WebGL بشكل مباشر إلى WebGPU من التحسينات الفريدة في WebGPU بشكل كامل. راجِع من WebGL إلى WebGPU للتعرّف على بعض الاختلافات بينهما.
القيود الخاصة بنظام التشغيل Windows
انتبِه إلى القيود التالية عند استخدام WebGPU على أجهزة تعمل بنظام التشغيل Windows:
لا يسمح Chrome باستخدام محوّلات متعددة لوحدة معالجة الرسومات في وقتٍ واحد. راجِع المشكلة chromium:329211593.
يستخدم Chrome دائمًا محوّل وحدة معالجة الرسومات نفسه الذي تم تخصيصه لأعباء العمل الأخرى في Chrome، والتي تكون بشكل عام بطاقة الرسومات المدمجة في أجهزة الكمبيوتر المحمولة، بسبب جانب استخدام الطاقة (أي توفير الطاقة). ويعني هذا أنّه لن يكون للخيار
powerPreference
أي تأثير عند طلب الرقمrequestAdapter()
.