diff options
| author | Mark Young <marky@lunarg.com> | 2016-07-01 15:18:27 -0600 |
|---|---|---|
| committer | Mark Young <marky@lunarg.com> | 2016-09-01 08:14:27 -0600 |
| commit | ffb06194c4792cf350d7fa5737fda6e8e38cb0de (patch) | |
| tree | f2413bb6405ba2068b28376eaad87ac722c58a50 /layers/core_validation.cpp | |
| parent | 48fc62a1db1480fbf3007fb5e50fecb239b394d5 (diff) | |
| download | usermoji-ffb06194c4792cf350d7fa5737fda6e8e38cb0de.tar.xz | |
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
Diffstat (limited to 'layers/core_validation.cpp')
| -rw-r--r-- | layers/core_validation.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
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<VkSwapchainKHR, unique_ptr<SWAPCHAIN_NODE>> swapchainMap; unordered_map<VkImage, VkSwapchainKHR> 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<std::mutex> 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<PFN_vkVoidFunction>(AcquireNextImageKHR) }, { "vkQueuePresentKHR", reinterpret_cast<PFN_vkVoidFunction>(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<PFN_vkVoidFunction>(CreateSharedSwapchainsKHR); + return nullptr; } |
