במסמך הזה מוסבר למה WebGPU לא פעיל או לא פועל כצפוי בדפדפן Chrome, כולל שלבים ברורים לפתרון הבעיות כשזה אפשרי.
navigator.gpu לא מוגדר
בדוגמה הבאה מוצגת שגיאת JavaScript שעלולה להופיע כש-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 ריק
הדוגמה הבאה היא של שגיאת JavaScript שעלולה להופיע כשהמתאם שמקבלים משליחת קריאה אל requestAdapter()
הוא null:
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 ב-Headless Chrome.חומרת ה-GPU נוספה לרשימת חסימה באופן ספציפי. אם מופיעה ההודעה "WebGPU הושבת דרך רשימת חסימה או שורת הפקודה" ב-
chrome://gpu
אפשר להשבית את רשימת החסימה של מתאמי WebGPU על ידי הפעלת הדגלchrome://flags/#enable-unsafe-webgpu
והפעלה מחדש של Chrome.אין מתאם GPU תואם לאפשרויות שהועברו ב-
requestAdapter()
. אפשר לנסות להתקשר אלrequestAdapter()
עם אפשרויות אחרות.ל-WebGPU נדרש GPU (אמולציה של חומרה או תוכנה). כדי לבדוק אם Chrome מזהה GPU, אפשר להיכנס לכתובת
chrome://gpu
.
WebGPU איטי יותר מ-WebGL
פותחים את
chrome://gpu
ומוודאים שהאפשרות "WebGPU: Hardware Accelerated (האצת חומרה)". אם קוראים את ההודעה "WebGPU: תוכנה בלבד, שיפור המהירות באמצעות חומרה לא זמין", יכול להיות שצריך לעדכן את מנהלי ההתקנים של ה-GPU.יכול להיות שתרגום ישיר של מושגי WebGL ל-WebGPU לא ינצל את מלוא האופטימיזציה של WebGPU. כדאי לעיין במאמר מ-WebGL ל-WebGPU כדי ללמוד על כמה מההבדלים ביניהם.
מגבלות ספציפיות ל-Windows
חשוב לשים לב למגבלות הבאות כשמשתמשים ב-WebGPU במכשירי Windows:
Chrome לא תומך בשימוש במספר מתאמי GPU בו-זמנית. ראו בעיה ב-chromium:329211593.
Chrome משתמש תמיד באותו מתאם GPU שהוקצה לעומסי עבודה אחרים של Chrome. במחשבים ניידים הוא בדרך כלל כרטיס הגרפיקה המשולב, בגלל היבט השימוש בחשמל (כלומר, חיסכון בחשמל). המשמעות היא שהאפשרות
powerPreference
לא משפיעה כשמתקשרים אלrequestAdapter()
.