layers: MR221: Add Enumerate for Android
authorCourtney Goeltzenleuchter <courtneygo@google.com>
Fri, 12 Feb 2016 20:30:20 +0000 (13:30 -0700)
committerJon Ashburn <jon@lunarg.com>
Thu, 18 Feb 2016 21:48:52 +0000 (14:48 -0700)
Android does not use json files to store layer and
extension information and needs to query it directly
from the layer.

layers/threading.cpp

index 032e7c8..ef23a80 100644 (file)
@@ -193,10 +193,16 @@ VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(VkDevice device, cons
     layer_data_map.erase(key);
 }
 
+static const VkExtensionProperties threading_extensions[] = {
+    {
+        VK_EXT_DEBUG_REPORT_EXTENSION_NAME,
+        VK_EXT_DEBUG_REPORT_SPEC_VERSION
+    }
+};
 
 VK_LAYER_EXPORT VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pCount,  VkExtensionProperties* pProperties)
 {
-    return util_GetExtensionProperties(0, NULL, pCount, pProperties);
+    return util_GetExtensionProperties(ARRAY_SIZE(threading_extensions), threading_extensions, pCount, pProperties);
 }
 
 static const VkLayerProperties globalLayerProps[] = {
@@ -223,6 +229,28 @@ static const VkLayerProperties deviceLayerProps[] = {
     }
 };
 
+VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(
+        VkPhysicalDevice physicalDevice,
+        const char *pLayerName,
+        uint32_t *pCount,
+        VkExtensionProperties* pProperties)
+{
+    if (pLayerName == NULL) {
+        dispatch_key key = get_dispatch_key(physicalDevice);
+        layer_data *my_data = get_my_data_ptr(key, layer_data_map);
+        return my_data->instance_dispatch_table->EnumerateDeviceExtensionProperties(
+                                                    physicalDevice,
+                                                    NULL,
+                                                    pCount,
+                                                    pProperties);
+    } else {
+        // Threading layer does not have any device extensions
+        return util_GetExtensionProperties(0,
+                                           nullptr,
+                                           pCount, pProperties);
+    }
+}
+
 VK_LAYER_EXPORT VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t *pCount, VkLayerProperties* pProperties)
 {
     return util_GetLayerProperties(ARRAY_SIZE(deviceLayerProps), deviceLayerProps, pCount, pProperties);
@@ -252,6 +280,8 @@ static inline PFN_vkVoidFunction layer_intercept_instance_proc(const char *name)
         return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
     if (!strcmp(name, "EnumerateInstanceLayerProperties"))
         return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
+    if (!strcmp(name, "EnumerateDeviceExtensionProperties"))
+        return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
     if (!strcmp(name, "EnumerateDeviceLayerProperties"))
         return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
     if (!strcmp(name, "CreateDevice"))