יישום וולקן

וולקן הוא תקורה נמוכה, API חוצות פלטפורמות עבור ביצועים גבוהים 3D גרפיקה. כמו OpenGL ES (GLES) , וולקן מספק כלים ליצירת באיכות גבוהה, גרפיקה בזמן אמת ביישומים. יתרונות השימוש וולקן כוללים הפחתות תקורה מעבד ותמיכה ביניים בינארי SPIR-V השפה.

כדי ליישם את Vulkan בהצלחה, מכשיר חייב לכלול:

  • מטעין הוולקן, מסופק על ידי אנדרואיד.
  • נהג Vulkan, שמספקת SoCs כגון GPU IHVs, סככה כי API וולקן . כדי לתמוך בפונקציונליות של Vulkan, מכשיר האנדרואיד זקוק לחומרת GPU התומכת ב-Vulkan ואת מנהל ההתקן המשויך. ה-GPU חייב גם לתמוך ב-GLES 3.1 ומעלה. התייעץ עם ספק ה-SoC שלך כדי לבקש תמיכת מנהלי התקנים.

אם המכשיר כולל הנהג Vulkan, לצרכי התקן להכריז FEATURE_VULKAN_HARDWARE_LEVEL ו FEATURE_VULKAN_HARDWARE_VERSION תכונות המערכת, עם גרסאות כי לשקף במדויק את היכולות של המכשיר. הדבר מסייע להבטיח כי המכשיר תואם עם הגדרת תאימות המסמך (CDD).

מעמיס וולקן

מטעין Vulkan platform/frameworks/native/vulkan הוא הממשק הראשי בין האפליקציות Vulkan ונהג Vulkan של המכשיר. מטעין וולקן מותקן בבית /system/lib[64]/libvulkan.so . המטען מספק את נקודות הכניסה הליבה של Vulkan API, כמו גם את נקודות הכניסה של הרחבות הנדרשות על ידי ה-CDD של Android. הרחבות של שילוב מערכת חלונות (WSI) מיוצאות על ידי המטען ומיושמות בעיקר במטען ולא במנהל ההתקן. המעמיס תומך גם בספירה וטעינה של שכבות שיכולות לחשוף הרחבות נוספות וליירט קריאות ליבה של API בדרכן למנהל ההתקן.

NDK כולל ספח libvulkan.so הספרייה לקישור. הספרייה מייצאת את אותם סמלים כמו המטען. Apps לקרוא את הפונקציות מיוצא מן אמיתי libvulkan.so הספרייה להיכנס פונקציות טרמפולינה בטען, אשר לשגר את השכבה או מנהל ההתקן המתאים המבוסס על הטענה הראשונה שלהם. vkGet*ProcAddr() השיחה מחזירה את פונקציית המצביעים שאלי טרמפולינות לשגר (כלומר, אותו מכנה ישירות לתוך קוד ה- API ליבה). קריאה דרך מצביעי הפונקציות, במקום הסמלים המיוצאים, יעילה יותר מכיוון שהיא מדלגת על הטרמפולינה והמשלוח.

ספירת נהגים וטעינה

כאשר תמונת המערכת נבנית, אנדרואיד מצפה מהמערכת לדעת אילו GPUs זמינים. המטעין משתמש במנגנון HAL קיים hardware.h לגלות לטעון את הנהג. נתיבים מועדפים עבור מנהלי התקנים של וולקן של 32 סיביות ו-64 סיביות הם:

/vendor/lib/hw/vulkan.<ro.hardware.vulkan>.so
/vendor/lib/hw/vulkan.<ro.product.platform>.so
/vendor/lib64/hw/vulkan.<ro.hardware.vulkan>.so
/vendor/lib64/hw/vulkan.<ro.product.platform>.so

בשנת אנדרואיד 7.0 ומעלה, את וולקן hw_module_t נגזרת עוטפת יחיד hw_module_t struct; רק נהג אחד נתמך ואת מחרוזת קבועה HWVULKAN_DEVICE_0 מועבר open() .

Vulkan hw_device_t תואמת נגזרים נהג יחיד שיכול לתמוך התקנים פיזיים מרובים. hw_device_t המבנה יכול להאריך לייצוא vkGetGlobalExtensionProperties() , vkCreateInstance() , ולאחר vkGetInstanceProcAddr() פונקציות. מטעין יכול למצוא כל האחרים VkInstance() , VkPhysicalDevice() , ולאחר vkGetDeviceProcAddr() פונקציות ידי קריאה hw_device_t של מבנה vkGetInstanceProcAddr() .

