wayland/shm: Add support for ABGR8888 and XBGR8888 formats

This avoids shuffling bits for clients drawing in these formats.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2200
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2352>
This commit is contained in:
Jonas Ådahl 2022-03-29 19:03:08 +02:00 committed by Marge Bot
parent eb4307c350
commit 47375897a5

View File

@ -207,6 +207,12 @@ shm_format_to_cogl_pixel_format (enum wl_shm_format shm_format,
format = COGL_PIXEL_FORMAT_ARGB_8888;
components = COGL_TEXTURE_COMPONENTS_RGB;
break;
case WL_SHM_FORMAT_XBGR8888:
components = COGL_TEXTURE_COMPONENTS_RGB;
G_GNUC_FALLTHROUGH;
case WL_SHM_FORMAT_ABGR8888:
format = COGL_PIXEL_FORMAT_ABGR_8888_PRE;
break;
#elif G_BYTE_ORDER == G_LITTLE_ENDIAN
case WL_SHM_FORMAT_RGB565:
format = COGL_PIXEL_FORMAT_RGB_565;
@ -219,6 +225,12 @@ shm_format_to_cogl_pixel_format (enum wl_shm_format shm_format,
format = COGL_PIXEL_FORMAT_BGRA_8888;
components = COGL_TEXTURE_COMPONENTS_RGB;
break;
case WL_SHM_FORMAT_XBGR8888:
components = COGL_TEXTURE_COMPONENTS_RGB;
G_GNUC_FALLTHROUGH;
case WL_SHM_FORMAT_ABGR8888:
format = COGL_PIXEL_FORMAT_RGBA_8888_PRE;
break;
case WL_SHM_FORMAT_XRGB2101010:
components = COGL_TEXTURE_COMPONENTS_RGB;
G_GNUC_FALLTHROUGH;
@ -813,6 +825,8 @@ meta_wayland_init_shm (MetaWaylandCompositor *compositor)
clutter_backend_get_cogl_context (clutter_backend);
static const enum wl_shm_format shm_formats[] = {
WL_SHM_FORMAT_ABGR8888,
WL_SHM_FORMAT_XBGR8888,
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
WL_SHM_FORMAT_RGB565,
WL_SHM_FORMAT_ARGB2101010,