summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Turner <mattst88@gentoo.org>2024-11-09 11:03:39 -0500
committerMatt Turner <mattst88@gentoo.org>2024-11-09 11:48:25 -0500
commitc713bb8a49787ff51043eb0956ed31ea5b11a665 (patch)
tree484f9904fea00236aae2b89e18ce7a3790eb62ad /media-libs
parentapp-portage/time64-prep: Add package, v1 (diff)
downloadgentoo-c713bb8a49787ff51043eb0956ed31ea5b11a665.tar.gz
gentoo-c713bb8a49787ff51043eb0956ed31ea5b11a665.tar.bz2
gentoo-c713bb8a49787ff51043eb0956ed31ea5b11a665.zip
media-libs/mesa: Add patch to fix swapped colors
Closes: https://bugs.gentoo.org/939429 Signed-off-by: Matt Turner <mattst88@gentoo.org>
Diffstat (limited to 'media-libs')
-rw-r--r--media-libs/mesa/files/24.2.6-dril-Fixup-order-of-pixel-formats-in-drilConfigs.patch85
-rw-r--r--media-libs/mesa/mesa-24.2.6-r2.ebuild (renamed from media-libs/mesa/mesa-24.2.6-r1.ebuild)4
2 files changed, 89 insertions, 0 deletions
diff --git a/media-libs/mesa/files/24.2.6-dril-Fixup-order-of-pixel-formats-in-drilConfigs.patch b/media-libs/mesa/files/24.2.6-dril-Fixup-order-of-pixel-formats-in-drilConfigs.patch
new file mode 100644
index 000000000000..a0d3ef1af912
--- /dev/null
+++ b/media-libs/mesa/files/24.2.6-dril-Fixup-order-of-pixel-formats-in-drilConfigs.patch
@@ -0,0 +1,85 @@
+https://bugs.gentoo.org/939429
+
+From e1098310da6b9fa7e66dc3fe382ae08d88fd1352 Mon Sep 17 00:00:00 2001
+From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Date: Mon, 4 Nov 2024 17:45:45 +1100
+Subject: [PATCH] dril: Fixup order of pixel formats in drilConfigs
+
+Having the RGB* formats before the BGR* formats in the table causes
+problems where under some circumstances, some applications end up
+with the wrong colors.
+
+The repro case for me is: Xvnc + mutter + chromium
+
+There was an existing comment in dri_fill_in_modes() which explained
+the problem. This was lost when dril_target.c was created.
+
+Fixes: ec7afd2c24c ("dril: rework config creation")
+Fixes: 3de62b2f9a6 ("gallium/dril: Compatibility stub for the legacy DRI loader interface")
+
+Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31950>
+---
+ src/gallium/targets/dril/dril_target.c | 36 +++++++++++++++++++-------
+ 1 file changed, 27 insertions(+), 9 deletions(-)
+
+diff --git ./src/gallium/targets/dril/dril_target.c ./src/gallium/targets/dril/dril_target.c
+index 672d50a4182..583728e4093 100644
+--- ./src/gallium/targets/dril/dril_target.c
++++ ./src/gallium/targets/dril/dril_target.c
+@@ -47,25 +47,43 @@
+ CONFIG_ZS(color, PIPE_FORMAT_Z16_UNORM), \
+ CONFIG_ZS(color, PIPE_FORMAT_NONE) \
+
++/*
++ * (copy of a comment in dri_screen.c:dri_fill_in_modes())
++ *
++ * The 32-bit RGBA format must not precede the 32-bit BGRA format.
++ * Likewise for RGBX and BGRX. Otherwise, the GLX client and the GLX
++ * server may disagree on which format the GLXFBConfig represents,
++ * resulting in swapped color channels.
++ *
++ * The problem, as of 2017-05-30:
++ * When matching a GLXFBConfig to a __DRIconfig, GLX ignores the channel
++ * order and chooses the first __DRIconfig with the expected channel
++ * sizes. Specifically, GLX compares the GLXFBConfig's and __DRIconfig's
++ * __DRI_ATTRIB_{CHANNEL}_SIZE but ignores __DRI_ATTRIB_{CHANNEL}_MASK.
++ *
++ * EGL does not suffer from this problem. It correctly compares the
++ * channel masks when matching EGLConfig to __DRIconfig.
++ */
++
+ static const struct gl_config drilConfigs[] = {
+- CONFIG(PIPE_FORMAT_R8G8B8A8_UNORM),
+- CONFIG(PIPE_FORMAT_R8G8B8X8_UNORM),
+ CONFIG(PIPE_FORMAT_B8G8R8A8_UNORM),
+ CONFIG(PIPE_FORMAT_B8G8R8X8_UNORM),
+- CONFIG(PIPE_FORMAT_R10G10B10A2_UNORM),
+- CONFIG(PIPE_FORMAT_R10G10B10X2_UNORM),
++ CONFIG(PIPE_FORMAT_R8G8B8A8_UNORM),
++ CONFIG(PIPE_FORMAT_R8G8B8X8_UNORM),
+ CONFIG(PIPE_FORMAT_B10G10R10A2_UNORM),
+ CONFIG(PIPE_FORMAT_B10G10R10X2_UNORM),
+- CONFIG(PIPE_FORMAT_R5G6B5_UNORM),
+- CONFIG(PIPE_FORMAT_R5G5B5A1_UNORM),
+- CONFIG(PIPE_FORMAT_R5G5B5X1_UNORM),
+- CONFIG(PIPE_FORMAT_R4G4B4A4_UNORM),
+- CONFIG(PIPE_FORMAT_R4G4B4X4_UNORM),
++ CONFIG(PIPE_FORMAT_R10G10B10A2_UNORM),
++ CONFIG(PIPE_FORMAT_R10G10B10X2_UNORM),
+ CONFIG(PIPE_FORMAT_B5G6R5_UNORM),
+ CONFIG(PIPE_FORMAT_B5G5R5A1_UNORM),
+ CONFIG(PIPE_FORMAT_B5G5R5X1_UNORM),
+ CONFIG(PIPE_FORMAT_B4G4R4A4_UNORM),
+ CONFIG(PIPE_FORMAT_B4G4R4X4_UNORM),
++ CONFIG(PIPE_FORMAT_R5G6B5_UNORM),
++ CONFIG(PIPE_FORMAT_R5G5B5A1_UNORM),
++ CONFIG(PIPE_FORMAT_R5G5B5X1_UNORM),
++ CONFIG(PIPE_FORMAT_R4G4B4A4_UNORM),
++ CONFIG(PIPE_FORMAT_R4G4B4X4_UNORM),
+ };
+
+ #define RGB UTIL_FORMAT_COLORSPACE_RGB
+--
+2.45.2
+
diff --git a/media-libs/mesa/mesa-24.2.6-r1.ebuild b/media-libs/mesa/mesa-24.2.6-r2.ebuild
index 3dd7cb3ad57b..a29746c0943b 100644
--- a/media-libs/mesa/mesa-24.2.6-r1.ebuild
+++ b/media-libs/mesa/mesa-24.2.6-r2.ebuild
@@ -187,6 +187,10 @@ BDEPEND="
wayland? ( dev-util/wayland-scanner )
"
+PATCHES=(
+ "${FILESDIR}"/${PV}-dril-Fixup-order-of-pixel-formats-in-drilConfigs.patch
+)
+
QA_WX_LOAD="
x86? (
usr/lib/libglapi.so.0.0.0