aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Ashburn <jon@lunarg.com>2016-01-11 14:41:35 -0700
committerJon Ashburn <jon@lunarg.com>2016-01-11 14:43:33 -0700
commitb5ef7e502aa8a88f39d2f3b119323b54cdaf5f1b (patch)
tree0444ea734934b6f59f566fbac35ae7bcef309227
parent417589c00516fe0fea6993466bf77f79c5942a0c (diff)
downloadusermoji-b5ef7e502aa8a88f39d2f3b119323b54cdaf5f1b.tar.xz
loader: Fix old ICD interface to not use vkGetInstanceProcAddr(NULL,)
-rw-r--r--loader/loader.c32
1 files changed, 23 insertions, 9 deletions
diff --git a/loader/loader.c b/loader/loader.c
index 0b9beb05..f308105e 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -1279,6 +1279,7 @@ static void loader_scanned_icd_add(
fp_get_proc_addr = loader_platform_get_proc_address(handle, "vk_icdGetInstanceProcAddr");
if (!fp_get_proc_addr) {
+ // Use deprecated interface
fp_get_proc_addr = loader_platform_get_proc_address(handle, "vkGetInstanceProcAddr");
if (!fp_get_proc_addr) {
loader_log(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0, loader_platform_get_proc_address_error("vk_icdGetInstanceProcAddr"));
@@ -1286,16 +1287,29 @@ static void loader_scanned_icd_add(
} else {
loader_log(inst, VK_DEBUG_REPORT_WARN_BIT_EXT, 0, "Using deprecated ICD interface of vkGetInstanceProcAddr instead of vk_icdGetInstanceProcAddr");
}
+ fp_create_inst = loader_platform_get_proc_address(handle, "vkCreateInstance");
+ if (!fp_create_inst) {
+ loader_log(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0, "Couldn't get vkCreateInstance via dlsym/loadlibrary from ICD");
+ return;
+ }
+ fp_get_inst_ext_props = loader_platform_get_proc_address(handle, "vkEnumerateInstanceExtensionProperties");
+ if (!fp_get_inst_ext_props) {
+ loader_log(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0, "Couldn't get vkEnumerateInstanceExtensionProperties via dlsym/loadlibrary from ICD");
+ return;
+ }
}
- fp_create_inst = (PFN_vkCreateInstance) fp_get_proc_addr(NULL, "vkCreateInstance");
- if (!fp_create_inst) {
- loader_log(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0, "Couldn't get vkCreateInstance via vkGetInstanceProcAddr from ICD");
- return;
- }
- fp_get_inst_ext_props = (PFN_vkEnumerateInstanceExtensionProperties) fp_get_proc_addr(NULL, "vkEnumerateInstanceExtensionProperties");
- if (!fp_get_inst_ext_props) {
- loader_log(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0, "Couldn't get vkEnumerateInstanceExtensionProperties via vkGetInstanceProcAddr from ICD");
- return;
+ else {
+ // Use newer interface
+ fp_create_inst = (PFN_vkCreateInstance) fp_get_proc_addr(NULL, "vkCreateInstance");
+ if (!fp_create_inst) {
+ loader_log(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0, "Couldn't get vkCreateInstance via vk_icdGetInstanceProcAddr from ICD");
+ return;
+ }
+ fp_get_inst_ext_props = (PFN_vkEnumerateInstanceExtensionProperties)fp_get_proc_addr(NULL, "vkEnumerateInstanceExtensionProperties");
+ if (!fp_get_inst_ext_props) {
+ loader_log(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0, "Couldn't get vkEnumerateInstanceExtensionProperties via vk_icdGetInstanceProcAddr from ICD");
+ return;
+ }
}
// check for enough capacity