aboutsummaryrefslogtreecommitdiff
path: root/loader
diff options
context:
space:
mode:
authorLenny Komow <lenny@lunarg.com>2018-02-22 11:28:16 -0700
committerMike Schuchardt <mikes@lunarg.com>2018-03-09 13:54:31 -0700
commit7e59e52a997d0d98bea3e140b4ca2d19b38666d4 (patch)
tree5707674dee36801192864e840955b182e0dcf521 /loader
parent84d0e6e621aa6dc3a6eb23c972b3f023a706e7ad (diff)
downloadusermoji-7e59e52a997d0d98bea3e140b4ca2d19b38666d4.tar.xz
loader: Only return ext pointers if ext is enabled
The loader previously returned valid pointers to functions from VK_KHR_swapchain and VK_KHR_display_swapchain even if the extensions weren't enabled. This change fixed that.
Diffstat (limited to 'loader')
-rw-r--r--loader/loader.h2
-rw-r--r--loader/wsi.c24
2 files changed, 19 insertions, 7 deletions
diff --git a/loader/loader.h b/loader/loader.h
index 8abc034a..aa9a8554 100644
--- a/loader/loader.h
+++ b/loader/loader.h
@@ -312,6 +312,8 @@ struct loader_instance {
bool wsi_ios_surface_enabled;
#endif
bool wsi_display_enabled;
+ bool wsi_swapchain_enabled;
+ bool wsi_display_swapchain_enabled;
};
// VkPhysicalDevice requires special treatment by loader. Firstly, terminator
diff --git a/loader/wsi.c b/loader/wsi.c
index e822fe7a..27150dee 100644
--- a/loader/wsi.c
+++ b/loader/wsi.c
@@ -63,6 +63,8 @@ void wsi_create_instance(struct loader_instance *ptr_instance, const VkInstanceC
#endif // VK_USE_PLATFORM_IOS_MVK
ptr_instance->wsi_display_enabled = false;
+ ptr_instance->wsi_swapchain_enabled = false;
+ ptr_instance->wsi_display_swapchain_enabled = false;
for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) {
if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SURFACE_EXTENSION_NAME) == 0) {
@@ -121,6 +123,14 @@ void wsi_create_instance(struct loader_instance *ptr_instance, const VkInstanceC
ptr_instance->wsi_display_enabled = true;
continue;
}
+ if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SWAPCHAIN_EXTENSION_NAME) == 0) {
+ ptr_instance->wsi_swapchain_enabled = true;
+ continue;
+ }
+ if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME) == 0) {
+ ptr_instance->wsi_display_swapchain_enabled = true;
+ continue;
+ }
}
}
@@ -1642,27 +1652,27 @@ bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance, const char
// function will return the trampoline function for such device-extension
// functions, regardless of whether the extension has been enabled.
if (!strcmp("vkCreateSwapchainKHR", name)) {
- *addr = (void *)vkCreateSwapchainKHR;
+ *addr = ptr_instance->wsi_swapchain_enabled ? (void *)vkCreateSwapchainKHR : NULL;
return true;
}
if (!strcmp("vkDestroySwapchainKHR", name)) {
- *addr = (void *)vkDestroySwapchainKHR;
+ *addr = ptr_instance->wsi_swapchain_enabled ? (void *)vkDestroySwapchainKHR : NULL;
return true;
}
if (!strcmp("vkGetSwapchainImagesKHR", name)) {
- *addr = (void *)vkGetSwapchainImagesKHR;
+ *addr = ptr_instance->wsi_swapchain_enabled ? (void *)vkGetSwapchainImagesKHR : NULL;
return true;
}
if (!strcmp("vkAcquireNextImageKHR", name)) {
- *addr = (void *)vkAcquireNextImageKHR;
+ *addr = ptr_instance->wsi_swapchain_enabled ? (void *)vkAcquireNextImageKHR : NULL;
return true;
}
if (!strcmp("vkQueuePresentKHR", name)) {
- *addr = (void *)vkQueuePresentKHR;
+ *addr = ptr_instance->wsi_swapchain_enabled ? (void *)vkQueuePresentKHR : NULL;
return true;
}
if (!strcmp("vkAcquireNextImage2KHR", name)) {
- *addr = (void *)vkAcquireNextImage2KHR;
+ *addr = ptr_instance->wsi_swapchain_enabled ? (void *)vkAcquireNextImage2KHR : NULL;
return true;
}
@@ -1783,7 +1793,7 @@ bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance, const char
// Functions for KHR_display_swapchain extension:
if (!strcmp("vkCreateSharedSwapchainsKHR", name)) {
- *addr = (void *)vkCreateSharedSwapchainsKHR;
+ *addr = ptr_instance->wsi_display_swapchain_enabled ? (void *)vkCreateSharedSwapchainsKHR : NULL;
return true;
}