מסמך זה מסביר מדוע 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 מ-Service Worker או מ-worker משותף. אם אתם משתמשים ב-Service Worker או ב-Shared worker, צריך להעביר את קוד ה-WebGPU ל-worker ייעודי או להקשר של החלון הגלובלי.
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: האצת חומרה'. אם כתוב "WebGPU: תוכנה בלבד, שיפור מהירות באמצעות חומרה לא זמין", יכול להיות שצריך לעדכן את מנהלי ההתקנים של ה-GPU.תרגום ישיר של מושגי WebGL ל-WebGPU עלול לא לנצל את מלוא היתרונות של האופטימיזציות הייחודיות של WebGPU. בקטע מ-WebGL ל-WebGPU תוכלו ללמוד על כמה מההבדלים ביניהם.
מגבלות ספציפיות ל-Windows
שימו לב למגבלות הבאות בזמן השימוש ב-WebGPU במכשירי Windows:
Chrome לא תומך בשימוש במספר מתאמי GPU בו-זמנית. מידע נוסף על בעיה כרום:329211593.
Chrome משתמש תמיד באותו מתאם GPU שהוקצה לעומסי עבודה אחרים של Chrome. מחשבים ניידים הוא בדרך כלל הכרטיס הגרפי המשולב, בשל היבט צריכת החשמל (כלומר, חיסכון בחשמל). כלומר, לאפשרות
powerPreference
אין השפעה כשמתקשרים אלrequestAdapter()
.