פורסם: 7 בפברואר 2024, עדכון אחרון: 17 באוקטובר 2025
במסמך הזה מוסבר למה יכול להיות ש-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 הוא null
הדוגמה הבאה היא של שגיאת 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 has been disabled via blocklist or the command line' (ה-WebGPU הושבת דרך רשימת החסימה או שורת הפקודה) מופיעה ב-
chrome://gpu
, אפשר להשבית את רשימת החסימה של מתאמי WebGPU על ידי הפעלת הדגלchrome://flags/#enable-unsafe-webgpu
והפעלה מחדש של Chrome. אפשר גם לבטל את רשימת רינדור התוכנה המובנית על ידי הפעלת הדגלchrome://flags/#ignore-gpu-blocklist
והפעלה מחדש של 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()
. אם יש לכם GPU עם ביצועים גבוהים, אתם יכולים להפעיל את הדגלchrome://flags/#force-high-performance-gpu
ולהפעיל מחדש את Chrome כדי להשתמש בו.