parent
c884df9cdc
commit
f58e7ec96c
63
0001-renderer-native-Log-render-mode-per-device.patch
Normal file
63
0001-renderer-native-Log-render-mode-per-device.patch
Normal file
@ -0,0 +1,63 @@
|
||||
From fa70ee1cd78e2b161545bc47a1c1083063030f77 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Mon, 11 Oct 2021 10:52:43 +0200
|
||||
Subject: [PATCH 1/5] renderer/native: Log render mode per device
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2051>
|
||||
(cherry picked from commit e8249a572d669c4c0a8464d6bce556b2cbaca4ef)
|
||||
(cherry picked from commit fe0ea79b83256d80f1dee1e4a49c94a5d6fd18a6)
|
||||
---
|
||||
src/backends/native/meta-renderer-native.c | 30 ++++++++++++++++++++++
|
||||
1 file changed, 30 insertions(+)
|
||||
|
||||
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c
|
||||
index 735c37202..f92f648e5 100644
|
||||
--- a/src/backends/native/meta-renderer-native.c
|
||||
+++ b/src/backends/native/meta-renderer-native.c
|
||||
@@ -1808,6 +1808,24 @@ meta_renderer_native_create_renderer_gpu_data (MetaRendererNative *renderer_nat
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+static const char *
|
||||
+renderer_data_mode_to_string (MetaRendererNativeMode mode)
|
||||
+{
|
||||
+ switch (mode)
|
||||
+ {
|
||||
+ case META_RENDERER_NATIVE_MODE_GBM:
|
||||
+ return "gbm";
|
||||
+ case META_RENDERER_NATIVE_MODE_SURFACELESS:
|
||||
+ return "surfaceless";
|
||||
+#ifdef HAVE_EGL_DEVICE
|
||||
+ case META_RENDERER_NATIVE_MODE_EGL_DEVICE:
|
||||
+ return "egldevice";
|
||||
+#endif
|
||||
+ }
|
||||
+
|
||||
+ g_assert_not_reached ();
|
||||
+}
|
||||
+
|
||||
static gboolean
|
||||
create_renderer_gpu_data (MetaRendererNative *renderer_native,
|
||||
MetaGpuKms *gpu_kms,
|
||||
@@ -1822,6 +1840,18 @@ create_renderer_gpu_data (MetaRendererNative *renderer_native,
|
||||
if (!renderer_gpu_data)
|
||||
return FALSE;
|
||||
|
||||
+ if (gpu_kms)
|
||||
+ {
|
||||
+ g_message ("Created %s renderer for '%s'",
|
||||
+ renderer_data_mode_to_string (renderer_gpu_data->mode),
|
||||
+ meta_gpu_kms_get_file_path (gpu_kms));
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ g_message ("Created %s renderer without GPU",
|
||||
+ renderer_data_mode_to_string (renderer_gpu_data->mode));
|
||||
+ }
|
||||
+
|
||||
g_hash_table_insert (renderer_native->gpu_datas,
|
||||
gpu_kms,
|
||||
renderer_gpu_data);
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,94 @@
|
||||
From 425710866438a62843b96272a6cbc6c22174f10c Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Mon, 11 Oct 2021 10:39:43 +0200
|
||||
Subject: [PATCH 2/5] renderer/native: Try the gbm renderer before the
|
||||
EGLDevice renderer
|
||||
|
||||
This switches the order of what renderer mode is tried first, so that
|
||||
the gbm renderer mode is preferred on an NVIDIA driver where it is
|
||||
supported.
|
||||
|
||||
We fall back to still try the EGLDevice renderer mode if the created gbm
|
||||
renderer is not hardware accelerated.
|
||||
|
||||
The last fallback is still to use the gbm renderer, even if it is not
|
||||
hardware accelerated, as this is needed when hardware acceleration isn't
|
||||
available at all. The original reason for the old order was due to the
|
||||
fact that a gbm renderer without hardware acceleration would succeed
|
||||
even on NVIDIA driver that didn't support gbm.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2051>
|
||||
(cherry picked from commit 8fc1325e8e713dfa05a12c47e6e981e50d3cda61)
|
||||
---
|
||||
src/backends/native/meta-renderer-native.c | 44 +++++++++++-----------
|
||||
1 file changed, 23 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c
|
||||
index f92f648e5..c851619a1 100644
|
||||
--- a/src/backends/native/meta-renderer-native.c
|
||||
+++ b/src/backends/native/meta-renderer-native.c
|
||||
@@ -1754,38 +1754,40 @@ meta_renderer_native_create_renderer_gpu_data (MetaRendererNative *renderer_nat
|
||||
MetaGpuKms *gpu_kms,
|
||||
GError **error)
|
||||
{
|
||||
- MetaRendererNativeGpuData *renderer_gpu_data;
|
||||
+ MetaRendererNativeGpuData *gbm_renderer_gpu_data;
|
||||
GError *gbm_error = NULL;
|
||||
#ifdef HAVE_EGL_DEVICE
|
||||
+ MetaRendererNativeGpuData *egl_stream_renderer_gpu_data;
|
||||
GError *egl_device_error = NULL;
|
||||
#endif
|
||||
|
||||
if (!gpu_kms)
|
||||
return create_renderer_gpu_data_surfaceless (renderer_native, error);
|
||||
|
||||
-#ifdef HAVE_EGL_DEVICE
|
||||
- /* Try to initialize the EGLDevice backend first. Whenever we use a
|
||||
- * non-NVIDIA GPU, the EGLDevice enumeration function won't find a match, and
|
||||
- * we'll fall back to GBM (which will always succeed as it has a software
|
||||
- * rendering fallback)
|
||||
- */
|
||||
- renderer_gpu_data = create_renderer_gpu_data_egl_device (renderer_native,
|
||||
- gpu_kms,
|
||||
- &egl_device_error);
|
||||
- if (renderer_gpu_data)
|
||||
- return renderer_gpu_data;
|
||||
-#endif
|
||||
-
|
||||
- renderer_gpu_data = create_renderer_gpu_data_gbm (renderer_native,
|
||||
- gpu_kms,
|
||||
- &gbm_error);
|
||||
- if (renderer_gpu_data)
|
||||
+ gbm_renderer_gpu_data = create_renderer_gpu_data_gbm (renderer_native,
|
||||
+ gpu_kms,
|
||||
+ &gbm_error);
|
||||
+ if (gbm_renderer_gpu_data)
|
||||
{
|
||||
+ if (gbm_renderer_gpu_data->secondary.is_hardware_rendering)
|
||||
+ return gbm_renderer_gpu_data;
|
||||
+ }
|
||||
+
|
||||
#ifdef HAVE_EGL_DEVICE
|
||||
- g_error_free (egl_device_error);
|
||||
-#endif
|
||||
- return renderer_gpu_data;
|
||||
+ egl_stream_renderer_gpu_data =
|
||||
+ create_renderer_gpu_data_egl_device (renderer_native,
|
||||
+ gpu_kms,
|
||||
+ &egl_device_error);
|
||||
+ if (egl_stream_renderer_gpu_data)
|
||||
+ {
|
||||
+ g_clear_pointer (&gbm_renderer_gpu_data,
|
||||
+ meta_renderer_native_gpu_data_free);
|
||||
+ return egl_stream_renderer_gpu_data;
|
||||
}
|
||||
+#endif
|
||||
+
|
||||
+ if (gbm_renderer_gpu_data)
|
||||
+ return gbm_renderer_gpu_data;
|
||||
|
||||
g_set_error (error, G_IO_ERROR,
|
||||
G_IO_ERROR_FAILED,
|
||||
--
|
||||
2.35.1
|
||||
|
100
0003-wayland-Only-init-EGLStream-controller-if-we-didn-t-.patch
Normal file
100
0003-wayland-Only-init-EGLStream-controller-if-we-didn-t-.patch
Normal file
@ -0,0 +1,100 @@
|
||||
From 07f63ad466b66cc02b49a326789686bce9325201 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Thu, 14 Oct 2021 18:36:43 +0200
|
||||
Subject: [PATCH 3/5] wayland: Only init EGLStream controller if we didn't end
|
||||
up with gbm
|
||||
|
||||
When we use gbm together with the NVIDIA driver, we want the EGL/Vulkan
|
||||
clients to do the same, instead of using the EGLStream paths. To achieve
|
||||
that, make sure to only initialize the EGLStream controller when we
|
||||
didn't end up using gbm as the renderer backend.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2052>
|
||||
(cherry picked from commit ac907119ae0f415c099976635c3b1dff4d2d7201)
|
||||
(cherry picked from commit e3931f7b8cbd44072137c5dc9de9041486daeade)
|
||||
---
|
||||
src/backends/native/meta-renderer-native.c | 11 +++++++++
|
||||
src/backends/native/meta-renderer-native.h | 2 ++
|
||||
src/wayland/meta-wayland.c | 26 ++++++++++++++++++++--
|
||||
3 files changed, 37 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c
|
||||
index c851619a1..e7460fbf1 100644
|
||||
--- a/src/backends/native/meta-renderer-native.c
|
||||
+++ b/src/backends/native/meta-renderer-native.c
|
||||
@@ -201,6 +201,17 @@ meta_renderer_native_has_pending_mode_set (MetaRendererNative *renderer_native)
|
||||
return renderer_native->pending_mode_set;
|
||||
}
|
||||
|
||||
+MetaRendererNativeMode
|
||||
+meta_renderer_native_get_mode (MetaRendererNative *renderer_native)
|
||||
+{
|
||||
+ MetaGpuKms *primary_gpu = renderer_native->primary_gpu_kms;
|
||||
+ MetaRendererNativeGpuData *primary_gpu_data;
|
||||
+
|
||||
+ primary_gpu_data = meta_renderer_native_get_gpu_data (renderer_native,
|
||||
+ primary_gpu);
|
||||
+ return primary_gpu_data->mode;
|
||||
+}
|
||||
+
|
||||
static void
|
||||
meta_renderer_native_disconnect (CoglRenderer *cogl_renderer)
|
||||
{
|
||||
diff --git a/src/backends/native/meta-renderer-native.h b/src/backends/native/meta-renderer-native.h
|
||||
index 9475e1857..8c06c2473 100644
|
||||
--- a/src/backends/native/meta-renderer-native.h
|
||||
+++ b/src/backends/native/meta-renderer-native.h
|
||||
@@ -66,4 +66,6 @@ void meta_renderer_native_reset_modes (MetaRendererNative *renderer_native);
|
||||
|
||||
gboolean meta_renderer_native_use_modifiers (MetaRendererNative *renderer_native);
|
||||
|
||||
+MetaRendererNativeMode meta_renderer_native_get_mode (MetaRendererNative *renderer_native);
|
||||
+
|
||||
#endif /* META_RENDERER_NATIVE_H */
|
||||
diff --git a/src/wayland/meta-wayland.c b/src/wayland/meta-wayland.c
|
||||
index 8f16aa429..a3f098410 100644
|
||||
--- a/src/wayland/meta-wayland.c
|
||||
+++ b/src/wayland/meta-wayland.c
|
||||
@@ -50,6 +50,10 @@
|
||||
#include "wayland/meta-xwayland-private.h"
|
||||
#include "wayland/meta-xwayland.h"
|
||||
|
||||
+#ifdef HAVE_NATIVE_BACKEND
|
||||
+#include "backends/native/meta-renderer-native.h"
|
||||
+#endif
|
||||
+
|
||||
static char *_display_name_override;
|
||||
|
||||
G_DEFINE_TYPE (MetaWaylandCompositor, meta_wayland_compositor, G_TYPE_OBJECT)
|
||||
@@ -521,8 +525,26 @@ meta_wayland_compositor_setup (MetaWaylandCompositor *compositor)
|
||||
compositor);
|
||||
|
||||
#ifdef HAVE_WAYLAND_EGLSTREAM
|
||||
- meta_wayland_eglstream_controller_init (compositor);
|
||||
-#endif
|
||||
+ {
|
||||
+ gboolean should_enable_eglstream_controller = TRUE;
|
||||
+#if defined(HAVE_EGL_DEVICE) && defined(HAVE_NATIVE_BACKEND)
|
||||
+ MetaBackend *backend = meta_get_backend ();
|
||||
+ MetaRenderer *renderer = meta_backend_get_renderer (backend);
|
||||
+
|
||||
+ if (META_IS_RENDERER_NATIVE (renderer))
|
||||
+ {
|
||||
+ MetaRendererNative *renderer_native = META_RENDERER_NATIVE (renderer);
|
||||
+
|
||||
+ if (meta_renderer_native_get_mode (renderer_native) ==
|
||||
+ META_RENDERER_NATIVE_MODE_GBM)
|
||||
+ should_enable_eglstream_controller = FALSE;
|
||||
+ }
|
||||
+#endif /* defined(HAVE_EGL_DEVICE) && defined(HAVE_NATIVE_BACKEND) */
|
||||
+
|
||||
+ if (should_enable_eglstream_controller)
|
||||
+ meta_wayland_eglstream_controller_init (compositor);
|
||||
+ }
|
||||
+#endif /* HAVE_WAYLAND_EGLSTREAM */
|
||||
|
||||
if (meta_get_x11_display_policy () != META_DISPLAY_POLICY_DISABLED)
|
||||
{
|
||||
--
|
||||
2.35.1
|
||||
|
70
0004-renderer-native-Allow-forcing-EGLStream-backend.patch
Normal file
70
0004-renderer-native-Allow-forcing-EGLStream-backend.patch
Normal file
@ -0,0 +1,70 @@
|
||||
From 4c23158f81c3c4b91353150fd4c28246ce1e692f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Fri, 3 Dec 2021 11:07:00 +0100
|
||||
Subject: [PATCH 4/5] renderer/native: Allow forcing EGLStream backend
|
||||
|
||||
The GBM support in the NVIDIA driver is fairly new, and to make it
|
||||
easier to identify whether a problem encountered is related to using GBM
|
||||
instead of EGLStreams, add a debug environment variable to force using
|
||||
EGLStream instead of GBM.
|
||||
|
||||
To force using EGLStream instead of GBM, use
|
||||
|
||||
MUTTER_DEBUG_FORCE_EGL_STREAM=1
|
||||
|
||||
Related: https://gitlab.gnome.org/GNOME/mutter/-/issues/2045
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2132>
|
||||
(cherry picked from commit d43cc776ef733251fc02e8e62669ea4ba7e68e2c)
|
||||
---
|
||||
src/backends/native/meta-renderer-native.c | 26 ++++++++++++++++------
|
||||
1 file changed, 19 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c
|
||||
index e7460fbf1..0cd7a27d6 100644
|
||||
--- a/src/backends/native/meta-renderer-native.c
|
||||
+++ b/src/backends/native/meta-renderer-native.c
|
||||
@@ -1765,7 +1765,7 @@ meta_renderer_native_create_renderer_gpu_data (MetaRendererNative *renderer_nat
|
||||
MetaGpuKms *gpu_kms,
|
||||
GError **error)
|
||||
{
|
||||
- MetaRendererNativeGpuData *gbm_renderer_gpu_data;
|
||||
+ MetaRendererNativeGpuData *gbm_renderer_gpu_data = NULL;
|
||||
GError *gbm_error = NULL;
|
||||
#ifdef HAVE_EGL_DEVICE
|
||||
MetaRendererNativeGpuData *egl_stream_renderer_gpu_data;
|
||||
@@ -1775,14 +1775,26 @@ meta_renderer_native_create_renderer_gpu_data (MetaRendererNative *renderer_nat
|
||||
if (!gpu_kms)
|
||||
return create_renderer_gpu_data_surfaceless (renderer_native, error);
|
||||
|
||||
- gbm_renderer_gpu_data = create_renderer_gpu_data_gbm (renderer_native,
|
||||
- gpu_kms,
|
||||
- &gbm_error);
|
||||
- if (gbm_renderer_gpu_data)
|
||||
+#ifdef HAVE_EGL_DEVICE
|
||||
+ if (g_strcmp0 (getenv ("MUTTER_DEBUG_FORCE_EGL_STREAM"), "1") != 0)
|
||||
+#endif
|
||||
+ {
|
||||
+ gbm_renderer_gpu_data = create_renderer_gpu_data_gbm (renderer_native,
|
||||
+ gpu_kms,
|
||||
+ &gbm_error);
|
||||
+ if (gbm_renderer_gpu_data)
|
||||
+ {
|
||||
+ if (gbm_renderer_gpu_data->secondary.is_hardware_rendering)
|
||||
+ return gbm_renderer_gpu_data;
|
||||
+ }
|
||||
+ }
|
||||
+#ifdef HAVE_EGL_DEVICE
|
||||
+ else
|
||||
{
|
||||
- if (gbm_renderer_gpu_data->secondary.is_hardware_rendering)
|
||||
- return gbm_renderer_gpu_data;
|
||||
+ g_set_error (&gbm_error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
+ "GBM backend was disabled using env var");
|
||||
}
|
||||
+#endif
|
||||
|
||||
#ifdef HAVE_EGL_DEVICE
|
||||
egl_stream_renderer_gpu_data =
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,37 @@
|
||||
From f5ae26bb44c42369cbcf0a9b7da049222b5ecbf8 Mon Sep 17 00:00:00 2001
|
||||
From: Olivier Fourdan <ofourdan@redhat.com>
|
||||
Date: Fri, 10 Dec 2021 10:57:29 +0100
|
||||
Subject: [PATCH 5/5] cursor-renderer/native: Add a means to disable HW cursors
|
||||
|
||||
When dealing with a faulty hardware or bugs in the driver, it might be
|
||||
interesting to force the use of software cursors for debugging purposes.
|
||||
|
||||
Add a debug environment variable MUTTER_DEBUG_DISABLE_HW_CURSORS to
|
||||
disable hardware cursors and force using software cursors.
|
||||
|
||||
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2046
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2150>
|
||||
(cherry picked from commit 56939abd2f1691eea9edf85cb715ebf275944e7e)
|
||||
---
|
||||
src/backends/native/meta-cursor-renderer-native.c | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/backends/native/meta-cursor-renderer-native.c b/src/backends/native/meta-cursor-renderer-native.c
|
||||
index fcfe8eb98..237f9a3d5 100644
|
||||
--- a/src/backends/native/meta-cursor-renderer-native.c
|
||||
+++ b/src/backends/native/meta-cursor-renderer-native.c
|
||||
@@ -1828,7 +1828,10 @@ meta_cursor_renderer_native_new (MetaBackend *backend,
|
||||
|
||||
priv->backend = backend;
|
||||
|
||||
- init_hw_cursor_support (cursor_renderer_native);
|
||||
+ if (g_strcmp0 (getenv ("MUTTER_DEBUG_DISABLE_HW_CURSORS"), "1"))
|
||||
+ init_hw_cursor_support (cursor_renderer_native);
|
||||
+ else
|
||||
+ g_message ("Disabling hardware cursors because MUTTER_DEBUG_DISABLE_HW_CURSORS is set");
|
||||
|
||||
return cursor_renderer_native;
|
||||
}
|
||||
--
|
||||
2.35.1
|
||||
|
19
mutter.spec
19
mutter.spec
@ -10,7 +10,7 @@
|
||||
|
||||
Name: mutter
|
||||
Version: 40.9
|
||||
Release: 6%{?dist}
|
||||
Release: 7%{?dist}
|
||||
Summary: Window and compositing manager based on Clutter
|
||||
|
||||
License: GPLv2+
|
||||
@ -82,6 +82,19 @@ Patch22: 0002-onscreen-native-Pass-damage-rectangles-when-page-fli.patch
|
||||
|
||||
Patch23: 0001-backends-Move-MetaKeyboardA11yFlags-to-a-public-head.patch
|
||||
|
||||
# GBM support with NVIDIA driver
|
||||
# https://bugzilla.redhat.com/2015891
|
||||
# Backports:
|
||||
# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2051
|
||||
# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2052
|
||||
# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2132
|
||||
# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2150
|
||||
Patch24: 0001-renderer-native-Log-render-mode-per-device.patch
|
||||
Patch25: 0002-renderer-native-Try-the-gbm-renderer-before-the-EGLD.patch
|
||||
Patch26: 0003-wayland-Only-init-EGLStream-controller-if-we-didn-t-.patch
|
||||
Patch27: 0004-renderer-native-Allow-forcing-EGLStream-backend.patch
|
||||
Patch28: 0005-cursor-renderer-native-Add-a-means-to-disable-HW-cur.patch
|
||||
|
||||
BuildRequires: chrpath
|
||||
BuildRequires: pango-devel
|
||||
BuildRequires: startup-notification-devel
|
||||
@ -228,6 +241,10 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop
|
||||
%{_datadir}/mutter-%{mutter_api_version}/tests
|
||||
|
||||
%changelog
|
||||
* Mon Jun 20 2022 Olivier Fourdan <ofourdan@redhat.com> - 40.9-7
|
||||
- GBM support with NVIDIA driver
|
||||
Resolves: #2015891
|
||||
|
||||
* Mon Jun 20 2022 Florian Müllner <fmuellner@redhat.com> - 40.9-6
|
||||
- Make moved KeyboardA11yFlags enum public
|
||||
Related: #2047644
|
||||
|
Loading…
Reference in New Issue
Block a user