mutter/0001-wayland-dma-buf-Fix-32bpp-channel-order-inversion.patch
Bastien Nocera 6974a7c486 + mutter-3.25.91-2
Fix inverted red and blue channels with newer Mesa
2017-08-24 12:13:41 +02:00

46 lines
1.7 KiB
Diff

From 51f867457faf8cf660080e64c148a8470af26e45 Mon Sep 17 00:00:00 2001
From: Daniel Stone <daniels@collabora.com>
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
Signed-off-by: Daniel Stone <daniels@collabora.com>
---
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;
--
2.13.5