diff options
| author | Lenny Komow <lenny@lunarg.com> | 2018-02-22 11:28:16 -0700 |
|---|---|---|
| committer | Mike Schuchardt <mikes@lunarg.com> | 2018-03-09 13:54:31 -0700 |
| commit | 7e59e52a997d0d98bea3e140b4ca2d19b38666d4 (patch) | |
| tree | 5707674dee36801192864e840955b182e0dcf521 /loader | |
| parent | 84d0e6e621aa6dc3a6eb23c972b3f023a706e7ad (diff) | |
| download | usermoji-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.h | 2 | ||||
| -rw-r--r-- | loader/wsi.c | 24 |
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; } |