גילוי וטעינה של שכבות

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

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

מקרי שימוש עבור שכבות כוללים:

  • שכבות פיתוח במשרה - שכבות אימות ו shims לאיתור / פרופיל / כלי באגים לא צריכות להיות מותקנים על תמונת המערכת של מכשירי ייצור. שכבות אימות ו-shims עבור כלי מעקב/פרופילים/ניפוי באגים צריכים להיות ניתנים לעדכון ללא תמונת מערכת. מפתחים שרוצים להשתמש באחת מהשכבות הללו במהלך הפיתוח יכולים לשנות את חבילת האפליקציה, למשל, על ידי הוספת קובץ לספריית הספריות המקוריות שלהם. מהנדסי IHV ו-OEM שרוצים לאבחן כשלים במשלוח של אפליקציות שאינן ניתנות לשינוי, מניחים שיש להם גישה לבנייה לא-ייצור (שורשית) של תמונת המערכת, אלא אם אפליקציות אלו ניתנות לניפוי באגים. לקבלת מידע נוסף, ראה שכבות אימות Vulkan על אנדרואיד .
  • שכבות Utility - שכבות אלה חושפים רחבות, כגון שכבה מיישמת מנהל זיכרון לזיכרון מכשיר. מפתחים בוחרים שכבות, וגרסאות של שכבות אלה, לשימוש באפליקציה שלהם; אפליקציות שונות המשתמשות באותה שכבה עדיין עשויות להשתמש בגרסאות שונות. מפתחים בוחרים איזה מהשכבות הללו לשלוח בחבילת האפליקציה שלהם.
  • שכבות מוזרקות (משתמע) - כוללות שכבות כגון קצב פריימים, רשת חברתית, משחק משגר שכבות מסופקים על ידי המשתמש או כמה אפליקציות אחרות ללא ידיעתו או הסכמתו של האפליקציה. אלה מפרים את מדיניות האבטחה של Android ואינם נתמכים.

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

לגבי אפליקציות ניפוי באגים, החיפושים המטעינים עבור השכבות /data/local/debug/vulkan וניסיונות לטעון כול ספרייה התאמתה דפוס מסוים.

אנדרואיד מאפשרת העברה של שכבות עם שינויים בסביבת הבנייה בין אנדרואיד לפלטפורמות אחרות. לפרטים על הממשק בין שכבות ולטען, לראות ארכיטקטורה של ממשקי Loader וולקן . שכבות אימות מתוחזק Khronos מתארחות שכבות אימות וולקן .

גרסאות ויכולות של Vulkan API

אנדרואיד 9 ומעלה תומכת בגרסת ה-API של Vulkan 1.1. אנדרואיד 7 עד אנדרואיד 9 תומכות בגרסה 1.0 של Vulkan API. לקבלת מידע נוסף על ה- API 1.1 וולקן, לראות את המפרט 1.1 API וולקן .

סקירת תמיכה ב-Vulkan 1.1

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

התכונות החשובות ביותר של Vulkan 1.1 עבור אנדרואיד הן:

  • תמיכה בייבוא ​​וייצוא מאגרי זיכרון וחפצי סנכרון מחוץ לוולקן (לאינטררופ עם מצלמה, קודקים ו-GLES)
  • תמיכה בפורמטים של YCbCr

Vulkan 1.1 כולל גם כמה תכונות קטנות יותר ושיפורי שימושיות API.

יישום Vulkan 1.1

מכשירי אנדרואיד צריכים לתמוך ב-Vulkan 1.1 אם הם:

  • הפעל עם אנדרואיד 10.
  • תמיכה ב-ABI של 64 סיביות.
  • הם לא בעלי זיכרון נמוך.

מכשירים אחרים יכולים לתמוך באופן אופציונלי ב- Vulkan 1.1.

