From ffb06194c4792cf350d7fa5737fda6e8e38cb0de Mon Sep 17 00:00:00 2001 From: Mark Young Date: Fri, 1 Jul 2016 15:18:27 -0600 Subject: loader: gh888 Add KHR/EXT extensions in vulkan.h Add the KHR_display_swapchain device extension to the loader and the core_validation layers. This fulfills the work required in JIRA LOAD-7 and gh 90. Add debug_marker to the extension list. Change-Id: I1fb70e5d44bc8c1f70fd6d1cfbd106a155081b25 --- layers/core_validation.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'layers/core_validation.cpp') diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 16303868..13b3d4b7 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -86,6 +86,7 @@ static const VkDeviceMemory MEMTRACKER_SWAP_CHAIN_IMAGE_KEY = (VkDeviceMemory)(- struct devExts { bool wsi_enabled; + bool wsi_display_swapchain_enabled; unordered_map> swapchainMap; unordered_map imageToSwapchainMap; }; @@ -4220,10 +4221,13 @@ static void checkDeviceRegisterExtensions(const VkDeviceCreateInfo *pCreateInfo, // by more than one thread? layer_data *dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); dev_data->device_extensions.wsi_enabled = false; + dev_data->device_extensions.wsi_display_swapchain_enabled = false; for (i = 0; i < pCreateInfo->enabledExtensionCount; i++) { if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SWAPCHAIN_EXTENSION_NAME) == 0) dev_data->device_extensions.wsi_enabled = true; + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME) == 0) + dev_data->device_extensions.wsi_display_swapchain_enabled = true; } } @@ -10995,6 +10999,16 @@ VKAPI_ATTR VkResult VKAPI_CALL QueuePresentKHR(VkQueue queue, const VkPresentInf return result; } +VKAPI_ATTR VkResult VKAPI_CALL CreateSharedSwapchainsKHR(VkDevice device, uint32_t swapchainCount, + const VkSwapchainCreateInfoKHR *pCreateInfos, + const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchains) { + layer_data *dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); + std::unique_lock lock(global_lock); + VkResult result = + dev_data->device_dispatch_table->CreateSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator, pSwapchains); + return result; +} + VKAPI_ATTR VkResult VKAPI_CALL AcquireNextImageKHR(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t *pImageIndex) { layer_data *dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); @@ -11433,9 +11447,10 @@ intercept_khr_swapchain_command(const char *name, VkDevice dev) { { "vkAcquireNextImageKHR", reinterpret_cast(AcquireNextImageKHR) }, { "vkQueuePresentKHR", reinterpret_cast(QueuePresentKHR) }, }; + layer_data *dev_data = nullptr; if (dev) { - layer_data *dev_data = get_my_data_ptr(get_dispatch_key(dev), layer_data_map); + dev_data = get_my_data_ptr(get_dispatch_key(dev), layer_data_map); if (!dev_data->device_extensions.wsi_enabled) return nullptr; } @@ -11445,6 +11460,14 @@ intercept_khr_swapchain_command(const char *name, VkDevice dev) { return khr_swapchain_commands[i].proc; } + if (dev_data) { + if (!dev_data->device_extensions.wsi_display_swapchain_enabled) + return nullptr; + } + + if (!strcmp("vkCreateSharedSwapchainsKHR", name)) + return reinterpret_cast(CreateSharedSwapchainsKHR); + return nullptr; } -- cgit v1.2.3