From: Mark Young Date: Wed, 29 Dec 2021 20:39:21 +0000 (-0700) Subject: Fix debug utils wrapping in tests X-Git-Tag: upstream/v1.3.207~113 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=efb8b8f9c110fcaa7e69d984a1cef70d3789748c;p=platform%2Fupstream%2FVulkan-Loader.git Fix debug utils wrapping in tests Also fix another compiler warning. --- diff --git a/tests/framework/icd/test_icd.cpp b/tests/framework/icd/test_icd.cpp index f9708230..4b9ef54c 100644 --- a/tests/framework/icd/test_icd.cpp +++ b/tests/framework/icd/test_icd.cpp @@ -240,9 +240,13 @@ VKAPI_ATTR void VKAPI_CALL test_vkDestroyDebugUtilsMessengerEXT(VkInstance insta const VkAllocationCallbacks* pAllocator) { if (messenger != VK_NULL_HANDLE) { uint64_t fake_msgr_handle = (uint64_t)(messenger); - auto found_iter = icd.messenger_handles.erase( - std::remove(icd.messenger_handles.begin(), icd.messenger_handles.end(), fake_msgr_handle), icd.messenger_handles.end()); - if (found_iter == icd.messenger_handles.end()) { + auto found_iter = std::find(icd.messenger_handles.begin(), icd.messenger_handles.end(), fake_msgr_handle); + if (found_iter != icd.messenger_handles.end()) { + // Remove it from the list + icd.messenger_handles.erase(found_iter); + // Delete the handle + delete (uint8_t*)fake_msgr_handle; + } else { assert(false && "Messenger not found during destroy!"); } } @@ -992,11 +996,9 @@ PFN_vkVoidFunction get_instance_func_wsi(VkInstance instance, const char* pName) } if (IsInstanceExtensionEnabled(VK_EXT_DEBUG_UTILS_EXTENSION_NAME)) { if (string_eq(pName, "vkCreateDebugUtilsMessengerEXT")) { - icd.is_using_icd_wsi = UsingICDProvidedWSI::is_using; return TO_VOID_PFN(test_vkCreateDebugUtilsMessengerEXT); } if (string_eq(pName, "vkDestroyDebugUtilsMessengerEXT")) { - icd.is_using_icd_wsi = UsingICDProvidedWSI::is_using; return TO_VOID_PFN(test_vkDestroyDebugUtilsMessengerEXT); } } diff --git a/tests/framework/layer/wrap_objects.cpp b/tests/framework/layer/wrap_objects.cpp index 8d520a25..8d67bab1 100644 --- a/tests/framework/layer/wrap_objects.cpp +++ b/tests/framework/layer/wrap_objects.cpp @@ -59,6 +59,11 @@ struct wrapped_dev_obj { void *obj; }; +struct wrapped_debutil_mess_obj { + VkInstance inst; + VkDebugUtilsMessengerEXT obj; +}; + // typedef std::unordered_map device_table_map; // typedef std::unordered_map instance_table_map; typedef void *dispatch_key; @@ -73,6 +78,11 @@ VkPhysicalDevice unwrap_phys_dev(const VkPhysicalDevice physical_device, wrapped return reinterpret_cast((*phys_dev)->obj); } +VkDebugUtilsMessengerEXT unwrap_debutil_messenger(const VkDebugUtilsMessengerEXT messenger, wrapped_debutil_mess_obj **mess) { + *mess = reinterpret_cast(messenger); + return (*mess)->obj; +} + dispatch_key get_dispatch_key(const void *object) { return (dispatch_key) * (VkLayerDispatchTable **)object; } template @@ -190,7 +200,13 @@ VKAPI_ATTR VkResult VKAPI_CALL wrap_vkCreateDebugUtilsMessengerEXT(VkInstance in wrapped_inst_obj *inst; auto vk_inst = unwrap_instance(instance, &inst); VkLayerInstanceDispatchTable *pDisp = &inst->layer_disp; - return pDisp->CreateDebugUtilsMessengerEXT(vk_inst, pCreateInfo, pAllocator, pMessenger); + VkResult result = pDisp->CreateDebugUtilsMessengerEXT(vk_inst, pCreateInfo, pAllocator, pMessenger); + auto mess = new wrapped_debutil_mess_obj; + if (!mess) return VK_ERROR_OUT_OF_HOST_MEMORY; + memset(mess, 0, sizeof(*mess)); + mess->obj = (*pMessenger); + *pMessenger = reinterpret_cast(mess); + return result; } VKAPI_ATTR void VKAPI_CALL wrap_vkDestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT messenger, @@ -198,7 +214,10 @@ VKAPI_ATTR void VKAPI_CALL wrap_vkDestroyDebugUtilsMessengerEXT(VkInstance insta wrapped_inst_obj *inst; auto vk_inst = unwrap_instance(instance, &inst); VkLayerInstanceDispatchTable *pDisp = &inst->layer_disp; - pDisp->DestroyDebugUtilsMessengerEXT(vk_inst, messenger, pAllocator); + wrapped_debutil_mess_obj *mess; + auto vk_mess = unwrap_debutil_messenger(messenger, &mess); + pDisp->DestroyDebugUtilsMessengerEXT(vk_inst, vk_mess, pAllocator); + delete mess; } VKAPI_ATTR void VKAPI_CALL wrap_vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface, @@ -417,19 +436,14 @@ VKAPI_ATTR VkResult VKAPI_CALL wrap_vkEnumerateDeviceExtensionProperties(VkPhysi return phys_dev->inst->layer_disp.EnumerateDeviceExtensionProperties(vk_phys_dev, pLayerName, pPropertyCount, pProperties); } -PFN_vkVoidFunction layer_intercept_proc(const char *name) { +PFN_vkVoidFunction layer_intercept_device_proc(const char *name) { if (!name || name[0] != 'v' || name[1] != 'k') return NULL; name += 2; - if (!strcmp(name, "CreateInstance")) return (PFN_vkVoidFunction)wrap_vkCreateInstance; - if (!strcmp(name, "DestroyInstance")) return (PFN_vkVoidFunction)wrap_vkDestroyInstance; - if (!strcmp(name, "EnumeratePhysicalDevices")) return (PFN_vkVoidFunction)vkEnumeratePhysicalDevices; if (!strcmp(name, "GetPhysicalDeviceQueueFamilyProperties")) return (PFN_vkVoidFunction)wrap_vkGetPhysicalDeviceQueueFamilyProperties; if (!strcmp(name, "CreateDevice")) return (PFN_vkVoidFunction)wrap_vkCreateDevice; if (!strcmp(name, "DestroyDevice")) return (PFN_vkVoidFunction)wrap_vkDestroyDevice; - if (!strcmp(name, "CreateDebugUtilsMessengerEXT")) return (PFN_vkVoidFunction)wrap_vkCreateDebugUtilsMessengerEXT; - if (!strcmp(name, "DestroyDebugUtilsMessengerEXT")) return (PFN_vkVoidFunction)wrap_vkDestroyDebugUtilsMessengerEXT; return NULL; } @@ -438,10 +452,13 @@ PFN_vkVoidFunction layer_intercept_instance_proc(const char *name) { if (!name || name[0] != 'v' || name[1] != 'k') return NULL; name += 2; - if (!strcmp(name, "GetInstanceProcAddr")) return (PFN_vkVoidFunction)wrap_vkCreateInstance; if (!strcmp(name, "DestroyInstance")) return (PFN_vkVoidFunction)wrap_vkDestroyInstance; + if (!strcmp(name, "CreateDevice")) return (PFN_vkVoidFunction)wrap_vkCreateDevice; if (!strcmp(name, "EnumeratePhysicalDevices")) return (PFN_vkVoidFunction)vkEnumeratePhysicalDevices; + if (!strcmp(name, "CreateDebugUtilsMessengerEXT")) return (PFN_vkVoidFunction)wrap_vkCreateDebugUtilsMessengerEXT; + if (!strcmp(name, "DestroyDebugUtilsMessengerEXT")) return (PFN_vkVoidFunction)wrap_vkDestroyDebugUtilsMessengerEXT; + if (!strcmp(name, "GetPhysicalDeviceProperties")) return (PFN_vkVoidFunction)vkGetPhysicalDeviceProperties; if (!strcmp(name, "GetPhysicalDeviceQueueFamilyProperties")) return (PFN_vkVoidFunction)wrap_vkGetPhysicalDeviceQueueFamilyProperties; @@ -503,7 +520,7 @@ VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL wrap_vkGetDeviceProcAddr(VkDevice devic return (PFN_vkVoidFunction)wrap_vkGetDeviceProcAddr; } - addr = layer_intercept_proc(funcName); + addr = layer_intercept_device_proc(funcName); if (addr) return addr; if (device == VK_NULL_HANDLE) { return NULL; @@ -520,8 +537,8 @@ VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL wrap_vkGetDeviceProcAddr(VkDevice devic VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL wrap_vkGetInstanceProcAddr(VkInstance instance, const char *funcName) { PFN_vkVoidFunction addr; + if (!strcmp(funcName, "vkGetInstanceProcAddr")) return (PFN_vkVoidFunction)wrap_vkGetInstanceProcAddr; if (!strcmp(funcName, "vkCreateInstance")) return (PFN_vkVoidFunction)wrap_vkCreateInstance; - if (!strcmp(funcName, "vkCreateDevice")) return (PFN_vkVoidFunction)wrap_vkCreateDevice; if (instance == VK_NULL_HANDLE) { return NULL; diff --git a/tests/loader_handle_validation_tests.cpp b/tests/loader_handle_validation_tests.cpp index 8ca26a93..b6aacbbc 100644 --- a/tests/loader_handle_validation_tests.cpp +++ b/tests/loader_handle_validation_tests.cpp @@ -2175,20 +2175,16 @@ static VkBool32 JunkDebugUtilsCallback(VkDebugUtilsMessageSeverityFlagBitsEXT me return VK_FALSE; } -#if 0 // Disable for now to get this commit in TEST_F(LoaderHandleValidTests, VerifyHandleWrappingDebugUtilsMessenger) { Extension ext{"VK_EXT_debug_utils"}; auto& driver = env->get_test_icd(); driver.add_instance_extensions({ext}); const char* wrap_objects_name = "WrapObjectsLayer"; - ManifestLayer::LayerDescription wrap_objects_description{}; - wrap_objects_description.name = wrap_objects_name; - wrap_objects_description.lib_path = TEST_LAYER_WRAP_OBJECTS; - - ManifestLayer wrap_objects_layer; - wrap_objects_layer.layers.push_back(wrap_objects_description); - env->AddExplicitLayer(wrap_objects_layer, "wrap_objects_layer.json"); + env->add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), + "wrap_objects_layer.json"); driver.physical_devices.emplace_back("physical_device_0"); MockQueueFamilyProperties family_props{{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, true}; @@ -2216,4 +2212,3 @@ TEST_F(LoaderHandleValidTests, VerifyHandleWrappingDebugUtilsMessenger) { ASSERT_EQ(VK_SUCCESS, pfn_CreateMessenger(instance, &debug_messenger_create_info, nullptr, &messenger)); pfn_DestroyMessenger(instance, messenger, nullptr); } -#endif \ No newline at end of file diff --git a/tests/loader_version_tests.cpp b/tests/loader_version_tests.cpp index 4214e122..4d9a7952 100644 --- a/tests/loader_version_tests.cpp +++ b/tests/loader_version_tests.cpp @@ -68,7 +68,7 @@ TEST_F(EnvVarICDOverrideSetup, version_1_icd_gipa) { // should assert that `interface_vers == 0` due to version mismatch, only checkable in Debug Mode TEST_F(EnvVarICDOverrideSetup, version_negotiate_interface_version_death_test) { env->add_icd(TestICDDetails(TEST_ICD_PATH_EXPORT_NEGOTIATE_INTERFACE_VERSION).set_use_env_var_icd_filenames(true)); - auto& driver = env->reset_icd(); + env->reset_icd(); InstWrapper inst{env->vulkan_functions};