From 06d09890147b48bfa23f122ff86cf7fc43ff84f2 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Thu, 24 Aug 2017 10:14:31 +0100 Subject: [PATCH] wayland-dma-buf: Fix 32bpp channel order inversion Apparently my understanding of Cogl pixel formats, or at least their use, was somewhat shaky. Un-invert the inversion of the DRM FourCC -> Cogl pixel format mapping when creating dmabufs from clients, fixing inverted channel ordering seen from GL clients, e.g. gold highlights in gtk4-demo when using the GSK GL backend when they should be blue. https://bugzilla.gnome.org/show_bug.cgi?id=786677 --- src/wayland/meta-wayland-dma-buf.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/wayland/meta-wayland-dma-buf.c b/src/wayland/meta-wayland-dma-buf.c index 93bf32beb..e5d2f7c35 100644 --- a/src/wayland/meta-wayland-dma-buf.c +++ b/src/wayland/meta-wayland-dma-buf.c @@ -83,16 +83,13 @@ meta_wayland_dma_buf_buffer_attach (MetaWaylandBuffer *buffer, if (buffer->texture) return TRUE; - /* DRM_FORMAT_* enums consider the entire pixel as a single packed quantity, - * with little-endian ordering. COGL_PIXEL_FORMAT_* is in byte order when - * each channel is an 8-byte unit. Hence these have order swapped. */ switch (dma_buf->drm_format) { case DRM_FORMAT_XRGB8888: - cogl_format = COGL_PIXEL_FORMAT_BGR_888; + cogl_format = COGL_PIXEL_FORMAT_RGB_888; break; case DRM_FORMAT_ARGB8888: - cogl_format = COGL_PIXEL_FORMAT_BGRA_8888_PRE; + cogl_format = COGL_PIXEL_FORMAT_ARGB_8888_PRE; break; case DRM_FORMAT_ARGB2101010: cogl_format = COGL_PIXEL_FORMAT_ARGB_2101010_PRE;