vulkan/wsi/wayland: de-duplicate wsi_wl_display_add_wl_shm_format
authorSimon Ser <contact@emersion.fr>
Fri, 4 Feb 2022 11:10:09 +0000 (12:10 +0100)
committerMarge Bot <emma+marge@anholt.net>
Tue, 15 Feb 2022 09:13:21 +0000 (09:13 +0000)
Re-use wsi_wl_display_add_drm_format_modifier from
wsi_wl_display_add_wl_shm_format instead of maintaining two
separate switches for DRM and shm formats.

Signed-off-by: Simon Ser <contact@emersion.fr>
Reviewed-by: Georg Lehmann <dadschoorse@gmail.com>
Acked-by: Daniel Stone <daniels@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14874>

src/vulkan/wsi/wsi_common_wayland.c

index 223bb0a..84355b0 100644 (file)
@@ -349,61 +349,31 @@ wsi_wl_display_add_drm_format_modifier(struct wsi_wl_display *display,
    }
 }
 
-static void
-wsi_wl_display_add_wl_shm_format(struct wsi_wl_display *display,
-                                 struct u_vector *formats,
-                                 enum wl_shm_format wl_shm_format)
+static uint32_t
+drm_format_for_wl_shm_format(enum wl_shm_format shm_format)
 {
-   switch (wl_shm_format) {
-   case WL_SHM_FORMAT_XBGR8888:
-      wsi_wl_display_add_vk_format(display, formats,
-                                   VK_FORMAT_R8G8B8_SRGB,
-                                   WSI_WL_FMT_ALPHA | WSI_WL_FMT_OPAQUE);
-      wsi_wl_display_add_vk_format(display, formats,
-                                   VK_FORMAT_R8G8B8_UNORM,
-                                   WSI_WL_FMT_ALPHA | WSI_WL_FMT_OPAQUE);
-      wsi_wl_display_add_vk_format(display, formats,
-                                   VK_FORMAT_R8G8B8A8_SRGB,
-                                   WSI_WL_FMT_OPAQUE);
-      wsi_wl_display_add_vk_format(display, formats,
-                                   VK_FORMAT_R8G8B8A8_UNORM,
-                                   WSI_WL_FMT_OPAQUE);
-      break;
-   case WL_SHM_FORMAT_ABGR8888:
-      wsi_wl_display_add_vk_format(display, formats,
-                                   VK_FORMAT_R8G8B8A8_SRGB,
-                                   WSI_WL_FMT_ALPHA);
-      wsi_wl_display_add_vk_format(display, formats,
-                                   VK_FORMAT_R8G8B8A8_UNORM,
-                                   WSI_WL_FMT_ALPHA);
-      break;
-   case WL_SHM_FORMAT_XRGB8888:
-      wsi_wl_display_add_vk_format(display, formats,
-                                   VK_FORMAT_B8G8R8_SRGB,
-                                   WSI_WL_FMT_ALPHA | WSI_WL_FMT_OPAQUE);
-      wsi_wl_display_add_vk_format(display, formats,
-                                   VK_FORMAT_B8G8R8_UNORM,
-                                   WSI_WL_FMT_ALPHA | WSI_WL_FMT_OPAQUE);
-      wsi_wl_display_add_vk_format(display, formats,
-                                   VK_FORMAT_B8G8R8A8_SRGB,
-                                   WSI_WL_FMT_OPAQUE);
-      wsi_wl_display_add_vk_format(display, formats,
-                                   VK_FORMAT_B8G8R8A8_UNORM,
-                                   WSI_WL_FMT_OPAQUE);
-      break;
+   /* wl_shm formats are identical to DRM, except ARGB8888 and XRGB8888 */
+   switch (shm_format) {
    case WL_SHM_FORMAT_ARGB8888:
-      wsi_wl_display_add_vk_format(display, formats,
-                                   VK_FORMAT_B8G8R8A8_SRGB,
-                                   WSI_WL_FMT_ALPHA);
-      wsi_wl_display_add_vk_format(display, formats,
-                                   VK_FORMAT_B8G8R8A8_UNORM,
-                                   WSI_WL_FMT_ALPHA);
-      break;
+      return DRM_FORMAT_ARGB8888;
+   case WL_SHM_FORMAT_XRGB8888:
+      return DRM_FORMAT_XRGB8888;
    default:
-      break; /* Ignore */
+      return shm_format;
    }
 }
 
+static void
+wsi_wl_display_add_wl_shm_format(struct wsi_wl_display *display,
+                                 struct u_vector *formats,
+                                 enum wl_shm_format shm_format)
+{
+   uint32_t drm_format = drm_format_for_wl_shm_format(shm_format);
+
+   wsi_wl_display_add_drm_format_modifier(display, formats, drm_format,
+                                          DRM_FORMAT_MOD_INVALID);
+}
+
 static uint32_t
 wl_drm_format_for_vk_format(VkFormat vk_format, bool alpha)
 {