Accepting request 1229753 from X11:XOrg

- aarch64: disable build of etnaviv driver on sle15-sp7 due to
  python3-pycparser >= 2.20 not available

- don't apply patches of previous changelog for s390x; Mesa 24.1.7
  doesn't suffer from this issue, only Mesa 24.3.1 ... 

- 0001-dri-don-t-fetch-X11-modifiers-if-we-don-t-support-th.patch
  0002-egl-wayland-only-supply-LINEAR-modifier-when-support.patch
  0003-egl-wayland-fallback-to-implicit-modifiers-if-advert.patch
  * fixes mesa 24.3.1 gallium crash/segfault on GPUs without
    format modifiers (mesa issue#12253, mesa MR#32535, boo#1234302)

OBS-URL: https://build.opensuse.org/request/show/1229753
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/Mesa?expand=0&rev=525
This commit is contained in:
Ana Guerrero 2024-12-10 22:43:12 +00:00 committed by Git OBS Bridge
commit 6d5ce89d1a
5 changed files with 214 additions and 0 deletions

View File

@ -0,0 +1,44 @@
From 35852799aef8efdb4516c51913f86cd7d795a8d7 Mon Sep 17 00:00:00 2001
From: Simon Ser <contact@emersion.fr>
Date: Sat, 7 Dec 2024 13:10:04 +0100
Subject: [PATCH 1/3] dri: don't fetch X11 modifiers if we don't support them
If we supply modifiers to dri_create_image_with_modifiers() and
the driver doesn't support them, the function will fail. The X11
server always supports implicit modifiers so we can always fall
back to that.
Signed-off-by: Simon Ser <contact@emersion.fr>
Fixes: 4c065158927d ("dri: revert INVALID modifier special-casing")
---
src/gallium/frontends/dri/loader_dri3_helper.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/gallium/frontends/dri/loader_dri3_helper.c b/src/gallium/frontends/dri/loader_dri3_helper.c
index 268ec3d86c8..e1f51619c5f 100644
--- a/src/gallium/frontends/dri/loader_dri3_helper.c
+++ b/src/gallium/frontends/dri/loader_dri3_helper.c
@@ -36,9 +36,11 @@
#include "loader_dri_helper.h"
#include "loader_dri3_helper.h"
+#include "pipe/p_screen.h"
#include "util/macros.h"
#include "util/simple_mtx.h"
#include "drm-uapi/drm_fourcc.h"
+#include "dri_screen.h"
#include "dri_util.h"
/**
@@ -1401,7 +1403,7 @@ dri3_alloc_render_buffer(struct loader_dri3_drawable *draw, unsigned int fourcc,
if (draw->dri_screen_render_gpu == draw->dri_screen_display_gpu) {
#ifdef HAVE_X11_DRM
- if (draw->multiplanes_available) {
+ if (draw->multiplanes_available && draw->dri_screen_render_gpu->base.screen->resource_create_with_modifiers) {
xcb_dri3_get_supported_modifiers_cookie_t mod_cookie;
xcb_dri3_get_supported_modifiers_reply_t *mod_reply;
xcb_generic_error_t *error = NULL;
--
2.43.0

View File

@ -0,0 +1,72 @@
From 3c78ff12864e87d5a293cea55ebd1ae9ca3e6df0 Mon Sep 17 00:00:00 2001
From: Simon Ser <contact@emersion.fr>
Date: Sat, 7 Dec 2024 13:12:40 +0100
Subject: [PATCH 2/3] egl/wayland: only supply LINEAR modifier when supported
If we supply modifiers to dri_create_image_with_modifiers() and
the driver doesn't support them, the function will fail. We pass
__DRI_IMAGE_USE_LINEAR anyways so stripping the modifier is fine.
Signed-off-by: Simon Ser <contact@emersion.fr>
Fixes: 4c065158927d ("dri: revert INVALID modifier special-casing")
---
src/egl/drivers/dri2/platform_wayland.c | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c
index 513d2d0709b..472665a36b0 100644
--- a/src/egl/drivers/dri2/platform_wayland.c
+++ b/src/egl/drivers/dri2/platform_wayland.c
@@ -45,11 +45,13 @@
#include "util/u_vector.h"
#include "util/format/u_formats.h"
#include "main/glconfig.h"
+#include "pipe/p_screen.h"
#include "egl_dri2.h"
#include "eglglobals.h"
#include "kopper_interface.h"
#include "loader.h"
#include "loader_dri_helper.h"
+#include "dri_screen.h"
#include "dri_util.h"
#include <loader_wayland_helper.h>
@@ -1193,14 +1195,25 @@ get_back_bo(struct dri2_egl_surface *dri2_surf)
if (dri2_dpy->fd_render_gpu != dri2_dpy->fd_display_gpu &&
dri2_surf->back->linear_copy == NULL) {
uint64_t linear_mod = DRM_FORMAT_MOD_LINEAR;
+ const uint64_t *render_modifiers = NULL, *display_modifiers = NULL;
+ unsigned int render_num_modifiers = 0, display_num_modifiers = 0;
struct dri_image *linear_copy_display_gpu_image = NULL;
+ if (dri2_dpy->dri_screen_render_gpu->base.screen->resource_create_with_modifiers) {
+ render_modifiers = &linear_mod;
+ render_num_modifiers = 1;
+ }
+ if (dri2_dpy->dri_screen_display_gpu->base.screen->resource_create_with_modifiers) {
+ display_modifiers = &linear_mod;
+ display_num_modifiers = 1;
+ }
+
if (dri2_dpy->dri_screen_display_gpu) {
linear_copy_display_gpu_image = dri_create_image_with_modifiers(
dri2_dpy->dri_screen_display_gpu,
dri2_surf->base.Width, dri2_surf->base.Height,
linear_pipe_format, use_flags | __DRI_IMAGE_USE_LINEAR,
- &linear_mod, 1, NULL);
+ display_modifiers, display_num_modifiers, NULL);
if (linear_copy_display_gpu_image) {
int i, ret = 1;
@@ -1285,7 +1298,7 @@ get_back_bo(struct dri2_egl_surface *dri2_surf)
dri2_dpy->dri_screen_render_gpu,
dri2_surf->base.Width, dri2_surf->base.Height,
linear_pipe_format, use_flags | __DRI_IMAGE_USE_LINEAR,
- &linear_mod, 1, NULL);
+ render_modifiers, render_num_modifiers, NULL);
}
if (dri2_surf->back->linear_copy == NULL)
--
2.43.0

View File

@ -0,0 +1,63 @@
From bf278ee26628898b674d86d39198babe0174f8bf Mon Sep 17 00:00:00 2001
From: Simon Ser <contact@emersion.fr>
Date: Sat, 7 Dec 2024 13:15:57 +0100
Subject: [PATCH 3/3] egl/wayland: fallback to implicit modifiers if advertised
by compositor
The Wayland protocol defines INVALID as a special marker indicating
that implicit modifiers are supported. If the driver doesn't support
explicit modifiers and the compositor advertises support for implicit
modifiers, fallback to these.
This effectively restores logic removed in 4c065158927d, but only
for the specific case of Wayland instead of affecting all APIs.
(Wayland is one of the few APIs defining a special meaning for
INVALID.)
Signed-off-by: Simon Ser <contact@emersion.fr>
Fixes: 4c065158927d ("dri: revert INVALID modifier special-casing")
---
src/egl/drivers/dri2/platform_wayland.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c
index 472665a36b0..2406bc18b74 100644
--- a/src/egl/drivers/dri2/platform_wayland.c
+++ b/src/egl/drivers/dri2/platform_wayland.c
@@ -1010,6 +1010,7 @@ create_dri_image(struct dri2_egl_surface *dri2_surf,
uint64_t *modifiers;
unsigned int num_modifiers;
struct u_vector *modifiers_present;
+ bool implicit_mod_supported;
assert(visual_idx != -1);
@@ -1049,6 +1050,25 @@ create_dri_image(struct dri2_egl_surface *dri2_surf,
num_modifiers = u_vector_length(modifiers_present);
}
+ if (!dri2_dpy->dri_screen_render_gpu->base.screen->resource_create_with_modifiers) {
+ /* We don't support explicit modifiers, check if the compositor supports
+ * implicit modifiers. */
+ implicit_mod_supported = false;
+ for (unsigned int i = 0; i < num_modifiers; i++) {
+ if (modifiers[i] == DRM_FORMAT_MOD_INVALID) {
+ implicit_mod_supported = true;
+ break;
+ }
+ }
+
+ if (!implicit_mod_supported) {
+ return;
+ }
+
+ num_modifiers = 0;
+ modifiers = NULL;
+ }
+
/* For the purposes of this function, an INVALID modifier on
* its own means the modifiers aren't supported. */
if (num_modifiers == 0 ||
--
2.43.0

View File

@ -1,3 +1,24 @@
-------------------------------------------------------------------
Mon Dec 9 19:04:25 UTC 2024 - Stefan Dirsch <sndirsch@suse.com>
- aarch64: disable build of etnaviv driver on sle15-sp7 due to
python3-pycparser >= 2.20 not available
-------------------------------------------------------------------
Mon Dec 9 14:36:46 UTC 2024 - Stefan Dirsch <sndirsch@suse.com>
- don't apply patches of previous changelog for s390x; Mesa 24.1.7
doesn't suffer from this issue, only Mesa 24.3.1 ...
-------------------------------------------------------------------
Sun Dec 8 21:58:37 UTC 2024 - Stefan Dirsch <sndirsch@suse.com>
- 0001-dri-don-t-fetch-X11-modifiers-if-we-don-t-support-th.patch
0002-egl-wayland-only-supply-LINEAR-modifier-when-support.patch
0003-egl-wayland-fallback-to-implicit-modifiers-if-advert.patch
* fixes mesa 24.3.1 gallium crash/segfault on GPUs without
format modifiers (mesa issue#12253, mesa MR#32535, boo#1234302)
-------------------------------------------------------------------
Thu Dec 5 03:00:23 UTC 2024 - Stefan Dirsch <sndirsch@suse.com>

View File

@ -202,6 +202,9 @@ Patch500: u_dep_xcb.patch
%else
Patch500: u_dep_xcb-s390x.patch
%endif
Patch501: 0001-dri-don-t-fetch-X11-modifiers-if-we-don-t-support-th.patch
Patch502: 0002-egl-wayland-only-supply-LINEAR-modifier-when-support.patch
Patch503: 0003-egl-wayland-fallback-to-implicit-modifiers-if-advert.patch
%ifnarch s390x
Patch1222040: u_mesa-CVE-2023-45913.patch
%else
@ -292,8 +295,10 @@ Obsoletes: libXvMC_r600 < %{version}
Provides: libtxc_dxtn = %{version}
Obsoletes: libtxc_dxtn < %{version}
%ifarch %{arm} aarch64
%if 0%{?suse_version} >= 1550
BuildRequires: python3-pycparser >= 2.20
BuildRequires: pkgconfig(libdrm_etnaviv) >= 2.4.89
%endif
BuildRequires: pkgconfig(libdrm_freedreno) >= 2.4.74
BuildRequires: pkgconfig(libelf)
%endif
@ -873,6 +878,11 @@ cp %{SOURCE6} subprojects/packagecache/
%patch -P 100 -p1
%patch -P 400 -p1
%patch -P 500 -p1
%ifnarch s390x
%patch -P 501 -p1
%patch -P 502 -p1
%patch -P 503 -p1
%endif
%patch -P 1222040 -p1
%patch -P 1222041 -p1
%patch -P 1222042 -p1
@ -966,7 +976,11 @@ egl_platforms=x11,wayland
-Dgallium-d3d12-graphics=enabled \
%else
%ifarch %{arm} aarch64
%if 0%{?suse_version} >= 1550
-Dgallium-drivers=r300,r600,radeonsi,nouveau,softpipe,llvmpipe,virgl,iris,freedreno,vc4,etnaviv,lima,panfrost,v3d,svga,tegra,zink \
%else
-Dgallium-drivers=r300,r600,radeonsi,nouveau,softpipe,llvmpipe,virgl,iris,freedreno,vc4,lima,panfrost,v3d,svga,tegra,zink \
%endif
%else
%ifarch ppc64 ppc64le riscv64
-Dgallium-drivers=r300,r600,radeonsi,nouveau,softpipe,llvmpipe,virgl,iris,zink \