WebGPU: טיפים ותיקונים לפתרון בעיות

François Beaufort
François Beaufort

פורסם: 7 בפברואר 2024, עדכון אחרון: 17 באוקטובר 2025

במסמך הזה מוסבר למה יכול להיות ש-WebGPU לא פועל או לא פועל כצפוי בדפדפן Chrome, ומפורטים בו שלבים ברורים לפתרון הבעיות, אם אפשר.

בדוגמה הבאה מוצגת שגיאת JavaScript שיכולה להתקבל כש-gpu לא זמין ב-navigator:

const adapter = await navigator.gpu.requestAdapter();
cancel Uncaught TypeError: Cannot read properties of undefined (reading 'requestAdapter')

יכולות להיות לכך כמה סיבות: כדאי לבדוק את המאפיינים האלה בסדר הזה:

  1. כדי להשתמש ב-WebGPU, צריך Chrome מגרסה 113 ואילך ב-ChromeOS, ב-macOS וב-Windows, ו-Chrome מגרסה 121 ואילך ב-Android. בודקים את הגרסה בכתובת chrome://version ומעדכנים אותה אם צריך.

  2. הגישה ל-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)

זה קורה בגלל אחת מהסיבות הבאות. כדאי לבדוק את המאפיינים האלה בסדר הזה:

  1. ההגדרה WebGPU מושבתת אם המשתמש השבית את האפשרות 'שימוש בהאצת גרפיקה כשהאפשרות זמינה' ב-chrome://settings/system. בודקים אם ההגדרה הזו מושבתת ומפעילים אותה מחדש

  2. הפלטפורמה הזו עדיין לא תומכת ב-WebGPU. אפשר להפעיל את התכונה הניסיונית chrome://flags/#enable-unsafe-webgpu ולהפעיל מחדש את Chrome. כדי להפעיל תמיכה ניסיונית ב-Linux, צריך גם להפעיל את הדגל chrome://flags/#enable-vulkan. מידע נוסף זמין במאמר תמיכה ב-WebGPU ב-Headless Chrome.

  3. החומרה של ה-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.

  4. אין מתאם GPU תואם לאפשרויות שהועברו ב-requestAdapter(). רוצה לנסות להתקשר אל requestAdapter() עם אפשרויות אחרות?

  5. כדי להשתמש ב-WebGPU, צריך GPU (חומרה או אמולציה של תוכנה). כדי לבדוק אם Chrome מזהה GPU, אפשר להיכנס לכתובת chrome://gpu.

  6. תהליך ה-GPU קרס כמה פעמים. אפשר לטעון מחדש את הדף או להפעיל מחדש את Chrome. מידע נוסף זמין במאמר שיטות מומלצות לטיפול באובדן מכשיר WebGPU.

‫WebGPU איטי יותר מ-WebGL

  1. פותחים את chrome://gpu ומוודאים שאפשר לקרוא את הטקסט 'WebGPU: Hardware accelerated'. אם מופיע הכיתוב 'WebGPU: תוכנה בלבד, האצת חומרה לא זמינה', יכול להיות שצריך לעדכן את הדרייברים של ה-GPU.

  2. תרגום ישיר של מושגי 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 כדי להשתמש בו.