diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2016-06-24 09:57:32 -0600 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2016-06-29 09:19:54 -0600 |
| commit | 12e39c2ec5e5251bc02c20dc640b17bbcf073d17 (patch) | |
| tree | 4009ab46a780c377f588d31296d0bdaf67940ec4 /layers | |
| parent | 232cba4976761d364d2081e123749dbaf7e213ad (diff) | |
| download | usermoji-12e39c2ec5e5251bc02c20dc640b17bbcf073d17.tar.xz | |
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
Diffstat (limited to 'layers')
| -rw-r--r-- | layers/object_tracker.h | 50 | ||||
| -rw-r--r-- | layers/unique_objects.h | 5 |
2 files changed, 47 insertions, 8 deletions
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<void *, struct instExts> instanceExtMap; +static std::unordered_map<void *, struct instance_extension_enables> instanceExtMap; static std::unordered_map<void *, layer_data *> 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 diff --git a/layers/unique_objects.h b/layers/unique_objects.h index 9abf240c..942724f1 100644 --- a/layers/unique_objects.h +++ b/layers/unique_objects.h @@ -54,7 +54,7 @@ struct layer_data { layer_data() : wsi_enabled(false), gpu(VK_NULL_HANDLE){}; }; -struct instExts { +struct instance_extension_enables { bool wsi_enabled; bool xlib_enabled; bool xcb_enabled; @@ -64,7 +64,7 @@ struct instExts { bool win32_enabled; }; -static std::unordered_map<void *, struct instExts> instanceExtMap; +static std::unordered_map<void *, struct instance_extension_enables> instanceExtMap; static std::unordered_map<void *, layer_data *> layer_data_map; static device_table_map unique_objects_device_table_map; static instance_table_map unique_objects_instance_table_map; @@ -115,6 +115,7 @@ static void createInstanceRegisterExtensions(const VkInstanceCreateInfo *pCreate #endif // VK_USE_PLATFORM_ANDROID_KHR instanceExtMap[pDisp] = {}; + for (i = 0; i < pCreateInfo->enabledExtensionCount; i++) { if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SURFACE_EXTENSION_NAME) == 0) instanceExtMap[pDisp].wsi_enabled = true; |
