diff --git a/src/simplevk.cpp b/src/simplevk.cpp index 70dcb306792..583b8b0bde4 100644 --- a/src/simplevk.cpp +++ b/src/simplevk.cpp @@ -63,15 +63,19 @@ PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = 0; int load_vulkan_driver(const char* /*driver_path*/) { - ncnn::vkEnumerateInstanceExtensionProperties = ::vkEnumerateInstanceExtensionProperties; - ncnn::vkCreateInstance = ::vkCreateInstance; - ncnn::vkGetInstanceProcAddr = ::vkGetInstanceProcAddr; + vkEnumerateInstanceExtensionProperties = ::vkEnumerateInstanceExtensionProperties; + vkCreateInstance = ::vkCreateInstance; + vkGetInstanceProcAddr = ::vkGetInstanceProcAddr; return 0; } int unload_vulkan_driver() { + vkEnumerateInstanceExtensionProperties = 0; + vkCreateInstance = 0; + vkGetInstanceProcAddr = 0; + return 0; } @@ -629,6 +633,10 @@ int load_vulkan_driver(const char* driver_path) int unload_vulkan_driver() { + vkEnumerateInstanceExtensionProperties = 0; + vkCreateInstance = 0; + vkGetInstanceProcAddr = 0; + #if defined _WIN32 if (g_libvulkan) { diff --git a/src/simplevk.h b/src/simplevk.h index 84d6a5fff42..6b0ad8c7689 100644 --- a/src/simplevk.h +++ b/src/simplevk.h @@ -2187,8 +2187,13 @@ extern PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionPr extern PFN_vkCreateInstance vkCreateInstance; extern PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr; -int load_vulkan_driver(const char* driver_path); +// Load vulkan driver dynamic library when driver_path is provided +// Load from env VK_ICD_FILENAMES and NCNN_VULKAN_DRIVER otherwise +// If failed, it will try system libvulkan and well-known library names +// The three vulkan base function pointers will be set on success +int load_vulkan_driver(const char* driver_path = 0); +// Unload vulkan driver library and clear int unload_vulkan_driver(); } // namespace ncnn