כדי ליישם את Vulkan 1.1:

  1. הוספת נהג Vulkan כי תומך וולקן 1.1 בתוספת אנדרואיד 1.1 נוספות דרישות CDD , או לעדכן את מנהל ההתקן 1.0 וולקן הקיים.
  2. ודא כי PackageManager#hasSystemFeature(PackageManager.FEATURE_VULKAN_HARDWARE_VERSION, 0x401000) מחזיר true על ידי הוספה כלל כמו בדוגמא הבאות אל מתאים device.mk קובץ:
    PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.vulkan.version-1_1.xml:
    $(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.version.xml
    

שילוב מערכת חלונות (WSI)

בשנת libvulkan.so , מיישמת נהג התוספים הבאים אינטגרצית מערכת חלונות (WSI):

  • VK_KHR_surface
  • VK_KHR_android_surface
  • VK_KHR_swapchain
  • VK_KHR_driver_properties , מיושם וולקן 1.1 של אנדרואיד 10 בלבד
  • VK_GOOGLE_display_timing , מיושם עבור כל גרסה Vulkan ב אנדרואיד 10

VkSurfaceKHR ו VkSwapchainKHR חפץ וכול אינטראקציות עם ANativeWindow מטופלות על ידי הפלטפורמה ואינם חשוף נהגים. יישום WSI מסתמך על VK_ANDROID_native_buffer הרחב, אשר חייב להיות נתמך על ידי הנהג; תוסף זה משמש רק את יישום WSI ואינו חשוף לאפליקציות.

דגלי שימוש של Gralloc

מימושים של Vulkan עשויים להזדקק למאגרי swapchain שיוקצו עם דגלי שימוש פרטיים המוגדרים במימוש Gralloc. בעת יצירת swapchain, אנדרואיד מבקש מהנהג לתרגם את דגלי השימוש בפורמט ובתמונות לדגלי השימוש של Gralloc על ידי קריאה:

typedef enum VkSwapchainImageUsageFlagBitsANDROID {
    VK_SWAPCHAIN_IMAGE_USAGE_SHARED_BIT_ANDROID = 0x00000001,
    VK_SWAPCHAIN_IMAGE_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VkSwapchainImageUsageFlagBitsANDROID;
typedef VkFlags VkSwapchainImageUsageFlagsANDROID;

VkResult VKAPI vkGetSwapchainGrallocUsage2ANDROID(
    VkDevice                          device,
    VkFormat                          format,
    VkImageUsageFlags                 imageUsage,
    VkSwapchainImageUsageFlagsANDROID swapchainUsage,
    uint64_t*                         grallocConsumerUsage,
    uint64_t*                         grallocProducerUsage
);

format ו imageUsage פרמטרים נלקחים מן VkSwapchainCreateInfoKHR המבנה. הנהג צריך למלא *grallocConsumerUsage ו *grallocProducerUsage עם דגלי השימוש Gralloc הנדרשים בפורמט והשימוש. דגלי השימוש המוחזרים על ידי הנהג משולבים עם דגלי השימוש המבוקש על ידי צרכן ה-swapchain בעת הקצאת מאגרים.

7.x אנדרואיד מכנה בגירסה קודמת של VkSwapchainImageUsageFlagsANDROID() , בשם vkGetSwapchainGrallocUsageANDROID() . אנדרואיד 8.0 ומעלה deprecates vkGetSwapchainGrallocUsageANDROID() אבל עדיין קורא vkGetSwapchainGrallocUsageANDROID() אם vkGetSwapchainGrallocUsage2ANDROID() אינו מסופק על ידי הנהג:

VkResult VKAPI vkGetSwapchainGrallocUsageANDROID(
    VkDevice            device,
    VkFormat            format,
    VkImageUsageFlags   imageUsage,
    int*                grallocUsage
);

vkGetSwapchainGrallocUsageANDROID() איננו תומך דגלי שימוש swapchain או דגלי שימוש Gralloc מורחבים.

תמונות מגובות Gralloc

VkNativeBufferANDROID הוא vkCreateImage מבנה רחב ליצירת דימוי מגובה Gralloc החיץ. VkNativeBufferANDROID מסופק vkCreateImage() ב VkImageCreateInfo שרשרת המבנה. שיחות vkCreateImage() עם VkNativeBufferANDROID לקרות במהלך השיחה כדי vkCreateSwapchainKHR . יישום WSI מקצה את מספר מאגרים מקומיים ביקשו עבור swapchain, אז יוצר VkImage עבור כל אחד מהם:

typedef struct {
    VkStructureType             sType; // must be VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID
    const void*                 pNext;

    // Buffer handle and stride returned from gralloc alloc()
    buffer_handle_t             handle;
    int                         stride;

    // Gralloc format and usage requested when the buffer was allocated.
    int                         format;
    int                         usage;
    // Beginning in Android 8.0, the usage field above is deprecated and the
    // usage2 struct below was added. The usage field is still filled in for
    // compatibility with Android 7.0 drivers. Drivers for Android 8.0
    // should prefer the usage2 struct, especially if the
    // android.hardware.graphics.allocator HAL uses the extended usage bits.
    struct {
        uint64_t                consumer;
        uint64_t                producer;
    } usage2;
} VkNativeBufferANDROID;

בעת יצירת תמונה מגובה-Gralloc, VkImageCreateInfo יש את הנתונים הבאים:

  .sType               = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO
  .pNext               = the above VkNativeBufferANDROID structure
  .imageType           = VK_IMAGE_TYPE_2D
  .format              = a VkFormat matching the format requested for the gralloc buffer
  .extent              = the 2D dimensions requested for the gralloc buffer
  .mipLevels           = 1
  .arraySize           = 1
  .samples             = 1
  .tiling              = VK_IMAGE_TILING_OPTIMAL
  .usage               = VkSwapchainCreateInfoKHR::imageUsage
  .flags               = 0
  .sharingMode         = VkSwapchainCreateInfoKHR::imageSharingMode
  .queueFamilyCount    = VkSwapchainCreateInfoKHR::queueFamilyIndexCount
  .pQueueFamilyIndices = VkSwapchainCreateInfoKHR::pQueueFamilyIndices

בשנת אנדרואיד 8.0 ומעלה, הפלטפורמה מספקת VkSwapchainImageCreateInfoKHR מבנה שלוח VkImageCreateInfo שרשרת ניתן vkCreateImage כאשר כול דגלי שימוש תמונת swapchain נדרשים עבור swapchain. מבנה ההרחבה מכיל את דגלי השימוש בתמונות swapchain:

typedef struct {
    VkStructureType                        sType; // must be VK_STRUCTURE_TYPE_SWAPCHAIN_IMAGE_CREATE_INFO_ANDROID
    const void*                            pNext;

    VkSwapchainImageUsageFlagsANDROID      usage;
} VkSwapchainImageCreateInfoANDROID;

בשנת אנדרואיד 10 ומעלה, הפלטפורמה תומכת VK_KHR_swapchain V70, לכן האפליקציה וולקן הוא מסוגל ליצור VkImage בגיבוי זיכרון swapchain. האפליקציה הראשונה קוראת vkCreateImage עם VkImageSwapchainCreateInfoKHR מבנה כבול אל VkImageCreateInfo המבנה. לאחר מכן היישום קורא vkBindImageMemory2(KHR) עם VkBindImageMemorySwapchainInfoKHR מבנה כבול אל VkBindImageMemoryInfo המבנה. imageIndex המפורט VkBindImageMemorySwapchainInfoKHR המבנה חייב להיות אינדקס תמונות swapchain תקף. בינתיים, הפלטפורמה מספקת VkNativeBufferANDROID מבנה רחב עם מידע חיץ Gralloc המתאים VkBindImageMemoryInfo השרשרת, כך שהנהג יודע אילו Gralloc חיץ לחייב את VkImage עם.

רכישת תמונות

vkAcquireImageANDROID רוכש בעלות על התמונה swapchain ויבוא גדר ילידי אותת חיצונית לשני קיים VkSemaphore אובייקט קיים VkFence האובייקט:

VkResult VKAPI vkAcquireImageANDROID(
    VkDevice            device,
    VkImage             image,
    int                 nativeFenceFd,
    VkSemaphore         semaphore,
    VkFence             fence
);

vkAcquireImageANDROID() נקרא במהלך vkAcquireNextImageKHR לייבא גדר ילידים לתוך VkSemaphore ו VkFence אובייקטים שסופק על ידי האפליקציה (אולם, הוא האובייקטים סמפור וגדר הם אופציונליים השיחה הזאת). מנהל ההתקן עשוי גם להשתמש בהזדמנות זו כדי לזהות ולטפל בכל שינוי חיצוני במצב המאגר של Gralloc; נהגים רבים לא יצטרכו לעשות כאן שום דבר. שמה קוראים לזה VkSemaphore ו VkFence לאותה מדינה בהמתנה כאילו סימנה ידי vkQueueSubmit , כך התורים יכול לחכות על סמפור ואת היישום יכול לחכות על הגדר.

שני העצמים מקבלים איתות כאשר הגדר המקומית הבסיסית מאותתת; אם הגדר המקורית כבר אותתה, אז הסמפור נמצא במצב האות כאשר הפונקציה הזו חוזרת. הנהג לוקח בעלות על מתאר קובץ הגדר וסוגר את מתאר קובץ הגדר כאשר אין צורך יותר. הנהג חייב לעשות זאת גם אם לא חפץ סמפור או גדר מסופק, או אפילו אם vkAcquireImageANDROID נכשל וחוזר שגיאה. אם fenceFd הוא -1, זה כאילו הגדר המקורית כבר אותתה.

משחררים תמונות

vkQueueSignalReleaseImageANDROID מכין תמונת swapchain לשימוש חיצוני, יוצר גדר ילידים, ולוחות זמני גדר הילידים להיות אותתו לאחר סמפורים הקלט אותתו:

VkResult VKAPI vkQueueSignalReleaseImageANDROID(
    VkQueue             queue,
    uint32_t            waitSemaphoreCount,
    const VkSemaphore*  pWaitSemaphores,
    VkImage             image,
    int*                pNativeFenceFd
);

vkQueuePresentKHR() קורא vkQueueSignalReleaseImageANDROID() על התור מסופק. הנהג חייב לייצר גדר ילידים שאינו לאותת עד שכול waitSemaphoreCount סמפורים ב pWaitSemaphores לאותת, וכול עבודה נוספת הנדרשת כדי להכין image עבור משלים מצגת.

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

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

אם התמונה נוצרה עם VK_SWAPCHAIN_IMAGE_USAGE_SHARED_BIT_ANDROID , אז הנהג חייב לאפשר vkQueueSignalReleaseImageANDROID() כדי להיקרא שוב ושוב אך ללא התערבות שיחות vkAcquireImageANDROID() .

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

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

אם הנהג אינו תומך או וולקן 1.1 או VK_KHR_physical_device_properties2 רחב, המטעין לא לפרסם תמיכה עבור תמונות ייצוגיות משותפות. אחרת, את טוען מתשאל את יכולות נהג על ידי התקשרות vkGetPhysicalDeviceProperties2() וכולל המבנה הבא VkPhysicalDeviceProperties2::pNext השרשרת:

typedef struct {
    VkStructureType sType; // must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_ANDROID
    const void*     pNext;
    VkBool32        sharedImage;
} VkPhysicalDevicePresentationPropertiesANDROID;

אם הנהג יכול לחלוק את הבעלות של תמונה עם מערכת התצוגה, זה קובע את sharedImage חבר VK_TRUE .

מַתַן תוֹקֵף

יצרני OEM יכולים לבדוק את יישום Vulkan שלהם באמצעות CTS, הכולל:

  • בדיקות התאמת Khronos Vulkan ב CtsDeqpTestCases מודול, הכוללות בדיקות API פונקציונליות עבור וולקן 1.0 ו 1.1.
  • CtsGraphicsTestCases מודול, הבודקת כי המכשיר מוגדר כהלכה עבור יכולות וולקן הוא תומך.

דגל תכונת וולקן

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

תאריך בצורת YYYY-MM-DD מקודד כמספר שלם של 32 סיביות באופן הבא:

  • Bits 0-15 מאחסן את השנה
  • Bits 16-23 מאחסנים את החודש
  • Bits 24-31 מאחסן את היום

הערך המינימלי המותר עבור הדגל התכונה 0x07E30301 , אשר תואמת את תאריך 2019/03/01, שהינו מועד הקשורים בדיקות Vulkan dEQP עבור אנדרואיד 10. אם הדגל התכונה הוא לפחות ערך זה, הטענות המכשיר לעבור את כל מבחני אנדרואיד 10 Vulkan dEQP.

ערך 0x07E40301 תואמת לתאריך 2020/03/01, שהינו מועד הקשורים בדיקות Vulkan dEQP עבור אנדרואיד 11. אם הדגל התכונה הוא לפחות ערך זה, הטענות למכשיר לעבור את כל הבדיקות אנדרואיד 11 וולקן dEQP.

אם הערך דגל התכונה לפחות 0x07E30301 אבל פחות 0x07E40301 , משמעות הדבר היא כי טענות מכשיר לעבור את כל הבדיקות אנדרואיד 10 וולקן dEQP אך אינו מובטח לעבור בדיקות Vulkan dEQP שנוספו עבור אנדרואיד 11.

Vulkan dEQP מהווה חלק מ-Android CTS. מ אנדרואיד 11, הרכיב המריץ בדיקת dEQP של CTS מודע android.software.vulkan.deqp.level דגל התכונה, ומדלג כול בדיקות Vulkan dEQP כי - על פי דגל תכונה זו - המכשיר איננו מתיימר תמיכה. מבחנים כאלה מדווחים כעמידים באופן טריוויאלי.