[mutter] wayland-dma-buf: Fix 32bpp channel order inversion



commit 06d09890147b48bfa23f122ff86cf7fc43ff84f2
Author: Daniel Stone <daniels collabora com>
Date:   Thu Aug 24 10:14:31 2017 +0100

    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 files changed, 2 insertions(+), 5 deletions(-)
---
diff --git a/src/wayland/meta-wayland-dma-buf.c b/src/wayland/meta-wayland-dma-buf.c
index 93bf32b..e5d2f7c 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;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]