vkinfo: Enable VK_EXT_debug_report if available

Change-Id: I58ba2f0be075b14286198d66eb7acb00c37b75e1
(cherry picked from commit 36783b098580b7f590a117e97dccf66bb11e44fd)
diff --git a/vulkan/tools/vkinfo.cpp b/vulkan/tools/vkinfo.cpp
index 5f4253e..8abd160 100644
--- a/vulkan/tools/vkinfo.cpp
+++ b/vulkan/tools/vkinfo.cpp
@@ -14,6 +14,8 @@
  * limitations under the License.
  */
 
+#include <algorithm>
+#include <array>
 #include <inttypes.h>
 #include <stdlib.h>
 #include <sstream>
@@ -21,6 +23,7 @@
 
 #define VK_PROTOTYPES
 #include <vulkan/vulkan.h>
+#include <vulkan/vk_ext_debug_report.h>
 
 #define LOG_TAG "vkinfo"
 #include <log/log.h>
@@ -69,6 +72,14 @@
     exit(1);
 }
 
+bool HasExtension(const std::vector<VkExtensionProperties>& extensions,
+                  const char* name) {
+    return std::find_if(extensions.cbegin(), extensions.cend(),
+                        [=](const VkExtensionProperties& prop) {
+                            return strcmp(prop.extensionName, name) == 0;
+                        }) != extensions.end();
+}
+
 void EnumerateInstanceExtensions(
     const char* layer_name,
     std::vector<VkExtensionProperties>* extensions) {
@@ -127,10 +138,25 @@
                                     &info->layer_extensions[i]);
     }
 
-    VkInstance instance;
+    const std::array<const char*, 1> kDesiredExtensions = {
+        {VK_EXT_DEBUG_REPORT_EXTENSION_NAME},
+    };
+    const char* extensions[kDesiredExtensions.size()];
+    uint32_t num_extensions = 0;
+    for (const auto& desired_ext : kDesiredExtensions) {
+        bool available = HasExtension(info->extensions, desired_ext);
+        for (size_t i = 0; !available && i < info->layer_extensions.size(); i++)
+            available = HasExtension(info->layer_extensions[i], desired_ext);
+        if (available)
+            extensions[num_extensions++] = desired_ext;
+    }
+
     const VkInstanceCreateInfo create_info = {
         .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
+        .enabledExtensionCount = num_extensions,
+        .ppEnabledExtensionNames = extensions,
     };
+    VkInstance instance;
     result = vkCreateInstance(&create_info, nullptr, &instance);
     if (result != VK_SUCCESS)
         die("vkCreateInstance", result);