diff options
author | Lenny Komow <lenny@lunarg.com> | 2019-04-15 23:49:58 +0300 |
---|---|---|
committer | Lenny Komow <lenny@lunarg.com> | 2019-04-16 00:36:29 +0300 |
commit | 763adc5f17a3b9030c6613797d5c9b07c4c2ca61 (patch) | |
tree | da5fe7c453841ea46380ee2d900a94fdaf3cc5be | |
parent | 1df2ebd329df1ece1a5ed485573ea58e5bc6ff97 (diff) |
loader: Support VK_EXT_full_screen_exclusive extsdk-1.1.106.0sdk-1.1.106
This change adds manual handing for new APIs which need to unwrap an
ICD surface handle before calling down to the ICD.
Change-Id: Id64c8021a3d36800af9a59cafe52577a4d5d69ff
-rw-r--r-- | loader/extension_manual.c | 67 | ||||
-rw-r--r-- | loader/extension_manual.h | 24 | ||||
-rw-r--r-- | scripts/loader_extension_generator.py | 4 |
3 files changed, 94 insertions, 1 deletions
diff --git a/loader/extension_manual.c b/loader/extension_manual.c index 5a2f7151d..e723df9f7 100644 --- a/loader/extension_manual.c +++ b/loader/extension_manual.c @@ -362,3 +362,70 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_GetRandROutputDisplayEXT(VkPhysicalDev } #endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT + +#ifdef VK_USE_PLATFORM_WIN32_KHR +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModes2EXT( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + uint32_t* pPresentModeCount, + VkPresentModeKHR* pPresentModes) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceSurfacePresentModes2EXT(unwrapped_phys_dev, pSurfaceInfo, pPresentModeCount, pPresentModes); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfacePresentModes2EXT( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + uint32_t* pPresentModeCount, + VkPresentModeKHR* pPresentModes) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetPhysicalDeviceSurfacePresentModes2EXT) { + loader_log(icd_term->this_instance, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0, + "ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceSurfacePresentModes2EXT"); + } + VkIcdSurface *icd_surface = (VkIcdSurface *)(pSurfaceInfo->surface); + uint8_t icd_index = phys_dev_term->icd_index; + if (NULL != icd_surface->real_icd_surfaces && NULL != (void *)icd_surface->real_icd_surfaces[icd_index]) { + const VkPhysicalDeviceSurfaceInfo2KHR surface_info_copy = { + .sType = pSurfaceInfo->sType, + .pNext = pSurfaceInfo->pNext, + .surface = icd_surface->real_icd_surfaces[icd_index], + }; + return icd_term->dispatch.GetPhysicalDeviceSurfacePresentModes2EXT(phys_dev_term->phys_dev, &surface_info_copy, pPresentModeCount, pPresentModes); + } + return icd_term->dispatch.GetPhysicalDeviceSurfacePresentModes2EXT(phys_dev_term->phys_dev, pSurfaceInfo, pPresentModeCount, pPresentModes); +} +#endif // VK_USE_PLATFORM_WIN32_KHR + +VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupSurfacePresentModes2EXT( + VkDevice device, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + VkDeviceGroupPresentModeFlagsKHR* pModes) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + return disp->GetDeviceGroupSurfacePresentModes2EXT(device, pSurfaceInfo, pModes); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDeviceGroupSurfacePresentModes2EXT( + VkDevice device, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + VkDeviceGroupPresentModeFlagsKHR* pModes) { + uint32_t icd_index = 0; + struct loader_device *dev; + struct loader_icd_term *icd_term = loader_get_icd_and_device(device, &dev, &icd_index); + if (NULL != icd_term && NULL != icd_term->dispatch.GetDeviceGroupSurfacePresentModes2EXT) { + VkIcdSurface *icd_surface = (VkIcdSurface *)(uintptr_t)pSurfaceInfo->surface; + if (NULL != icd_surface->real_icd_surfaces && (VkSurfaceKHR)NULL != icd_surface->real_icd_surfaces[icd_index]) { + const VkPhysicalDeviceSurfaceInfo2KHR surface_info_copy = { + .sType = pSurfaceInfo->sType, + .pNext = pSurfaceInfo->pNext, + .surface = icd_surface->real_icd_surfaces[icd_index], + }; + return icd_term->dispatch.GetDeviceGroupSurfacePresentModes2EXT(device, &surface_info_copy, pModes); + } + return icd_term->dispatch.GetDeviceGroupSurfacePresentModes2EXT(device, pSurfaceInfo, pModes); + } + return VK_SUCCESS; +} diff --git a/loader/extension_manual.h b/loader/extension_manual.h index 5ae93bf0f..e07b9102d 100644 --- a/loader/extension_manual.h +++ b/loader/extension_manual.h @@ -80,3 +80,27 @@ VKAPI_ATTR VkResult VKAPI_CALL GetRandROutputDisplayEXT(VkPhysicalDevice physica VKAPI_ATTR VkResult VKAPI_CALL terminator_GetRandROutputDisplayEXT(VkPhysicalDevice physicalDevice, Display* dpy, RROutput rrOutput, VkDisplayKHR* pDisplay); #endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT + +#ifdef VK_USE_PLATFORM_WIN32_KHR +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModes2EXT( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + uint32_t* pPresentModeCount, + VkPresentModeKHR* pPresentModes); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfacePresentModes2EXT( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + uint32_t* pPresentModeCount, + VkPresentModeKHR* pPresentModes); +#endif // VK_USE_PLATFORM_WIN32_KHR + +VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupSurfacePresentModes2EXT( + VkDevice device, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + VkDeviceGroupPresentModeFlagsKHR* pModes); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDeviceGroupSurfacePresentModes2EXT( + VkDevice device, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + VkDeviceGroupPresentModeFlagsKHR* pModes); diff --git a/scripts/loader_extension_generator.py b/scripts/loader_extension_generator.py index 9f8211440..9641477c7 100644 --- a/scripts/loader_extension_generator.py +++ b/scripts/loader_extension_generator.py @@ -923,7 +923,9 @@ class LoaderExtensionOutputGenerator(OutputGenerator): 'vkGetPhysicalDeviceDisplayProperties2KHR', 'vkGetPhysicalDeviceDisplayPlaneProperties2KHR', 'vkGetDisplayModeProperties2KHR', - 'vkGetDisplayPlaneCapabilities2KHR'] + 'vkGetDisplayPlaneCapabilities2KHR', + 'vkGetPhysicalDeviceSurfacePresentModes2EXT', + 'vkGetDeviceGroupSurfacePresentModes2EXT'] for ext_cmd in self.ext_commands: if (ext_cmd.ext_name in WSI_EXT_NAMES or |