כלים ותכונות מתקדמות

כלי ניפוי באגים

ניפוי באגים באמצעות שכבת האימות

‫Vulkan מיועד לביצועים גבוהים ולתקורה נמוכה של מנהל ההתקן. כדי להשיג את זה, כברירת מחדל הוא כולל רק יכולות מוגבלות מאוד של בדיקת שגיאות וניפוי באגים. אם תעשו משהו לא נכון, יכול להיות שהדרייבר יקרוס במקום להחזיר קוד שגיאה, או אפילו גרוע מכך, יכול להיות שהוא יפעל בכרטיס המסך שלכם אבל ייכשל לחלוטין בכרטיסים אחרים.

כדי להפעיל בדיקות מקיפות במהלך הפיתוח, Vulkan מספקת שכבות אימות, שהן קטעי קוד שאפשר להוסיף בין ה-API לבין מנהל ההתקן של הגרפיקה. השכבות האלה מאפשרות לבצע פעולות כמו הפעלת בדיקות נוספות על פרמטרים של פונקציות ומעקב אחרי בעיות בניהול הזיכרון. אפשר להפעיל שכבות אימות במהלך הפיתוח ולהשבית אותן לגמרי כשמפרסמים את האפליקציה ללא תקורה.

כל אחד יכול לכתוב שכבות אימות, אבל Khronos מספקת קבוצה סטנדרטית אחת שנקראת VK_LAYER_KHRONOS_validation. כדי להפעיל את שכבת האימות באפליקציה, אפשר לעיין במאמר Vulkan validation layers on Android (שכבות אימות של Vulkan ב-Android) בדף Android NDK.

RenderDoc

‫RenderDoc הוא עוד כלי בקוד פתוח שמאפשר לכם לצלם פריים לבדיקה ולניתוח. זהו כלי עוצמתי מאוד שמתכנתי גרפיקה משתמשים בו כדי לנפות באגים בסצנות שהם מציגים. הוא תומך ב-Vulkan ב-Android בצורה טובה, אבל כדי שהוא יפעל צריך להגדיר את האפליקציה כניתנת לניפוי באגים.

במאמר איך משתמשים ב-RenderDoc ב-Android מוסבר איך להגדיר את הכלי ולהשתמש בו באפליקציית Android.

ספריות של צילום מסך / הפעלה מחדש

GFXReconstruct

‫GFXReconstruct הוא פרויקט קוד פתוח שמספק כלים ללכידה ולהפעלה מחדש של קריאות ל-API של גרפיקה שמבוצעות על ידי אפליקציה. אפשר להפעיל מחדש את הנתונים שתועדו כדי לשחזר את ההתנהגות הספציפית של הגרפיקה באפליקציה שצולמה. אחד היתרונות העיקריים של GFXReconstruct הוא שאפשר להשתמש בו באפליקציה שפורסמה (כשמשביתים את android:debuggable).

מידע נוסף זמין במאגר הפרויקט. מידע על הגדרה ושימוש ב-Vulkan ב-Android זמין במאמר GFXReconstruct API Capture and Replay for Android.

חשוב לזכור שאי אפשר להעביר את קובצי העקבות, כלומר אי אפשר לצלם את הקובץ במכשיר אחד ולהפעיל אותו במכשיר אחר (עם גרסת מערכת הפעלה, ערכות שבבים או אפילו גרסת מנהל התקן שונות).

כלי לניתוח ביצועים (profiler)

‫Android GPU Inspector‏ (AGI)

‫Android GPU Inspector‏ (AGI) הוא כלי ליצירת פרופילים של גרפיקה שנוצר ל-Android וכולל פרופיל מערכת וכלי ליצירת פרופילים של פריימים. הוא מספק מידע פרופיל ברמה גבוהה שמאפשר לכם להבין את פרופיל הביצועים של המשחק ולזהות צווארי בקבוק.

