@@ -1819,6 +1819,7 @@ VkResult loader_scanned_icd_add(const struct loader_instance *inst, struct loade
18191819 loader_log (inst , VULKAN_LOADER_ERROR_BIT , 0 ,
18201820 "loader_scanned_icd_add: ICD %s doesn't support interface version compatible with loader, skip this ICD." ,
18211821 filename );
1822+ res = VK_ERROR_INCOMPATIBLE_DRIVER ;
18221823 goto out ;
18231824 }
18241825
@@ -1836,6 +1837,7 @@ VkResult loader_scanned_icd_add(const struct loader_instance *inst, struct loade
18361837 "loader_scanned_icd_add: ICD %s reports an interface version of %d but doesn't export "
18371838 "vk_icdGetInstanceProcAddr, skip this ICD." ,
18381839 filename , interface_vers );
1840+ res = VK_ERROR_INCOMPATIBLE_DRIVER ;
18391841 goto out ;
18401842 }
18411843 // Use deprecated interface from version 0
@@ -1845,6 +1847,7 @@ VkResult loader_scanned_icd_add(const struct loader_instance *inst, struct loade
18451847 "loader_scanned_icd_add: Attempt to retrieve either \'vkGetInstanceProcAddr\' or "
18461848 "\'vk_icdGetInstanceProcAddr\' from ICD %s failed." ,
18471849 filename );
1850+ res = VK_ERROR_INCOMPATIBLE_DRIVER ;
18481851 goto out ;
18491852 } else {
18501853 loader_log (inst , VULKAN_LOADER_WARN_BIT , 0 ,
@@ -1856,6 +1859,7 @@ VkResult loader_scanned_icd_add(const struct loader_instance *inst, struct loade
18561859 if (NULL == fp_create_inst ) {
18571860 loader_log (inst , VULKAN_LOADER_ERROR_BIT , 0 ,
18581861 "loader_scanned_icd_add: Failed querying \'vkCreateInstance\' via dlsym/LoadLibrary for ICD %s" , filename );
1862+ res = VK_ERROR_INCOMPATIBLE_DRIVER ;
18591863 goto out ;
18601864 }
18611865 fp_get_inst_ext_props = loader_platform_get_proc_address (handle , "vkEnumerateInstanceExtensionProperties" );
@@ -1864,6 +1868,7 @@ VkResult loader_scanned_icd_add(const struct loader_instance *inst, struct loade
18641868 "loader_scanned_icd_add: Could not get \'vkEnumerateInstanceExtensionProperties\' via dlsym/LoadLibrary "
18651869 "for ICD %s" ,
18661870 filename );
1871+ res = VK_ERROR_INCOMPATIBLE_DRIVER ;
18671872 goto out ;
18681873 }
18691874 } else {
@@ -1879,6 +1884,7 @@ VkResult loader_scanned_icd_add(const struct loader_instance *inst, struct loade
18791884 loader_log (inst , VULKAN_LOADER_ERROR_BIT , 0 ,
18801885 "loader_scanned_icd_add: Could not get \'vkCreateInstance\' via \'vk_icdGetInstanceProcAddr\' for ICD %s" ,
18811886 filename );
1887+ res = VK_ERROR_INCOMPATIBLE_DRIVER ;
18821888 goto out ;
18831889 }
18841890 fp_get_inst_ext_props =
@@ -1888,6 +1894,7 @@ VkResult loader_scanned_icd_add(const struct loader_instance *inst, struct loade
18881894 "loader_scanned_icd_add: Could not get \'vkEnumerateInstanceExtensionProperties\' via "
18891895 "\'vk_icdGetInstanceProcAddr\' for ICD %s" ,
18901896 filename );
1897+ res = VK_ERROR_INCOMPATIBLE_DRIVER ;
18911898 goto out ;
18921899 }
18931900 // Query "vk_icdGetPhysicalDeviceProcAddr" with vk_icdGetInstanceProcAddr if the library reports interface version 7 or
@@ -1956,6 +1963,11 @@ VkResult loader_scanned_icd_add(const struct loader_instance *inst, struct loade
19561963 icd_tramp_list -> count ++ ;
19571964
19581965out :
1966+ if (res != VK_SUCCESS ) {
1967+ if (NULL != handle ) {
1968+ loader_platform_close_library (handle );
1969+ }
1970+ }
19591971
19601972 return res ;
19611973}
0 commit comments