46 lines
1.7 KiB
Diff
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
|
||
|
|