כדי להוריד את AGI וללמוד איך להשתמש בו, אפשר לעיין באתר Android GPU Inspector.

‫Profiler ב-Android Studio

‫Android Studio Profiler הוא כלי שימושי ליצירת פרופיל של ביצועי האפליקציה. עם זאת, הוא לא מיועד במיוחד ליצירת פרופיל של גרפיקה. הוא כולל את הכלים הבאים: CPU Profiler, ‏ Memory Profiler, ‏ Network Profiler, ‏ Energy Profiler, ‏ Power Profiler ו-Event Monitor.

מידע נוסף על הגדרה ושימוש ב-Android Studio Profiler זמין בקטע ניתוח פרופיל הביצועים של האפליקציה.

כלי פרופיל של OEM

הכלים שבקטע הזה ספציפיים ל-OEM, ויכול להיות שהם לא יפעלו במכשירים שמריצים שבבים אחרים.

‫ARM Performance Studio for Mobile

Arm Performance Studio for Mobile הוא השם החדש של Arm Mobile Studio. זהו חבילת כלים שכוללת את Graphics Analyzer ו-Frame Advisor, והיא עוזרת לכם לזהות ולפתור בעיות ביצועים במעבדים גרפיים של ARM.

מידע נוסף זמין באתר Arm Performance Studio for Mobile.

‫ARM PerfDoc for Mali GPUs

PerfDoc היא שכבת Vulkan שפותחה כדי לאמת אפליקציות בהתאם לשיטות המומלצות של ARM ל-GPU של Mali. מאז, הוא מוזג ל-VK_LAYER_KHRONOS_validation והוא למעשה חלק משכבות האימות הרגילות של Vulkan.

מידע על השימוש בכלי הזה זמין בקטע ניפוי באגים באמצעות שכבת אימות.

Qualcomm Snapdragon Profiler

‫Qualcomm Snapdragon Profiler היא תוכנת פרופילים שפותחה על ידי Qualcomm עבור מפתחי אפליקציות. התוכנה מאפשרת לנתח את הביצועים של מעבד (CPU), מעבד גרפי (GPU), מעבד אותות דיגיטלי (DSP), זיכרון, צריכת חשמל, טמפרטורה ורשת, כדי לזהות צווארי בקבוק בערכות השבבים.

מידע נוסף זמין במאמר בנושא Snapdragon Profiler ב-Qualcomm Developer Network.

Samsung GPUWatch

GPUWatch של Samsung הוא כלי לצפייה בפעילות של GPU במכשירי Samsung. בניגוד לכלים אחרים, אפשר להשתמש בכלי הזה ישירות מהמכשיר הנייד, כך שהוא מאוד שימושי לבדיקת ביצועי האפליקציה באופן מיידי, גם כשאין לכם גישה למחשב מארח אחר.

מידע נוסף על הפעלת התכונה זמין במדריך למשתמש.

PVRTune

PVRTune של Imagination Technologies מאפשר למפתחים ליצור פרופילים של אפליקציות בחומרה של PowerVR בזמן אמת, עם מגוון רחב של מוניטורים ומדדים. הוא גם מאפשר לשמור את הסשן לצורך ניתוח נוסף ברמה נמוכה ולזיהוי צווארי בקבוק בביצועים.

מידע נוסף על השימוש ב-PVRTune זמין במדריך.

כלי העברה

המרת הצללות מ-GLSL ל-SPIR-V

‫Vulkan API מצפה שתוכניות Shader יסופקו בפורמט הביניים הבינארי SPIR-V. המוסכמה הזו שונה מ-OpenGL ES, שבו אפשר לשלוח קוד מקור שנכתב ב-OpenGL Shading Language (GLSL) כמחרוזות טקסט.

‫NDK r12 ואילך כולל ספריית זמן ריצה להידור של הצללות GLSL ל-SPIR-V, שאפשר להשתמש בהן ב-Vulkan. אפשר להשתמש בקומפיילר shaderc כדי לקמפל תוכניות shader שנכתבו ב-GLSL ל-SPIR-V. אם המשחק שלכם משתמש ב-HLSL, הקומפיילר DirectXShaderCompiler תומך בפלט SPIR-V.

בדרך כלל, צריך לקמפל תוכניות Shader באופן אופליין כחלק מתהליך בניית הנכסים של המשחק, ולכלול את מודולי ה-SPIR-V כחלק מנכסי זמן הריצה.

מידע נוסף על תהליך הקומפילציה של Shader באפליקציית Vulkan זמין במאמר Vulkan shader compilers on Android בקטע Android NDK.

תכונות מתקדמות

שילוב של Android Frame Pacing במעבד התצוגה של Vulkan

ספריית Android Frame Pacing (שנקראת גם Swappy) עוזרת למשחקי Vulkan להשיג רינדור חלק וקצב פריימים נכון, כדי לשמור על סנכרון בין לולאת הרינדור של המשחק לבין מערכת המשנה של התצוגה במערכת ההפעלה וחומרת התצוגה הבסיסית.

קצב נכון של הצגת הפריימים מבטל חפצים חזותיים שנקראים 'קריעה', מבצע אופטימיזציה של צריכת החשמל באמצעות סנכרון בין רענוני התצוגה לבין הצגת הפריימים, ומבטל גם תנודות על ידי ייצוב קצב הפריימים. מידע נוסף על החשיבות של קצב פריימים אחיד זמין בקטע Frame Pacing Library (ספריית קצב הפריימים) ב-AGDK.

מידע נוסף על שילוב של קצב פריימים אחיד במשחק זמין במאמר שילוב של קצב פריימים אחיד ב-Android במעבד התמונה של Vulkan.

טיפול בהטיית המכשיר באמצעות סיבוב מראש של Vulkan

יכול להיות שיהיה צורך לשלם על טיפול בסיבוב של Surface מחוץ לאפליקציה. גם במכשירים מתקדמים מסוימים עם יחידת עיבוד ייעודית לתצוגה (DPU), עדיין סביר להניח שתהיה פגיעה מדידה בביצועים, וההשפעה תהיה תלויה בשאלה אם האפליקציה מוגבלת על ידי המעבד או על ידי המעבד הגרפי.

‫Vulkan מאפשר למפתחים לציין הרבה יותר מידע למכשירים על מצב העיבוד בהשוואה ל-OpenGL. אחד מהם הוא הכיוון של המכשיר והקשר שלו לכיוון של משטח העיבוד. היכולת הזו מאפשרת לכם להטמיע סיבוב מראש כדי להפיק את המרב מ-Vulkan ב-Android.

מידע נוסף על טיפול יעיל בסיבוב המכשיר באפליקציית Vulkan זמין במאמר טיפול בכיוון המכשיר באמצעות סיבוב מראש ב-Vulkan ובאפליקציית ההדגמה הנלווית.

אופטימיזציה עם דיוק מופחת

לפורמט המספרי של נתונים גרפיים ולחישובי הצללה יכולה להיות השפעה משמעותית על ביצועי המשחק. רוב החישובים והנתונים בגרפיקה תלת-ממדית מודרנית מבוססים על מספרים עם נקודה עשרונית. ‫Vulkan ב-Android משתמש במספרים עם נקודה עשרונית בגודל 32 או 16 ביט. מספר נקודה צפה (floating point) של 32 ביט נקרא בדרך כלל דיוק יחיד או דיוק מלא. למרות שסוג הנקודה הצפה של 64 ביט מוגדר ב-Vulkan, הוא לא נתמך בדרך כלל ולא מומלץ להשתמש בו.

במאמר אופטימיזציה עם דיוק מופחת מוסבר איך לבצע אופטימיזציה של אפליקציית Vulkan כדי להשיג את הביצועים הכי טובים בפעולות החשבון.