From c1b1be5196f38776405b58c01a6f138a0f031edb Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Thu, 16 Nov 2017 12:26:26 -0800 Subject: [PATCH] vulkan/wsi: Add wrappers for all of the surface queries This lets us move wsi_interface to wsi_common_private.h Reviewed-by: Dave Airlie Reviewed-by: Chad Versace --- src/amd/vulkan/radv_wsi.c | 41 +++++++-------- src/intel/vulkan/anv_wsi.c | 51 +++++++++---------- src/vulkan/wsi/wsi_common.c | 77 +++++++++++++++++++++++++++++ src/vulkan/wsi/wsi_common.h | 72 ++++++++++++++------------- src/vulkan/wsi/wsi_common_private.h | 34 +++++++++++++ 5 files changed, 192 insertions(+), 83 deletions(-) diff --git a/src/amd/vulkan/radv_wsi.c b/src/amd/vulkan/radv_wsi.c index 14431f471f1..676050531da 100644 --- a/src/amd/vulkan/radv_wsi.c +++ b/src/amd/vulkan/radv_wsi.c @@ -105,56 +105,57 @@ void radv_DestroySurfaceKHR( VkResult radv_GetPhysicalDeviceSurfaceSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, - VkSurfaceKHR _surface, + VkSurfaceKHR surface, VkBool32* pSupported) { RADV_FROM_HANDLE(radv_physical_device, device, physicalDevice); - ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, _surface); - struct wsi_interface *iface = device->wsi_device.wsi[surface->platform]; - return iface->get_support(surface, &device->wsi_device, - &device->instance->alloc, - queueFamilyIndex, device->local_fd, pSupported); + return wsi_common_get_surface_support(&device->wsi_device, + device->local_fd, + queueFamilyIndex, + surface, + &device->instance->alloc, + pSupported); } VkResult radv_GetPhysicalDeviceSurfaceCapabilitiesKHR( VkPhysicalDevice physicalDevice, - VkSurfaceKHR _surface, + VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities) { RADV_FROM_HANDLE(radv_physical_device, device, physicalDevice); - ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, _surface); - struct wsi_interface *iface = device->wsi_device.wsi[surface->platform]; - return iface->get_capabilities(surface, pSurfaceCapabilities); + return wsi_common_get_surface_capabilities(&device->wsi_device, + surface, + pSurfaceCapabilities); } VkResult radv_GetPhysicalDeviceSurfaceFormatsKHR( VkPhysicalDevice physicalDevice, - VkSurfaceKHR _surface, + VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats) { RADV_FROM_HANDLE(radv_physical_device, device, physicalDevice); - ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, _surface); - struct wsi_interface *iface = device->wsi_device.wsi[surface->platform]; - return iface->get_formats(surface, &device->wsi_device, pSurfaceFormatCount, - pSurfaceFormats); + return wsi_common_get_surface_formats(&device->wsi_device, + surface, + pSurfaceFormatCount, + pSurfaceFormats); } VkResult radv_GetPhysicalDeviceSurfacePresentModesKHR( VkPhysicalDevice physicalDevice, - VkSurfaceKHR _surface, + VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes) { RADV_FROM_HANDLE(radv_physical_device, device, physicalDevice); - ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, _surface); - struct wsi_interface *iface = device->wsi_device.wsi[surface->platform]; - return iface->get_present_modes(surface, pPresentModeCount, - pPresentModes); + return wsi_common_get_surface_present_modes(&device->wsi_device, + surface, + pPresentModeCount, + pPresentModes); } VkResult radv_CreateSwapchainKHR( diff --git a/src/intel/vulkan/anv_wsi.c b/src/intel/vulkan/anv_wsi.c index 5c09d3b9837..6ff8ebd26a5 100644 --- a/src/intel/vulkan/anv_wsi.c +++ b/src/intel/vulkan/anv_wsi.c @@ -107,28 +107,29 @@ void anv_DestroySurfaceKHR( VkResult anv_GetPhysicalDeviceSurfaceSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, - VkSurfaceKHR _surface, + VkSurfaceKHR surface, VkBool32* pSupported) { ANV_FROM_HANDLE(anv_physical_device, device, physicalDevice); - ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, _surface); - struct wsi_interface *iface = device->wsi_device.wsi[surface->platform]; - return iface->get_support(surface, &device->wsi_device, - &device->instance->alloc, - queueFamilyIndex, device->local_fd, pSupported); + return wsi_common_get_surface_support(&device->wsi_device, + device->local_fd, + queueFamilyIndex, + surface, + &device->instance->alloc, + pSupported); } VkResult anv_GetPhysicalDeviceSurfaceCapabilitiesKHR( VkPhysicalDevice physicalDevice, - VkSurfaceKHR _surface, + VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities) { ANV_FROM_HANDLE(anv_physical_device, device, physicalDevice); - ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, _surface); - struct wsi_interface *iface = device->wsi_device.wsi[surface->platform]; - return iface->get_capabilities(surface, pSurfaceCapabilities); + return wsi_common_get_surface_capabilities(&device->wsi_device, + surface, + pSurfaceCapabilities); } VkResult anv_GetPhysicalDeviceSurfaceCapabilities2KHR( @@ -137,25 +138,22 @@ VkResult anv_GetPhysicalDeviceSurfaceCapabilities2KHR( VkSurfaceCapabilities2KHR* pSurfaceCapabilities) { ANV_FROM_HANDLE(anv_physical_device, device, physicalDevice); - ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, pSurfaceInfo->surface); - struct wsi_interface *iface = device->wsi_device.wsi[surface->platform]; - return iface->get_capabilities2(surface, pSurfaceInfo->pNext, - pSurfaceCapabilities); + return wsi_common_get_surface_capabilities2(&device->wsi_device, + pSurfaceInfo, + pSurfaceCapabilities); } VkResult anv_GetPhysicalDeviceSurfaceFormatsKHR( VkPhysicalDevice physicalDevice, - VkSurfaceKHR _surface, + VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats) { ANV_FROM_HANDLE(anv_physical_device, device, physicalDevice); - ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, _surface); - struct wsi_interface *iface = device->wsi_device.wsi[surface->platform]; - return iface->get_formats(surface, &device->wsi_device, pSurfaceFormatCount, - pSurfaceFormats); + return wsi_common_get_surface_formats(&device->wsi_device, surface, + pSurfaceFormatCount, pSurfaceFormats); } VkResult anv_GetPhysicalDeviceSurfaceFormats2KHR( @@ -165,25 +163,22 @@ VkResult anv_GetPhysicalDeviceSurfaceFormats2KHR( VkSurfaceFormat2KHR* pSurfaceFormats) { ANV_FROM_HANDLE(anv_physical_device, device, physicalDevice); - ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, pSurfaceInfo->surface); - struct wsi_interface *iface = device->wsi_device.wsi[surface->platform]; - return iface->get_formats2(surface, &device->wsi_device, pSurfaceInfo->pNext, - pSurfaceFormatCount, pSurfaceFormats); + return wsi_common_get_surface_formats2(&device->wsi_device, pSurfaceInfo, + pSurfaceFormatCount, pSurfaceFormats); } VkResult anv_GetPhysicalDeviceSurfacePresentModesKHR( VkPhysicalDevice physicalDevice, - VkSurfaceKHR _surface, + VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes) { ANV_FROM_HANDLE(anv_physical_device, device, physicalDevice); - ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, _surface); - struct wsi_interface *iface = device->wsi_device.wsi[surface->platform]; - return iface->get_present_modes(surface, pPresentModeCount, - pPresentModes); + return wsi_common_get_surface_present_modes(&device->wsi_device, surface, + pPresentModeCount, + pPresentModes); } VkResult anv_CreateSwapchainKHR( diff --git a/src/vulkan/wsi/wsi_common.c b/src/vulkan/wsi/wsi_common.c index 50680a6fd75..a303aabf2c4 100644 --- a/src/vulkan/wsi/wsi_common.c +++ b/src/vulkan/wsi/wsi_common.c @@ -487,6 +487,83 @@ wsi_destroy_image(const struct wsi_swapchain *chain, wsi->DestroyBuffer(chain->device, image->prime.buffer, &chain->alloc); } +VkResult +wsi_common_get_surface_support(struct wsi_device *wsi_device, + int local_fd, + uint32_t queueFamilyIndex, + VkSurfaceKHR _surface, + const VkAllocationCallbacks *alloc, + VkBool32* pSupported) +{ + ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, _surface); + struct wsi_interface *iface = wsi_device->wsi[surface->platform]; + + return iface->get_support(surface, wsi_device, alloc, + queueFamilyIndex, local_fd, pSupported); +} + +VkResult +wsi_common_get_surface_capabilities(struct wsi_device *wsi_device, + VkSurfaceKHR _surface, + VkSurfaceCapabilitiesKHR *pSurfaceCapabilities) +{ + ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, _surface); + struct wsi_interface *iface = wsi_device->wsi[surface->platform]; + + return iface->get_capabilities(surface, pSurfaceCapabilities); +} + +VkResult +wsi_common_get_surface_capabilities2(struct wsi_device *wsi_device, + const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, + VkSurfaceCapabilities2KHR *pSurfaceCapabilities) +{ + ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, pSurfaceInfo->surface); + struct wsi_interface *iface = wsi_device->wsi[surface->platform]; + + return iface->get_capabilities2(surface, pSurfaceInfo->pNext, + pSurfaceCapabilities); +} + +VkResult +wsi_common_get_surface_formats(struct wsi_device *wsi_device, + VkSurfaceKHR _surface, + uint32_t *pSurfaceFormatCount, + VkSurfaceFormatKHR *pSurfaceFormats) +{ + ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, _surface); + struct wsi_interface *iface = wsi_device->wsi[surface->platform]; + + return iface->get_formats(surface, wsi_device, + pSurfaceFormatCount, pSurfaceFormats); +} + +VkResult +wsi_common_get_surface_formats2(struct wsi_device *wsi_device, + const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, + uint32_t *pSurfaceFormatCount, + VkSurfaceFormat2KHR *pSurfaceFormats) +{ + ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, pSurfaceInfo->surface); + struct wsi_interface *iface = wsi_device->wsi[surface->platform]; + + return iface->get_formats2(surface, wsi_device, pSurfaceInfo->pNext, + pSurfaceFormatCount, pSurfaceFormats); +} + +VkResult +wsi_common_get_surface_present_modes(struct wsi_device *wsi_device, + VkSurfaceKHR _surface, + uint32_t *pPresentModeCount, + VkPresentModeKHR *pPresentModes) +{ + ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, _surface); + struct wsi_interface *iface = wsi_device->wsi[surface->platform]; + + return iface->get_present_modes(surface, pPresentModeCount, + pPresentModes); +} + VkResult wsi_common_create_swapchain(struct wsi_device *wsi, VkDevice device, diff --git a/src/vulkan/wsi/wsi_common.h b/src/vulkan/wsi/wsi_common.h index 32a7e731321..5e705755019 100644 --- a/src/vulkan/wsi/wsi_common.h +++ b/src/vulkan/wsi/wsi_common.h @@ -48,41 +48,7 @@ struct wsi_memory_allocate_info { bool implicit_sync; }; -struct wsi_device; -struct wsi_swapchain; - -struct wsi_interface { - VkResult (*get_support)(VkIcdSurfaceBase *surface, - struct wsi_device *wsi_device, - const VkAllocationCallbacks *alloc, - uint32_t queueFamilyIndex, - int local_fd, - VkBool32* pSupported); - VkResult (*get_capabilities)(VkIcdSurfaceBase *surface, - VkSurfaceCapabilitiesKHR* pSurfaceCapabilities); - VkResult (*get_capabilities2)(VkIcdSurfaceBase *surface, - const void *info_next, - VkSurfaceCapabilities2KHR* pSurfaceCapabilities); - VkResult (*get_formats)(VkIcdSurfaceBase *surface, - struct wsi_device *wsi_device, - uint32_t* pSurfaceFormatCount, - VkSurfaceFormatKHR* pSurfaceFormats); - VkResult (*get_formats2)(VkIcdSurfaceBase *surface, - struct wsi_device *wsi_device, - const void *info_next, - uint32_t* pSurfaceFormatCount, - VkSurfaceFormat2KHR* pSurfaceFormats); - VkResult (*get_present_modes)(VkIcdSurfaceBase *surface, - uint32_t* pPresentModeCount, - VkPresentModeKHR* pPresentModes); - VkResult (*create_swapchain)(VkIcdSurfaceBase *surface, - VkDevice device, - struct wsi_device *wsi_device, - int local_fd, - const VkSwapchainCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - struct wsi_swapchain **swapchain); -}; +struct wsi_interface; #define VK_ICD_WSI_PLATFORM_MAX 5 @@ -170,6 +136,42 @@ VkResult wsi_wl_init_wsi(struct wsi_device *wsi_device, void wsi_wl_finish_wsi(struct wsi_device *wsi_device, const VkAllocationCallbacks *alloc); +VkResult +wsi_common_get_surface_support(struct wsi_device *wsi_device, + int local_fd, + uint32_t queueFamilyIndex, + VkSurfaceKHR surface, + const VkAllocationCallbacks *alloc, + VkBool32* pSupported); + +VkResult +wsi_common_get_surface_capabilities(struct wsi_device *wsi_device, + VkSurfaceKHR surface, + VkSurfaceCapabilitiesKHR *pSurfaceCapabilities); + +VkResult +wsi_common_get_surface_capabilities2(struct wsi_device *wsi_device, + const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, + VkSurfaceCapabilities2KHR *pSurfaceCapabilities); + +VkResult +wsi_common_get_surface_formats(struct wsi_device *wsi_device, + VkSurfaceKHR surface, + uint32_t *pSurfaceFormatCount, + VkSurfaceFormatKHR *pSurfaceFormats); + +VkResult +wsi_common_get_surface_formats2(struct wsi_device *wsi_device, + const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, + uint32_t *pSurfaceFormatCount, + VkSurfaceFormat2KHR *pSurfaceFormats); + +VkResult +wsi_common_get_surface_present_modes(struct wsi_device *wsi_device, + VkSurfaceKHR surface, + uint32_t *pPresentModeCount, + VkPresentModeKHR *pPresentModes); + VkResult wsi_common_get_images(VkSwapchainKHR _swapchain, uint32_t *pSwapchainImageCount, diff --git a/src/vulkan/wsi/wsi_common_private.h b/src/vulkan/wsi/wsi_common_private.h index 3fa68f03249..e29a239bd78 100644 --- a/src/vulkan/wsi/wsi_common_private.h +++ b/src/vulkan/wsi/wsi_common_private.h @@ -91,6 +91,40 @@ wsi_destroy_image(const struct wsi_swapchain *chain, struct wsi_image *image); +struct wsi_interface { + VkResult (*get_support)(VkIcdSurfaceBase *surface, + struct wsi_device *wsi_device, + const VkAllocationCallbacks *alloc, + uint32_t queueFamilyIndex, + int local_fd, + VkBool32* pSupported); + VkResult (*get_capabilities)(VkIcdSurfaceBase *surface, + VkSurfaceCapabilitiesKHR* pSurfaceCapabilities); + VkResult (*get_capabilities2)(VkIcdSurfaceBase *surface, + const void *info_next, + VkSurfaceCapabilities2KHR* pSurfaceCapabilities); + VkResult (*get_formats)(VkIcdSurfaceBase *surface, + struct wsi_device *wsi_device, + uint32_t* pSurfaceFormatCount, + VkSurfaceFormatKHR* pSurfaceFormats); + VkResult (*get_formats2)(VkIcdSurfaceBase *surface, + struct wsi_device *wsi_device, + const void *info_next, + uint32_t* pSurfaceFormatCount, + VkSurfaceFormat2KHR* pSurfaceFormats); + VkResult (*get_present_modes)(VkIcdSurfaceBase *surface, + uint32_t* pPresentModeCount, + VkPresentModeKHR* pPresentModes); + VkResult (*create_swapchain)(VkIcdSurfaceBase *surface, + VkDevice device, + struct wsi_device *wsi_device, + int local_fd, + const VkSwapchainCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + struct wsi_swapchain **swapchain); +}; + + #define WSI_DEFINE_NONDISP_HANDLE_CASTS(__wsi_type, __VkType) \ \ static inline struct __wsi_type * \ -- 2.30.2