במסמך הזה מוסבר למה יכול להיות ש-WebGPU לא יפעל או לא יפעל כצפוי בדפדפן Chrome, ומוצגים בו שלבים ברורים לפתרון הבעיות, במידת האפשר.
navigator.gpu הוא undefined
בדוגמה הבאה מוצגת שגיאת 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()
.