mirror of
https://gitlab.freedesktop.org/mesa/vulkan-wsi-layer.git
synced 2025-12-20 03:20:09 +01:00
Merge 'Guarantee surface caps is consisitent between EXT and KHR' into 'main'
See merge request mesa/vulkan-wsi-layer!204
This commit is contained in:
commit
6b3cc197ab
4 changed files with 67 additions and 1 deletions
|
|
@ -796,6 +796,11 @@ wsi_layer_vkGetInstanceProcAddr(VkInstance instance, const char *funcName) VWL_A
|
||||||
GET_PROC_ADDR(vkGetPhysicalDeviceSurfaceCapabilities2KHR);
|
GET_PROC_ADDR(vkGetPhysicalDeviceSurfaceCapabilities2KHR);
|
||||||
GET_PROC_ADDR(vkGetPhysicalDeviceSurfaceFormats2KHR);
|
GET_PROC_ADDR(vkGetPhysicalDeviceSurfaceFormats2KHR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (instance_data.is_instance_extension_enabled(VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME))
|
||||||
|
{
|
||||||
|
GET_PROC_ADDR(vkGetPhysicalDeviceSurfaceCapabilities2EXT);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return instance_data.disp.get_user_enabled_entrypoint(instance, funcName);
|
return instance_data.disp.get_user_enabled_entrypoint(instance, funcName);
|
||||||
|
|
|
||||||
|
|
@ -222,6 +222,7 @@ static constexpr uint32_t API_VERSION_MAX = UINT32_MAX;
|
||||||
/* VK_KHR_surface */ \
|
/* VK_KHR_surface */ \
|
||||||
EP(DestroySurfaceKHR, VK_KHR_SURFACE_EXTENSION_NAME, API_VERSION_MAX, false, ) \
|
EP(DestroySurfaceKHR, VK_KHR_SURFACE_EXTENSION_NAME, API_VERSION_MAX, false, ) \
|
||||||
EP(GetPhysicalDeviceSurfaceCapabilitiesKHR, VK_KHR_SURFACE_EXTENSION_NAME, API_VERSION_MAX, false, ) \
|
EP(GetPhysicalDeviceSurfaceCapabilitiesKHR, VK_KHR_SURFACE_EXTENSION_NAME, API_VERSION_MAX, false, ) \
|
||||||
|
EP(GetPhysicalDeviceSurfaceCapabilities2EXT, VK_KHR_SURFACE_EXTENSION_NAME, API_VERSION_MAX, false, ) \
|
||||||
EP(GetPhysicalDeviceSurfaceFormatsKHR, VK_KHR_SURFACE_EXTENSION_NAME, API_VERSION_MAX, false, ) \
|
EP(GetPhysicalDeviceSurfaceFormatsKHR, VK_KHR_SURFACE_EXTENSION_NAME, API_VERSION_MAX, false, ) \
|
||||||
EP(GetPhysicalDeviceSurfacePresentModesKHR, VK_KHR_SURFACE_EXTENSION_NAME, API_VERSION_MAX, false, ) \
|
EP(GetPhysicalDeviceSurfacePresentModesKHR, VK_KHR_SURFACE_EXTENSION_NAME, API_VERSION_MAX, false, ) \
|
||||||
EP(GetPhysicalDeviceSurfaceSupportKHR, VK_KHR_SURFACE_EXTENSION_NAME, API_VERSION_MAX, false, ) \
|
EP(GetPhysicalDeviceSurfaceSupportKHR, VK_KHR_SURFACE_EXTENSION_NAME, API_VERSION_MAX, false, ) \
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,59 @@ wsi_layer_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDev
|
||||||
return instance.disp.GetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities);
|
return instance.disp.GetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Implements vkGetPhysicalDeviceSurfaceCapabilities2EXT Vulkan entrypoint.
|
||||||
|
*/
|
||||||
|
VWL_VKAPI_CALL(VkResult)
|
||||||
|
wsi_layer_vkGetPhysicalDeviceSurfaceCapabilities2EXT(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface,
|
||||||
|
VkSurfaceCapabilities2EXT *pSurfaceCapabilities) VWL_API_POST
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* To adapt vulkan driver like mesa:panvk which still expose vkGetPhysicalDeviceSurfaceCapabilities2EXT
|
||||||
|
* and VK_EXT_display_surface_counter. Vulkan WSI need to implement vkGetPhysicalDeviceSurfaceCapabilities2EXT
|
||||||
|
* to handle the compatibility between Vulkan WSI and ICD.
|
||||||
|
* Because mesa has different initialization strategy on min/maxImageCount with Vulkan WSI,
|
||||||
|
* so if we haven't do like this, app will obtain different value between
|
||||||
|
* vkGetPhysicalDeviceSurfaceCapabilities2EXT and vkGetPhysicalDeviceSurfaceCapabilities2KHR.
|
||||||
|
*/
|
||||||
|
auto &instance = layer::instance_private_data::get(physicalDevice);
|
||||||
|
if (instance.should_layer_handle_surface(physicalDevice, surface))
|
||||||
|
{
|
||||||
|
wsi::surface_properties *props = wsi::get_surface_properties(instance, surface);
|
||||||
|
assert(props != nullptr);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Firstly, VkSurfaceCapabilities2EXT equal to { VkSurfaceCapabilitiesKHR, VkSurfaceCounterFlagsEXT }
|
||||||
|
* So we set the common variable by common function as same as VkSurfaceCapabilitiesKHR,
|
||||||
|
* then set supportedSurfaceCounters manually.
|
||||||
|
*
|
||||||
|
* Secondly, from the vulkan spec, VkSurfaceCapabilities2EXT->pNext must be NULL,
|
||||||
|
* so we needn't to deal with the pNext Structure like vkGetPhysicalDeviceSurfaceCapabilities2KHR.
|
||||||
|
*/
|
||||||
|
VkSurfaceCapabilitiesKHR khr_caps = {};
|
||||||
|
VkResult res = props->get_surface_capabilities(physicalDevice, &khr_caps);
|
||||||
|
if (res != VK_SUCCESS)
|
||||||
|
{
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
pSurfaceCapabilities->minImageCount = khr_caps.minImageCount;
|
||||||
|
pSurfaceCapabilities->maxImageCount = khr_caps.maxImageCount;
|
||||||
|
pSurfaceCapabilities->currentExtent = khr_caps.currentExtent;
|
||||||
|
pSurfaceCapabilities->minImageExtent = khr_caps.minImageExtent;
|
||||||
|
pSurfaceCapabilities->maxImageExtent = khr_caps.maxImageExtent;
|
||||||
|
pSurfaceCapabilities->maxImageArrayLayers = khr_caps.maxImageArrayLayers;
|
||||||
|
pSurfaceCapabilities->supportedTransforms = khr_caps.supportedTransforms;
|
||||||
|
pSurfaceCapabilities->currentTransform = khr_caps.currentTransform;
|
||||||
|
pSurfaceCapabilities->supportedCompositeAlpha = khr_caps.supportedCompositeAlpha;
|
||||||
|
pSurfaceCapabilities->supportedUsageFlags = khr_caps.supportedUsageFlags;
|
||||||
|
pSurfaceCapabilities->supportedSurfaceCounters = 0;
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
return instance.disp.GetPhysicalDeviceSurfaceCapabilities2EXT(physicalDevice, surface, pSurfaceCapabilities);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Implements vkGetPhysicalDeviceSurfaceCapabilities2KHR Vulkan entrypoint.
|
* @brief Implements vkGetPhysicalDeviceSurfaceCapabilities2KHR Vulkan entrypoint.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018-2019, 2021-2022 Arm Limited.
|
* Copyright (c) 2018-2019, 2021-2022, 2025 Arm Limited.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
|
|
@ -39,6 +39,13 @@ VWL_VKAPI_CALL(VkResult)
|
||||||
wsi_layer_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface,
|
wsi_layer_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface,
|
||||||
VkSurfaceCapabilitiesKHR *pSurfaceCapabilities) VWL_API_POST;
|
VkSurfaceCapabilitiesKHR *pSurfaceCapabilities) VWL_API_POST;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Implements vkGetPhysicalDeviceSurfaceCapabilities2EXT Vulkan entrypoint.
|
||||||
|
*/
|
||||||
|
VWL_VKAPI_CALL(VkResult)
|
||||||
|
wsi_layer_vkGetPhysicalDeviceSurfaceCapabilities2EXT(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface,
|
||||||
|
VkSurfaceCapabilities2EXT *pSurfaceCapabilities) VWL_API_POST;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Implements vkGetPhysicalDeviceSurfaceCapabilities2KHR Vulkan entrypoint.
|
* @brief Implements vkGetPhysicalDeviceSurfaceCapabilities2KHR Vulkan entrypoint.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue