radv: Implement VK_KHR_get_surface_capabilities2
[mesa.git] / src / amd / vulkan / radv_wsi.c
index 676050531da3a02aa94a4a574c29e80b91304932..51e8ec666f7ea5f4641b084fe99a425656eb0b80 100644 (file)
 #include "vk_util.h"
 #include "util/macros.h"
 
-#define WSI_CB(x) .x = radv_##x
-MAYBE_UNUSED static const struct wsi_callbacks wsi_cbs = {
-       WSI_CB(GetPhysicalDeviceFormatProperties),
-};
-
 static PFN_vkVoidFunction
 radv_wsi_proc_addr(VkPhysicalDevice physicalDevice, const char *pName)
 {
        return radv_lookup_entrypoint(pName);
 }
 
-static uint32_t
-radv_wsi_queue_get_family_index(VkQueue _queue)
-{
-       RADV_FROM_HANDLE(radv_queue, queue, _queue);
-       return queue->queue_family_index;
-}
-
 VkResult
 radv_init_wsi(struct radv_physical_device *physical_device)
 {
-       VkResult result;
-
-       wsi_device_init(&physical_device->wsi_device,
-                       radv_physical_device_to_handle(physical_device),
-                       radv_wsi_proc_addr);
-
-       physical_device->wsi_device.queue_get_family_index =
-               radv_wsi_queue_get_family_index;
-
-#ifdef VK_USE_PLATFORM_XCB_KHR
-       result = wsi_x11_init_wsi(&physical_device->wsi_device, &physical_device->instance->alloc);
-       if (result != VK_SUCCESS)
-               return result;
-#endif
-
-#ifdef VK_USE_PLATFORM_WAYLAND_KHR
-       result = wsi_wl_init_wsi(&physical_device->wsi_device, &physical_device->instance->alloc,
-                                radv_physical_device_to_handle(physical_device),
-                                &wsi_cbs);
-       if (result != VK_SUCCESS) {
-#ifdef VK_USE_PLATFORM_XCB_KHR
-               wsi_x11_finish_wsi(&physical_device->wsi_device, &physical_device->instance->alloc);
-#endif
-               return result;
-       }
-#endif
-
-       return VK_SUCCESS;
+       return wsi_device_init(&physical_device->wsi_device,
+                              radv_physical_device_to_handle(physical_device),
+                              radv_wsi_proc_addr,
+                              &physical_device->instance->alloc);
 }
 
 void
 radv_finish_wsi(struct radv_physical_device *physical_device)
 {
-#ifdef VK_USE_PLATFORM_WAYLAND_KHR
-       wsi_wl_finish_wsi(&physical_device->wsi_device, &physical_device->instance->alloc);
-#endif
-#ifdef VK_USE_PLATFORM_XCB_KHR
-       wsi_x11_finish_wsi(&physical_device->wsi_device, &physical_device->instance->alloc);
-#endif
+       wsi_device_finish(&physical_device->wsi_device,
+                         &physical_device->instance->alloc);
 }
 
 void radv_DestroySurfaceKHR(
@@ -130,6 +90,18 @@ VkResult radv_GetPhysicalDeviceSurfaceCapabilitiesKHR(
                                                   pSurfaceCapabilities);
 }
 
+VkResult radv_GetPhysicalDeviceSurfaceCapabilities2KHR(
+       VkPhysicalDevice                            physicalDevice,
+       const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
+       VkSurfaceCapabilities2KHR*                  pSurfaceCapabilities)
+{
+       RADV_FROM_HANDLE(radv_physical_device, device, physicalDevice);
+
+       return wsi_common_get_surface_capabilities2(&device->wsi_device,
+                                                   pSurfaceInfo,
+                                                   pSurfaceCapabilities);
+}
+
 VkResult radv_GetPhysicalDeviceSurfaceFormatsKHR(
        VkPhysicalDevice                            physicalDevice,
        VkSurfaceKHR                                surface,
@@ -144,6 +116,20 @@ VkResult radv_GetPhysicalDeviceSurfaceFormatsKHR(
                                              pSurfaceFormats);
 }
 
+VkResult radv_GetPhysicalDeviceSurfaceFormats2KHR(
+       VkPhysicalDevice                            physicalDevice,
+       const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
+       uint32_t*                                   pSurfaceFormatCount,
+       VkSurfaceFormat2KHR*                        pSurfaceFormats)
+{
+       RADV_FROM_HANDLE(radv_physical_device, device, physicalDevice);
+
+       return wsi_common_get_surface_formats2(&device->wsi_device,
+                                              pSurfaceInfo,
+                                              pSurfaceFormatCount,
+                                              pSurfaceFormats);
+}
+
 VkResult radv_GetPhysicalDeviceSurfacePresentModesKHR(
        VkPhysicalDevice                            physicalDevice,
        VkSurfaceKHR                                surface,