From 12e39c2ec5e5251bc02c20dc640b17bbcf073d17 Mon Sep 17 00:00:00 2001 From: Mark Lobodzinski Date: Fri, 24 Jun 2016 09:57:32 -0600 Subject: layers: GH618, Correct WSI exension flag usage Object_tracker had no notion of individual WSI extension flags, and unique_objects was not checking them. Change-Id: I93c1aa0c324aa602717f36e2975120dba8bc364e --- layers/object_tracker.h | 50 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 44 insertions(+), 6 deletions(-) (limited to 'layers/object_tracker.h') diff --git a/layers/object_tracker.h b/layers/object_tracker.h index 333775ae..7c00c249 100644 --- a/layers/object_tracker.h +++ b/layers/object_tracker.h @@ -89,11 +89,17 @@ struct layer_data { tmp_dbg_create_infos(nullptr), tmp_callbacks(nullptr){}; }; -struct instExts { +struct instance_extension_enables { bool wsi_enabled; + bool xlib_enabled; + bool xcb_enabled; + bool wayland_enabled; + bool mir_enabled; + bool android_enabled; + bool win32_enabled; }; -static std::unordered_map instanceExtMap; +static std::unordered_map instanceExtMap; static std::unordered_map layer_data_map; static device_table_map object_tracker_device_table_map; static instance_table_map object_tracker_instance_table_map; @@ -135,7 +141,6 @@ static void createDeviceRegisterExtensions(const VkDeviceCreateInfo *pCreateInfo } static void createInstanceRegisterExtensions(const VkInstanceCreateInfo *pCreateInfo, VkInstance instance) { - uint32_t i; VkLayerInstanceDispatchTable *pDisp = get_dispatch_table(object_tracker_instance_table_map, instance); PFN_vkGetInstanceProcAddr gpa = pDisp->GetInstanceProcAddr; @@ -178,11 +183,44 @@ static void createInstanceRegisterExtensions(const VkInstanceCreateInfo *pCreate pDisp->CreateAndroidSurfaceKHR = (PFN_vkCreateAndroidSurfaceKHR)gpa(instance, "vkCreateAndroidSurfaceKHR"); #endif // VK_USE_PLATFORM_ANDROID_KHR - instanceExtMap[pDisp].wsi_enabled = false; - for (i = 0; i < pCreateInfo->enabledExtensionCount; i++) { - if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SURFACE_EXTENSION_NAME) == 0) + instanceExtMap[pDisp] = {}; + + for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) { + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SURFACE_EXTENSION_NAME) == 0) { instanceExtMap[pDisp].wsi_enabled = true; + } +#ifdef VK_USE_PLATFORM_XLIB_KHR + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_XLIB_SURFACE_EXTENSION_NAME) == 0) { + instanceExtMap[pDisp].xlib_enabled = true; + } +#endif +#ifdef VK_USE_PLATFORM_XCB_KHR + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_XCB_SURFACE_EXTENSION_NAME) == 0) { + instanceExtMap[pDisp].xcb_enabled = true; + } +#endif +#ifdef VK_USE_PLATFORM_WAYLAND_KHR + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME) == 0) { + instanceExtMap[pDisp].wayland_enabled = true; + } +#endif +#ifdef VK_USE_PLATFORM_MIR_KHR + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_MIR_SURFACE_EXTENSION_NAME) == 0) { + instanceExtMap[pDisp].mir_enabled = true; + } +#endif +#ifdef VK_USE_PLATFORM_ANDROID_KHR + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_ANDROID_SURFACE_EXTENSION_NAME) == 0) { + instanceExtMap[pDisp].android_enabled = true; + } +#endif +#ifdef VK_USE_PLATFORM_WIN32_KHR + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_WIN32_SURFACE_EXTENSION_NAME) == 0) { + instanceExtMap[pDisp].win32_enabled = true; + } +#endif } + } // Indicate device or instance dispatch table type -- cgit v1.2.3