Fix debug utils wrapping in tests
authorMark Young <marky@lunarg.com>
Wed, 29 Dec 2021 20:39:21 +0000 (13:39 -0700)
committerMark Young <marky@lunarg.com>
Fri, 7 Jan 2022 23:56:38 +0000 (16:56 -0700)
Also fix another compiler warning.

tests/framework/icd/test_icd.cpp
tests/framework/layer/wrap_objects.cpp
tests/loader_handle_validation_tests.cpp
tests/loader_version_tests.cpp

index f97082305cd71d5be0d1c9f8e459166af8c779e2..4b9ef54c8fb94ece5c2117e1ec51800ab97b4cbc 100644 (file)
@@ -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);
         }
     }
index 8d520a2502aa10537206b3a69059a4c82aa3b997..8d67bab1ac36f11dd8f014970c5fb4ce88fc1640 100644 (file)
@@ -59,6 +59,11 @@ struct wrapped_dev_obj {
     void *obj;
 };
 
+struct wrapped_debutil_mess_obj {
+    VkInstance inst;
+    VkDebugUtilsMessengerEXT obj;
+};
+
 // typedef std::unordered_map<void *, VkLayerDispatchTable *> device_table_map;
 // typedef std::unordered_map<void *, VkLayerInstanceDispatchTable *> instance_table_map;
 typedef void *dispatch_key;
@@ -73,6 +78,11 @@ VkPhysicalDevice unwrap_phys_dev(const VkPhysicalDevice physical_device, wrapped
     return reinterpret_cast<VkPhysicalDevice>((*phys_dev)->obj);
 }
 
+VkDebugUtilsMessengerEXT unwrap_debutil_messenger(const VkDebugUtilsMessengerEXT messenger, wrapped_debutil_mess_obj **mess) {
+    *mess = reinterpret_cast<wrapped_debutil_mess_obj *>(messenger);
+    return (*mess)->obj;
+}
+
 dispatch_key get_dispatch_key(const void *object) { return (dispatch_key) * (VkLayerDispatchTable **)object; }
 
 template <typename T>
@@ -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<VkDebugUtilsMessengerEXT>(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;
index 8ca26a93694feee08fe4f3fd1173d0eca40e5059..b6aacbbcfa1ff8055c1af07f9306dc3e031b9aa7 100644 (file)
@@ -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
index 4214e1228aab68beb9aac80e6b930ee1be726f14..4d9a795266535918e625bdc214af408b5e1a7f52 100644 (file)
@@ -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};