במסמך הזה מוסבר למה יכול להיות ש-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 ב-Chrome ללא ממשק משתמש.חומרת ה-GPU נוספה באופן ספציפי לרשימת החסימה. אם מופיעה ההודעה 'WebGPU הושבת באמצעות רשימת החסימות או שורת הפקודה' בקובץ
chrome://gpu
, אפשר להשבית את רשימת החסימות של מתאמי WebGPU על ידי הפעלת הדגלchrome://flags/#enable-unsafe-webgpu
והפעלה מחדש של Chrome.אין מתאם GPU תואם לאפשרויות שהועברו ב-
requestAdapter()
. אפשר לנסות להתקשר אלrequestAdapter()
עם אפשרויות אחרות.ל-WebGPU נדרש GPU (אמולציית חומרה או תוכנה). כדי לבדוק אם Chrome מזהה GPU, אפשר להיכנס לכתובת
chrome://gpu
.תהליך ה-GPU קרס כמה פעמים. אפשר לטעון מחדש את הדף או להפעיל מחדש את Chrome. למידע נוסף, אפשר לעיין במאמר שיטות מומלצות לאובדן מכשיר WebGPU.
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()
.