diff options
| author | Norbert Nopper <Norbert.Nopper@nxp.com> | 2016-11-25 07:55:13 +0100 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2016-11-29 13:24:05 -0700 |
| commit | 09854fbb01a3c10287b759e88f40e5c05c9be9ba (patch) | |
| tree | 11a85a8261e364b5e0f10155fe6320bf8c769c04 /layers/object_tracker.cpp | |
| parent | d328f5199e828b2ab80f13d05871f31c1c9d0a96 (diff) | |
| download | usermoji-09854fbb01a3c10287b759e88f40e5c05c9be9ba.tar.xz | |
layers: Complete support for VK_KHR_Display ext
Fixed using display extension only crash.
Added vkGetDisplayPlaneCapabilitiesKHR.
Fixes, that unique objects works for display extension.
Change-Id: I66727a430b9d55bfa40fdddc884f40c91aa29f11
Diffstat (limited to 'layers/object_tracker.cpp')
| -rw-r--r-- | layers/object_tracker.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/layers/object_tracker.cpp b/layers/object_tracker.cpp index 11276f45..b4443547 100644 --- a/layers/object_tracker.cpp +++ b/layers/object_tracker.cpp @@ -2726,6 +2726,27 @@ VKAPI_ATTR VkResult VKAPI_CALL QueuePresentKHR(VkQueue queue, const VkPresentInf return result; } +VKAPI_ATTR VkResult VKAPI_CALL CreateDisplayPlaneSurfaceKHR(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + bool skip_call = false; + { + std::lock_guard<std::mutex> lock(global_lock); + skip_call |= ValidateObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, false, VALIDATION_ERROR_01878); + } + if (skip_call) { + return VK_ERROR_VALIDATION_FAILED_EXT; + } + VkResult result = get_dispatch_table(ot_instance_table_map, instance) + ->CreateDisplayPlaneSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); + { + std::lock_guard<std::mutex> lock(global_lock); + if (result == VK_SUCCESS) { + CreateObject(instance, *pSurface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, pAllocator); + } + } + return result; +} + #ifdef VK_USE_PLATFORM_WIN32_KHR VKAPI_ATTR VkResult VKAPI_CALL CreateWin32SurfaceKHR(VkInstance instance, const VkWin32SurfaceCreateInfoKHR *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { @@ -3065,6 +3086,8 @@ static inline PFN_vkVoidFunction InterceptWsiEnabledCommand(const char *name, Vk return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfaceFormatsKHR); if (!strcmp("vkGetPhysicalDeviceSurfacePresentModesKHR", name)) return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfacePresentModesKHR); + if ((instanceExtMap[pTable].display_enabled == true) && !strcmp("vkCreateDisplayPlaneSurfaceKHR", name)) + return reinterpret_cast<PFN_vkVoidFunction>(CreateDisplayPlaneSurfaceKHR); #ifdef VK_USE_PLATFORM_WIN32_KHR if ((instanceExtMap[pTable].win32_enabled == true) && !strcmp("vkCreateWin32SurfaceKHR", name)) @@ -3133,6 +3156,9 @@ static void CheckInstanceRegisterExtensions(const VkInstanceCreateInfo *pCreateI if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SURFACE_EXTENSION_NAME) == 0) { instanceExtMap[pDisp].wsi_enabled = true; } + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_DISPLAY_EXTENSION_NAME) == 0) { + instanceExtMap[pDisp].display_enabled = true; + } #ifdef VK_USE_PLATFORM_XLIB_KHR if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_XLIB_SURFACE_EXTENSION_NAME) == 0) { instanceExtMap[pDisp].xlib_enabled = true; |
