این سند توضیح میدهد که چرا WebGPU ممکن است در مرورگر Chrome غیرقابل اجرا باشد یا آنطور که انتظار میرود کار نکند، با گامهای روشن برای حل مشکلات در صورت امکان.
navigator.gpu تعریف نشده است
مثال زیر یک خطای جاوا اسکریپت را نشان می دهد که ممکن است زمانی که gpu
در navigator
در دسترس نیست، دریافت کنید:
const adapter = await navigator.gpu.requestAdapter();
cancel Uncaught TypeError: Cannot read properties of undefined (reading 'requestAdapter')
این ممکن است به دلیل یکی از دلایل زیر باشد. آنها را به این ترتیب خاص بررسی کنید:
WebGPU به Chrome 113 یا بالاتر در ChromeOS، macOS، Windows و Chrome 121 یا بالاتر در Android نیاز دارد. نسخه خود را در
chrome://version
بررسی کنید و در صورت لزوم بهروزرسانی کنید.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 در معرض اینترنت قرار دهید.
آداپتور GPU پوچ است
در زیر نمونهای از خطای جاوا اسکریپت است که ممکن است وقتی آداپتوری که از فراخوانی requestAdapter()
دریافت میکنید، تهی باشد:
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
cancel Uncaught TypeError: Cannot read properties of undefined (reading requestDevice)
این به یکی از دلایل زیر رخ می دهد. آنها را به این ترتیب خاص بررسی کنید:
وقتی کاربر «استفاده از شتاب گرافیکی در صورت موجود بودن» را در
chrome://settings/system
خاموش کرده باشد، WebGPU غیرفعال میشود. بررسی کنید که آیا این تنظیم خاموش است یا خیر و دوباره آن را روشن کنیدWebGPU هنوز در این پلتفرم پشتیبانی نمی شود. می توانید پرچم
chrome://flags/#enable-unsafe-webgpu
فعال کرده و کروم را مجددا راه اندازی کنید. برای پشتیبانی آزمایشی لینوکس، باید پرچمchrome://flags/#enable-vulkan
نیز فعال کنید. برای کسب اطلاعات بیشتر، پشتیبانی WebGPU را در Headless Chrome بررسی کنید.سخت افزار GPU به طور خاص در لیست بلوک قرار گرفته است. اگر «WebGPU از طریق فهرست مسدود یا خط فرمان غیرفعال شده است» را در
chrome://gpu
میبینید، میتوانید با فعال کردن پرچمchrome://flags/#enable-unsafe-webgpu
و راهاندازی مجدد Chrome، فهرست مسدودکنندههای آداپتورهای WebGPU را غیرفعال کنید.هیچ آداپتور GPU منطبقی برای گزینه های ارسال شده در
requestAdapter()
وجود ندارد. سعی کنیدrequestAdapter()
با گزینه های مختلف فراخوانی کنید .WebGPU به یک GPU (چه سخت افزاری و چه نرم افزاری شبیه سازی شده) نیاز دارد. با مراجعه به
chrome://gpu
میتوانید بررسی کنید که آیا کروم یک GPU را تشخیص میدهد.
WebGPU کندتر از WebGL است
chrome://gpu
را باز کنید و مطمئن شوید که میتوانید «WebGPU: Hardware Accelerated» را بخوانید. اگر «WebGPU: فقط نرم افزار، شتاب سخت افزاری در دسترس نیست» را می خوانید، ممکن است لازم باشد درایورهای GPU خود را به روز کنید.ترجمه مستقیم مفاهیم WebGL به WebGPU ممکن است از بهینه سازی منحصر به فرد WebGPU استفاده کامل نداشته باشد. از WebGL به WebGPU را بررسی کنید تا در مورد برخی از تفاوتهای آنها بیاموزید.
محدودیت های خاص ویندوز
هنگام استفاده از WebGPU در دستگاه های ویندوز، از محدودیت های زیر آگاه باشید:
Chrome از چند آداپتور GPU به طور همزمان پشتیبانی نمی کند. به شماره chromium:329211593 مراجعه کنید.
Chrome همیشه از همان آداپتور GPU استفاده می کند که برای بارهای کاری دیگر Chrome اختصاص داده شده است، که برای لپ تاپ ها به دلیل جنبه مصرف انرژی (یعنی صرفه جویی در انرژی) معمولاً کارت گرافیک یکپارچه است. این بدان معناست که گزینه
powerPreference
هیچ تاثیری هنگام فراخوانیrequestAdapter()
ندارد.