[Mesa-dev] [PATCH] Vulkan: Add VK_ANDROID_native_buffer to device extension list

Xu, Randy randy.xu at intel.com
Wed Mar 1 04:26:51 UTC 2017


Hi, Jason

The device_extensions array is used to screen the ppEnabledExtensionNames in vkCreateDevice. The Android app passes the VK_ANDROID_native_buffer and will cause VK_ERROR_EXTENSION_NOT_PRESENT error w/o this patch.

Btw, anv_CreateDevice function is called by Android Vulkan framework through dispatch table directly, not intercepted by Vulkan HAL.

VkResult anv_CreateDevice(
    VkPhysicalDevice                            physicalDevice,
    const VkDeviceCreateInfo*                   pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkDevice*                                   pDevice)
{
   ANV_FROM_HANDLE(anv_physical_device, physical_device, physicalDevice);
   VkResult result;
   struct anv_device *device;

   assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO);

   for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) {
      bool found = false;
      for (uint32_t j = 0; j < ARRAY_SIZE(device_extensions); j++) {
         if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
                    device_extensions[j].extensionName) == 0) {
            found = true;
            break;
         }
      }
      if (!found)
         return vk_error(VK_ERROR_EXTENSION_NOT_PRESENT);
   }

Thanks,
Randy
From: Jason Ekstrand [mailto:jason at jlekstrand.net]
Sent: Wednesday, March 1, 2017 12:17 PM
To: Xu, Randy <randy.xu at intel.com>
Cc: mesa-dev at lists.freedesktop.org
Subject: Re: [Mesa-dev] [PATCH] Vulkan: Add VK_ANDROID_native_buffer to device extension list

On Tue, Feb 28, 2017 at 7:52 PM, Randy Xu <randy.xu at intel.com<mailto:randy.xu at intel.com>> wrote:
The VK_ANDROID_native_buffer is implemented in Android Vulkan HAL,
not driver, but must be claimed in device extension list. Otherwise,
this extension will be screened off in framework and driver.

This seems rather odd.  Can't the Vulkan HAL just hook into vkEnumerateDeviceExtensionProperties and add it to the list there?  It seems a bit odd to advertise an extension but not actually provide any of the functionality.
Test: Pass Vulkan dEQP-VK.wsi.android.swapchain.* on Android platform

Signed-off-by: Randy Xu <randy.xu at intel.com<mailto:randy.xu at intel.com>>
---
 Android.common.mk<http://Android.common.mk>             | 3 +++
 src/intel/vulkan/anv_device.c | 9 +++++++++
 2 files changed, 12 insertions(+)

diff --git a/Android.common.mk<http://Android.common.mk> b/Android.common.mk<http://Android.common.mk>
index 611162a..f49189b 100644
--- a/Android.common.mk<http://Android.common.mk>
+++ b/Android.common.mk<http://Android.common.mk>
@@ -116,6 +116,9 @@ else
   LOCAL_CFLAGS += -DDEFAULT_DRIVER_DIR=\"/system/lib/$(MESA_DRI_MODULE_REL_PATH)\"
 endif

+# Enable VK_ANDROID_native_buffer
+LOCAL_CFLAGS += -DVK_USE_PLATFORM_ANDROID_KHR
+
 # uncomment to keep the debug symbols
 #LOCAL_STRIP_MODULE := false

diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index 0db96f2..478d753 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -258,6 +258,15 @@ static const VkExtensionProperties device_extensions[] = {
       .extensionName = VK_KHR_MAINTENANCE1_EXTENSION_NAME,
       .specVersion = 1,
    },
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+   {
+      // Refer https://source.android.com/devices/graphics/implement-vulkan.html
+      // "Window System Integration (WSI) extensions are exported by the loader
+      //  and primarily implemented in it rather than the driver."
+      .extensionName = "VK_ANDROID_native_buffer",

In the other places, we use the EXTENSION_NAME #define

+      .specVersion = 1,
+   },
+#endif
    {
       .extensionName = VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME,
       .specVersion = 1,
--
2.7.4

_______________________________________________
mesa-dev mailing list
mesa-dev at lists.freedesktop.org<mailto:mesa-dev at lists.freedesktop.org>
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170301/e3e287c0/attachment.html>


More information about the mesa-dev mailing list