diff --git a/0001-dril-Fixup-order-of-pixel-formats-in-drilConfigs.patch b/0001-dril-Fixup-order-of-pixel-formats-in-drilConfigs.patch new file mode 100644 index 0000000..810acf3 --- /dev/null +++ b/0001-dril-Fixup-order-of-pixel-formats-in-drilConfigs.patch @@ -0,0 +1,82 @@ +From 917e7e7df07b4523f1160e2a32d5e3ece3d74287 Mon Sep 17 00:00:00 2001 +From: Benjamin Herrenschmidt +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 +--- + src/gallium/targets/dril/dril_target.c | 36 +++++++++++++++++++------- + 1 file changed, 27 insertions(+), 9 deletions(-) + +diff --git a/src/gallium/targets/dril/dril_target.c b/src/gallium/targets/dril/dril_target.c +index 672d50a4182..583728e4093 100644 +--- a/src/gallium/targets/dril/dril_target.c ++++ b/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.43.0 + diff --git a/Mesa.changes b/Mesa.changes index 8d2c1af..36aae33 100644 --- a/Mesa.changes +++ b/Mesa.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Wed Nov 6 17:34:15 UTC 2024 - Stefan Dirsch + +- 0001-dril-Fixup-order-of-pixel-formats-in-drilConfigs.patch + * fixes colors for 'swrast' driver (boo#1230637, gitlab issue#11840) + ------------------------------------------------------------------- Thu Oct 31 19:35:20 UTC 2024 - Marcus Rueckert diff --git a/Mesa.spec b/Mesa.spec index c1ffacd..36160fe 100644 --- a/Mesa.spec +++ b/Mesa.spec @@ -1,5 +1,5 @@ # -# spec file for package Mesa +# spec file # # Copyright (c) 2024 SUSE LLC # @@ -184,6 +184,7 @@ Patch54: n_drirc-disable-rgb10-for-chromium-on-amd.patch Patch58: u_dep_xcb.patch Patch100: U_fix-mpeg1_2-decode-mesa-20.2.patch Patch400: n_stop-iris-flicker.patch +Patch500: 0001-dril-Fixup-order-of-pixel-formats-in-drilConfigs.patch Patch1222040: u_mesa-CVE-2023-45913.patch Patch1222041: u_mesa-CVE-2023-45919.patch Patch1222042: u_mesa-CVE-2023-45922.patch @@ -851,6 +852,7 @@ cp %{SOURCE6} subprojects/packagecache/ %patch -P 58 -p1 %patch -P 100 -p1 %patch -P 400 -p1 +%patch -P 500 -p1 %patch -P 1222040 -p1 %patch -P 1222041 -p1 %patch -P 1222042 -p1