[Mesa-dev] [PATCH v2 29/32] vulkan/wsi: Add wrappers for all of the surface queries

Jason Ekstrand jason at jlekstrand.net
Wed Nov 29 00:28:41 UTC 2017


This lets us move wsi_interface to wsi_common_private.h
---
 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 1ddc6c9..22ace6f 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 5c09d3b..6ff8ebd 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 50680a6..a303aab 100644
--- a/src/vulkan/wsi/wsi_common.c
+++ b/src/vulkan/wsi/wsi_common.c
@@ -488,6 +488,83 @@ wsi_destroy_image(const struct wsi_swapchain *chain,
 }
 
 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,
                             int fd,
diff --git a/src/vulkan/wsi/wsi_common.h b/src/vulkan/wsi/wsi_common.h
index 32a7e73..5e70575 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
 
@@ -171,6 +137,42 @@ 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,
                       VkImage *pSwapchainImages);
diff --git a/src/vulkan/wsi/wsi_common_private.h b/src/vulkan/wsi/wsi_common_private.h
index 3fa68f0..e29a239 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.5.0.400.gff86faf



More information about the mesa-dev mailing list