import mutter-40.9-9.el9
This commit is contained in:
parent
10977a5fe5
commit
6a46d2de32
@ -0,0 +1,144 @@
|
|||||||
|
From 651f5e0c6a33d9ac32c2a16735a026153a2ddf38 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Olivier Fourdan <ofourdan@redhat.com>
|
||||||
|
Date: Tue, 14 Jun 2022 16:31:43 +0200
|
||||||
|
Subject: [PATCH] backends: Move MetaKeyboardA11yFlags to a public header
|
||||||
|
|
||||||
|
The MetaKeyboardA11yFlags are used by gnome-shell to show a dialog
|
||||||
|
whenever a keyboard accessibility feature is switched using the
|
||||||
|
keyboard.
|
||||||
|
|
||||||
|
Unfortunately, commit c3acaeb25 renamed the Clutter flag to Meta and
|
||||||
|
moved them to a private header. As a result, gnome-shell do not show any
|
||||||
|
dialog anymore when a keyboard accessibility feature is activated.
|
||||||
|
|
||||||
|
Move the MetaKeyboardA11yFlags definition to a public header so that
|
||||||
|
gnome-shell can use it.
|
||||||
|
|
||||||
|
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2306
|
||||||
|
Fixes: c3acaeb25 - backends: Move keyboard a11y into backends
|
||||||
|
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2463>
|
||||||
|
---
|
||||||
|
src/backends/meta-input-settings-private.h | 19 +------
|
||||||
|
src/meta/meson.build | 1 +
|
||||||
|
src/meta/meta-enums.h | 62 ++++++++++++++++++++++
|
||||||
|
3 files changed, 64 insertions(+), 18 deletions(-)
|
||||||
|
create mode 100644 src/meta/meta-enums.h
|
||||||
|
|
||||||
|
diff --git a/src/backends/meta-input-settings-private.h b/src/backends/meta-input-settings-private.h
|
||||||
|
index 42ee0e0e6..5ef54ee84 100644
|
||||||
|
--- a/src/backends/meta-input-settings-private.h
|
||||||
|
+++ b/src/backends/meta-input-settings-private.h
|
||||||
|
@@ -31,29 +31,12 @@
|
||||||
|
#include "backends/meta-backend-types.h"
|
||||||
|
#include "clutter/clutter.h"
|
||||||
|
#include "meta/display.h"
|
||||||
|
+#include "meta/meta-enums.h"
|
||||||
|
|
||||||
|
#define META_TYPE_INPUT_SETTINGS (meta_input_settings_get_type ())
|
||||||
|
G_DECLARE_DERIVABLE_TYPE (MetaInputSettings, meta_input_settings,
|
||||||
|
META, INPUT_SETTINGS, GObject)
|
||||||
|
|
||||||
|
-typedef enum
|
||||||
|
-{
|
||||||
|
- META_A11Y_KEYBOARD_ENABLED = 1 << 0,
|
||||||
|
- META_A11Y_TIMEOUT_ENABLED = 1 << 1,
|
||||||
|
- META_A11Y_MOUSE_KEYS_ENABLED = 1 << 2,
|
||||||
|
- META_A11Y_SLOW_KEYS_ENABLED = 1 << 3,
|
||||||
|
- META_A11Y_SLOW_KEYS_BEEP_PRESS = 1 << 4,
|
||||||
|
- META_A11Y_SLOW_KEYS_BEEP_ACCEPT = 1 << 5,
|
||||||
|
- META_A11Y_SLOW_KEYS_BEEP_REJECT = 1 << 6,
|
||||||
|
- META_A11Y_BOUNCE_KEYS_ENABLED = 1 << 7,
|
||||||
|
- META_A11Y_BOUNCE_KEYS_BEEP_REJECT = 1 << 8,
|
||||||
|
- META_A11Y_TOGGLE_KEYS_ENABLED = 1 << 9,
|
||||||
|
- META_A11Y_STICKY_KEYS_ENABLED = 1 << 10,
|
||||||
|
- META_A11Y_STICKY_KEYS_TWO_KEY_OFF = 1 << 11,
|
||||||
|
- META_A11Y_STICKY_KEYS_BEEP = 1 << 12,
|
||||||
|
- META_A11Y_FEATURE_STATE_CHANGE_BEEP = 1 << 13,
|
||||||
|
-} MetaKeyboardA11yFlags;
|
||||||
|
-
|
||||||
|
/**
|
||||||
|
* MetaKbdA11ySettings:
|
||||||
|
*
|
||||||
|
diff --git a/src/meta/meson.build b/src/meta/meson.build
|
||||||
|
index a096ee4dd..4a67abb25 100644
|
||||||
|
--- a/src/meta/meson.build
|
||||||
|
+++ b/src/meta/meson.build
|
||||||
|
@@ -17,6 +17,7 @@ mutter_public_headers = [
|
||||||
|
'meta-close-dialog.h',
|
||||||
|
'meta-cursor-tracker.h',
|
||||||
|
'meta-dnd.h',
|
||||||
|
+ 'meta-enums.h',
|
||||||
|
'meta-idle-monitor.h',
|
||||||
|
'meta-inhibit-shortcuts-dialog.h',
|
||||||
|
'meta-launch-context.h',
|
||||||
|
diff --git a/src/meta/meta-enums.h b/src/meta/meta-enums.h
|
||||||
|
new file mode 100644
|
||||||
|
index 000000000..e59ebaf72
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/meta/meta-enums.h
|
||||||
|
@@ -0,0 +1,62 @@
|
||||||
|
+/*
|
||||||
|
+ * Copyright (C) 2016-2021 Red Hat Inc.
|
||||||
|
+ *
|
||||||
|
+ * This program is free software; you can redistribute it and/or
|
||||||
|
+ * modify it under the terms of the GNU General Public License as
|
||||||
|
+ * published by the Free Software Foundation; either version 2 of the
|
||||||
|
+ * License, or (at your option) any later version.
|
||||||
|
+ *
|
||||||
|
+ * This program is distributed in the hope that it will be useful, but
|
||||||
|
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
+ * General Public License for more details.
|
||||||
|
+ *
|
||||||
|
+ * You should have received a copy of the GNU General Public License
|
||||||
|
+ * along with this program; if not, write to the Free Software
|
||||||
|
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
|
+ * 02111-1307, USA.
|
||||||
|
+ *
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#ifndef META_ENUMS_H
|
||||||
|
+#define META_ENUMS_H
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * MetaKeyboardA11yFlags:
|
||||||
|
+ * @META_A11Y_KEYBOARD_ENABLED:
|
||||||
|
+ * @META_A11Y_TIMEOUT_ENABLED:
|
||||||
|
+ * @META_A11Y_MOUSE_KEYS_ENABLED:
|
||||||
|
+ * @META_A11Y_SLOW_KEYS_ENABLED:
|
||||||
|
+ * @META_A11Y_SLOW_KEYS_BEEP_PRESS:
|
||||||
|
+ * @META_A11Y_SLOW_KEYS_BEEP_ACCEPT:
|
||||||
|
+ * @META_A11Y_SLOW_KEYS_BEEP_REJECT:
|
||||||
|
+ * @META_A11Y_BOUNCE_KEYS_ENABLED:
|
||||||
|
+ * @META_A11Y_BOUNCE_KEYS_BEEP_REJECT:
|
||||||
|
+ * @META_A11Y_TOGGLE_KEYS_ENABLED:
|
||||||
|
+ * @META_A11Y_STICKY_KEYS_ENABLED:
|
||||||
|
+ * @META_A11Y_STICKY_KEYS_TWO_KEY_OFF:
|
||||||
|
+ * @META_A11Y_STICKY_KEYS_BEEP:
|
||||||
|
+ * @META_A11Y_FEATURE_STATE_CHANGE_BEEP:
|
||||||
|
+ *
|
||||||
|
+ * Keyboard accessibility features.
|
||||||
|
+ *
|
||||||
|
+ */
|
||||||
|
+typedef enum
|
||||||
|
+{
|
||||||
|
+ META_A11Y_KEYBOARD_ENABLED = 1 << 0,
|
||||||
|
+ META_A11Y_TIMEOUT_ENABLED = 1 << 1,
|
||||||
|
+ META_A11Y_MOUSE_KEYS_ENABLED = 1 << 2,
|
||||||
|
+ META_A11Y_SLOW_KEYS_ENABLED = 1 << 3,
|
||||||
|
+ META_A11Y_SLOW_KEYS_BEEP_PRESS = 1 << 4,
|
||||||
|
+ META_A11Y_SLOW_KEYS_BEEP_ACCEPT = 1 << 5,
|
||||||
|
+ META_A11Y_SLOW_KEYS_BEEP_REJECT = 1 << 6,
|
||||||
|
+ META_A11Y_BOUNCE_KEYS_ENABLED = 1 << 7,
|
||||||
|
+ META_A11Y_BOUNCE_KEYS_BEEP_REJECT = 1 << 8,
|
||||||
|
+ META_A11Y_TOGGLE_KEYS_ENABLED = 1 << 9,
|
||||||
|
+ META_A11Y_STICKY_KEYS_ENABLED = 1 << 10,
|
||||||
|
+ META_A11Y_STICKY_KEYS_TWO_KEY_OFF = 1 << 11,
|
||||||
|
+ META_A11Y_STICKY_KEYS_BEEP = 1 << 12,
|
||||||
|
+ META_A11Y_FEATURE_STATE_CHANGE_BEEP = 1 << 13,
|
||||||
|
+} MetaKeyboardA11yFlags;
|
||||||
|
+
|
||||||
|
+#endif /* META_ENUMS_H */
|
||||||
|
--
|
||||||
|
2.36.1
|
||||||
|
|
@ -0,0 +1,38 @@
|
|||||||
|
From 28030178d7682ce5be03cb7273365ab628065871 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
Date: Mon, 27 Sep 2021 20:37:30 +0200
|
||||||
|
Subject: [PATCH] clutter: Make ClutterClickAction independent of click count
|
||||||
|
|
||||||
|
This will trigger for every button press/release that is obtained,
|
||||||
|
regardless of the click count.
|
||||||
|
|
||||||
|
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2024>
|
||||||
|
---
|
||||||
|
clutter/clutter/clutter-click-action.c | 4 ----
|
||||||
|
1 file changed, 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/clutter/clutter/clutter-click-action.c b/clutter/clutter/clutter-click-action.c
|
||||||
|
index 45d87e809..266b6da92 100644
|
||||||
|
--- a/clutter/clutter/clutter-click-action.c
|
||||||
|
+++ b/clutter/clutter/clutter-click-action.c
|
||||||
|
@@ -306,9 +306,6 @@ on_event (ClutterActor *actor,
|
||||||
|
case CLUTTER_TOUCH_BEGIN:
|
||||||
|
has_button = FALSE;
|
||||||
|
case CLUTTER_BUTTON_PRESS:
|
||||||
|
- if (has_button && clutter_event_get_click_count (event) != 1)
|
||||||
|
- return CLUTTER_EVENT_PROPAGATE;
|
||||||
|
-
|
||||||
|
if (priv->is_held)
|
||||||
|
return CLUTTER_EVENT_STOP;
|
||||||
|
|
||||||
|
@@ -386,7 +383,6 @@ on_captured_event (ClutterActor *stage,
|
||||||
|
return CLUTTER_EVENT_STOP;
|
||||||
|
|
||||||
|
if ((has_button && clutter_event_get_button (event) != priv->press_button) ||
|
||||||
|
- (has_button && clutter_event_get_click_count (event) != 1) ||
|
||||||
|
clutter_event_get_device (event) != priv->press_device ||
|
||||||
|
clutter_event_get_event_sequence (event) != priv->press_sequence)
|
||||||
|
return CLUTTER_EVENT_PROPAGATE;
|
||||||
|
--
|
||||||
|
2.35.1
|
||||||
|
|
@ -0,0 +1,26 @@
|
|||||||
|
From 65ffd7e4df42cd62633f93107644f87208881578 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||||
|
Date: Thu, 14 Apr 2022 18:07:41 +0200
|
||||||
|
Subject: [PATCH] events: Pass CurrentTime to XIAllowEvents() when unfreezing
|
||||||
|
pointer
|
||||||
|
|
||||||
|
---
|
||||||
|
src/core/events.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/core/events.c b/src/core/events.c
|
||||||
|
index 0dc3a73222..dd9b4ec981 100644
|
||||||
|
--- a/src/core/events.c
|
||||||
|
+++ b/src/core/events.c
|
||||||
|
@@ -205,7 +205,7 @@ maybe_unfreeze_pointer_events (MetaBackend *backend,
|
||||||
|
}
|
||||||
|
|
||||||
|
xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
|
||||||
|
- XIAllowEvents (xdisplay, device_id, event_mode, event->button.time);
|
||||||
|
+ XIAllowEvents (xdisplay, device_id, event_mode, CurrentTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
193
SOURCES/0001-kms-Allow-passing-framebuffer-damage-metadata.patch
Normal file
193
SOURCES/0001-kms-Allow-passing-framebuffer-damage-metadata.patch
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
From af0460d0cedd5a66b2110ab2a99e67c647e7b6fb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Piotr Lopatka <piotr.lopatka@gmail.com>
|
||||||
|
Date: Fri, 3 Sep 2021 19:39:12 +0100
|
||||||
|
Subject: [PATCH 1/2] kms: Allow passing framebuffer damage metadata
|
||||||
|
|
||||||
|
This commit adds support to atomic KMS backend for optional plane property
|
||||||
|
prop_fb_damage_clips. Some drivers (e.g. EVDI) take advantage of this
|
||||||
|
property and process only updated regions of the screen instead of
|
||||||
|
processing the full frame. This can save system resources.
|
||||||
|
|
||||||
|
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1879>
|
||||||
|
---
|
||||||
|
.../native/meta-kms-impl-device-atomic.c | 28 +++++++++++++++
|
||||||
|
src/backends/native/meta-kms-plane-private.h | 1 +
|
||||||
|
src/backends/native/meta-kms-plane.c | 5 +++
|
||||||
|
src/backends/native/meta-kms-update-private.h | 7 ++++
|
||||||
|
src/backends/native/meta-kms-update.c | 35 +++++++++++++++++++
|
||||||
|
src/backends/native/meta-kms-update.h | 4 +++
|
||||||
|
6 files changed, 80 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/backends/native/meta-kms-impl-device-atomic.c b/src/backends/native/meta-kms-impl-device-atomic.c
|
||||||
|
index 8e41207ee14..674a24902bd 100644
|
||||||
|
--- a/src/backends/native/meta-kms-impl-device-atomic.c
|
||||||
|
+++ b/src/backends/native/meta-kms-impl-device-atomic.c
|
||||||
|
@@ -416,6 +416,8 @@ process_plane_assignment (MetaKmsImplDevice *impl_device,
|
||||||
|
MetaKmsPlaneAssignment *plane_assignment = update_entry;
|
||||||
|
MetaKmsPlane *plane = plane_assignment->plane;
|
||||||
|
MetaDrmBuffer *buffer;
|
||||||
|
+ MetaKmsFbDamage *fb_damage;
|
||||||
|
+ uint32_t prop_id;
|
||||||
|
|
||||||
|
buffer = plane_assignment->buffer;
|
||||||
|
|
||||||
|
@@ -539,6 +541,32 @@ process_plane_assignment (MetaKmsImplDevice *impl_device,
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ fb_damage = plane_assignment->fb_damage;
|
||||||
|
+ if (fb_damage &&
|
||||||
|
+ meta_kms_plane_get_prop_id (plane,
|
||||||
|
+ META_KMS_PLANE_PROP_FB_DAMAGE_CLIPS_ID))
|
||||||
|
+ {
|
||||||
|
+ meta_topic (META_DEBUG_KMS,
|
||||||
|
+ "[atomic] Setting %d damage clips on %u",
|
||||||
|
+ fb_damage->n_rects,
|
||||||
|
+ meta_kms_plane_get_id (plane));
|
||||||
|
+
|
||||||
|
+ prop_id = store_new_blob (impl_device,
|
||||||
|
+ blob_ids,
|
||||||
|
+ fb_damage->rects,
|
||||||
|
+ fb_damage->n_rects *
|
||||||
|
+ sizeof (struct drm_mode_rect),
|
||||||
|
+ error);
|
||||||
|
+ if (!prop_id)
|
||||||
|
+ return FALSE;
|
||||||
|
+
|
||||||
|
+ if (!add_plane_property (impl_device,
|
||||||
|
+ plane, req,
|
||||||
|
+ META_KMS_PLANE_PROP_FB_DAMAGE_CLIPS_ID,
|
||||||
|
+ prop_id,
|
||||||
|
+ error))
|
||||||
|
+ return FALSE;
|
||||||
|
+ }
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/backends/native/meta-kms-plane-private.h b/src/backends/native/meta-kms-plane-private.h
|
||||||
|
index 92f9cfcc9aa..f735c8da8f6 100644
|
||||||
|
--- a/src/backends/native/meta-kms-plane-private.h
|
||||||
|
+++ b/src/backends/native/meta-kms-plane-private.h
|
||||||
|
@@ -41,6 +41,7 @@ typedef enum _MetaKmsPlaneProp
|
||||||
|
META_KMS_PLANE_PROP_CRTC_H,
|
||||||
|
META_KMS_PLANE_PROP_FB_ID,
|
||||||
|
META_KMS_PLANE_PROP_CRTC_ID,
|
||||||
|
+ META_KMS_PLANE_PROP_FB_DAMAGE_CLIPS_ID,
|
||||||
|
META_KMS_PLANE_N_PROPS
|
||||||
|
} MetaKmsPlaneProp;
|
||||||
|
|
||||||
|
diff --git a/src/backends/native/meta-kms-plane.c b/src/backends/native/meta-kms-plane.c
|
||||||
|
index 73fab7d8f80..3cb58764ff3 100644
|
||||||
|
--- a/src/backends/native/meta-kms-plane.c
|
||||||
|
+++ b/src/backends/native/meta-kms-plane.c
|
||||||
|
@@ -446,6 +446,11 @@ init_properties (MetaKmsPlane *plane,
|
||||||
|
.name = "CRTC_ID",
|
||||||
|
.type = DRM_MODE_PROP_OBJECT,
|
||||||
|
},
|
||||||
|
+ [META_KMS_PLANE_PROP_FB_DAMAGE_CLIPS_ID] =
|
||||||
|
+ {
|
||||||
|
+ .name = "FB_DAMAGE_CLIPS",
|
||||||
|
+ .type = DRM_MODE_PROP_BLOB,
|
||||||
|
+ },
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
diff --git a/src/backends/native/meta-kms-update-private.h b/src/backends/native/meta-kms-update-private.h
|
||||||
|
index 22491ece2d5..c89622d09a5 100644
|
||||||
|
--- a/src/backends/native/meta-kms-update-private.h
|
||||||
|
+++ b/src/backends/native/meta-kms-update-private.h
|
||||||
|
@@ -34,6 +34,12 @@ typedef struct _MetaKmsFeedback
|
||||||
|
GError *error;
|
||||||
|
} MetaKmsFeedback;
|
||||||
|
|
||||||
|
+typedef struct _MetaKmsFbDamage
|
||||||
|
+{
|
||||||
|
+ struct drm_mode_rect *rects;
|
||||||
|
+ int n_rects;
|
||||||
|
+} MetaKmsFbDamage;
|
||||||
|
+
|
||||||
|
typedef struct _MetaKmsPlaneAssignment
|
||||||
|
{
|
||||||
|
MetaKmsUpdate *update;
|
||||||
|
@@ -43,6 +49,7 @@ typedef struct _MetaKmsPlaneAssignment
|
||||||
|
MetaFixed16Rectangle src_rect;
|
||||||
|
MetaRectangle dst_rect;
|
||||||
|
MetaKmsAssignPlaneFlag flags;
|
||||||
|
+ MetaKmsFbDamage *fb_damage;
|
||||||
|
|
||||||
|
uint64_t rotation;
|
||||||
|
|
||||||
|
diff --git a/src/backends/native/meta-kms-update.c b/src/backends/native/meta-kms-update.c
|
||||||
|
index be6eaefcc2c..71e5b423fb7 100644
|
||||||
|
--- a/src/backends/native/meta-kms-update.c
|
||||||
|
+++ b/src/backends/native/meta-kms-update.c
|
||||||
|
@@ -129,9 +129,17 @@ meta_kms_feedback_get_error (const MetaKmsFeedback *feedback)
|
||||||
|
return feedback->error;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+meta_kms_fb_damage_free (MetaKmsFbDamage *fb_damage)
|
||||||
|
+{
|
||||||
|
+ g_free (fb_damage->rects);
|
||||||
|
+ g_free (fb_damage);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
meta_kms_plane_assignment_free (MetaKmsPlaneAssignment *plane_assignment)
|
||||||
|
{
|
||||||
|
+ g_clear_pointer (&plane_assignment->fb_damage, meta_kms_fb_damage_free);
|
||||||
|
g_free (plane_assignment);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -456,6 +464,33 @@ meta_kms_update_set_custom_page_flip (MetaKmsUpdate *update,
|
||||||
|
update->custom_page_flip = custom_page_flip;
|
||||||
|
}
|
||||||
|
|
||||||
|
+void
|
||||||
|
+meta_kms_plane_assignment_set_fb_damage (MetaKmsPlaneAssignment *plane_assignment,
|
||||||
|
+ const int *rectangles,
|
||||||
|
+ int n_rectangles)
|
||||||
|
+{
|
||||||
|
+ MetaKmsFbDamage *fb_damage;
|
||||||
|
+ struct drm_mode_rect *mode_rects;
|
||||||
|
+ int i;
|
||||||
|
+
|
||||||
|
+ mode_rects = g_new0 (struct drm_mode_rect, n_rectangles);
|
||||||
|
+ for (i = 0; i < n_rectangles; ++i)
|
||||||
|
+ {
|
||||||
|
+ mode_rects[i].x1 = rectangles[i * 4];
|
||||||
|
+ mode_rects[i].y1 = rectangles[i * 4 + 1];
|
||||||
|
+ mode_rects[i].x2 = mode_rects[i].x1 + rectangles[i * 4 + 2];
|
||||||
|
+ mode_rects[i].y2 = mode_rects[i].y1 + rectangles[i * 4 + 3];
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ fb_damage = g_new0 (MetaKmsFbDamage, 1);
|
||||||
|
+ *fb_damage = (MetaKmsFbDamage) {
|
||||||
|
+ .rects = mode_rects,
|
||||||
|
+ .n_rects = n_rectangles,
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ plane_assignment->fb_damage = fb_damage;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void
|
||||||
|
meta_kms_plane_assignment_set_rotation (MetaKmsPlaneAssignment *plane_assignment,
|
||||||
|
uint64_t rotation)
|
||||||
|
diff --git a/src/backends/native/meta-kms-update.h b/src/backends/native/meta-kms-update.h
|
||||||
|
index 4a6a8bb4373..e63b6d8711d 100644
|
||||||
|
--- a/src/backends/native/meta-kms-update.h
|
||||||
|
+++ b/src/backends/native/meta-kms-update.h
|
||||||
|
@@ -115,6 +115,10 @@ void meta_kms_update_set_crtc_gamma (MetaKmsUpdate *update,
|
||||||
|
const uint16_t *green,
|
||||||
|
const uint16_t *blue);
|
||||||
|
|
||||||
|
+void meta_kms_plane_assignment_set_fb_damage (MetaKmsPlaneAssignment *plane_assignment,
|
||||||
|
+ const int *rectangles,
|
||||||
|
+ int n_rectangles);
|
||||||
|
+
|
||||||
|
MetaKmsPlaneAssignment * meta_kms_update_assign_plane (MetaKmsUpdate *update,
|
||||||
|
MetaKmsCrtc *crtc,
|
||||||
|
MetaKmsPlane *plane,
|
||||||
|
--
|
||||||
|
2.36.1
|
||||||
|
|
@ -0,0 +1,46 @@
|
|||||||
|
From de3188fcc6863b8a6e3d2443a00cf3b00f6f26ff Mon Sep 17 00:00:00 2001
|
||||||
|
From: Daniel van Vugt <daniel.van.vugt@canonical.com>
|
||||||
|
Date: Tue, 12 Apr 2022 18:34:58 +0800
|
||||||
|
Subject: [PATCH 1/2] kms/crtc: Add function meta_kms_crtc_has_gamma
|
||||||
|
|
||||||
|
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2360>
|
||||||
|
---
|
||||||
|
src/backends/native/meta-kms-crtc.c | 7 +++++++
|
||||||
|
src/backends/native/meta-kms-crtc.h | 3 +++
|
||||||
|
2 files changed, 10 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/backends/native/meta-kms-crtc.c b/src/backends/native/meta-kms-crtc.c
|
||||||
|
index 51d040b44..24f5a2d74 100644
|
||||||
|
--- a/src/backends/native/meta-kms-crtc.c
|
||||||
|
+++ b/src/backends/native/meta-kms-crtc.c
|
||||||
|
@@ -92,6 +92,13 @@ meta_kms_crtc_is_active (MetaKmsCrtc *crtc)
|
||||||
|
return crtc->current_state.is_active;
|
||||||
|
}
|
||||||
|
|
||||||
|
+
|
||||||
|
+gboolean
|
||||||
|
+meta_kms_crtc_has_gamma (MetaKmsCrtc *crtc)
|
||||||
|
+{
|
||||||
|
+ return !!meta_kms_crtc_get_prop_id (crtc, META_KMS_CRTC_PROP_GAMMA_LUT);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
read_gamma_state (MetaKmsCrtc *crtc,
|
||||||
|
MetaKmsImplDevice *impl_device,
|
||||||
|
diff --git a/src/backends/native/meta-kms-crtc.h b/src/backends/native/meta-kms-crtc.h
|
||||||
|
index 406ca3ac1..cbaeaa280 100644
|
||||||
|
--- a/src/backends/native/meta-kms-crtc.h
|
||||||
|
+++ b/src/backends/native/meta-kms-crtc.h
|
||||||
|
@@ -66,6 +66,9 @@ uint32_t meta_kms_crtc_get_id (MetaKmsCrtc *crtc);
|
||||||
|
|
||||||
|
int meta_kms_crtc_get_idx (MetaKmsCrtc *crtc);
|
||||||
|
|
||||||
|
+
|
||||||
|
+gboolean meta_kms_crtc_has_gamma (MetaKmsCrtc *crtc);
|
||||||
|
+
|
||||||
|
gboolean meta_kms_crtc_is_active (MetaKmsCrtc *crtc);
|
||||||
|
|
||||||
|
void meta_kms_crtc_gamma_free (MetaKmsCrtcGamma *gamma);
|
||||||
|
--
|
||||||
|
2.35.1
|
||||||
|
|
@ -0,0 +1,218 @@
|
|||||||
|
From f21c8614daeb70a021c128b97c000a92652cf6f8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||||
|
Date: Thu, 24 Feb 2022 12:32:27 +0100
|
||||||
|
Subject: [PATCH] monitor-manager: Add NightLightSupported property to
|
||||||
|
DisplayConfig
|
||||||
|
|
||||||
|
This checks whether it's possible to set a CRTC GAMMA_LUT, which is what
|
||||||
|
is necessary to implement night light.
|
||||||
|
---
|
||||||
|
src/backends/meta-monitor-manager.c | 76 ++++++++++++++++---
|
||||||
|
.../native/meta-monitor-manager-native.c | 25 ++++--
|
||||||
|
.../x11/meta-monitor-manager-xrandr.c | 9 ++-
|
||||||
|
src/org.gnome.Mutter.DisplayConfig.xml | 7 ++
|
||||||
|
4 files changed, 99 insertions(+), 18 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
|
||||||
|
index 75146950c3..0f30b3de25 100644
|
||||||
|
--- a/src/backends/meta-monitor-manager.c
|
||||||
|
+++ b/src/backends/meta-monitor-manager.c
|
||||||
|
@@ -952,6 +952,59 @@ update_panel_orientation_managed (MetaMonitorManager *manager)
|
||||||
|
handle_orientation_change (orientation_manager, manager);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+meta_monitor_manager_get_crtc_gamma (MetaMonitorManager *manager,
|
||||||
|
+ MetaCrtc *crtc,
|
||||||
|
+ size_t *size,
|
||||||
|
+ unsigned short **red,
|
||||||
|
+ unsigned short **green,
|
||||||
|
+ unsigned short **blue)
|
||||||
|
+{
|
||||||
|
+ MetaMonitorManagerClass *klass = META_MONITOR_MANAGER_GET_CLASS (manager);
|
||||||
|
+
|
||||||
|
+ if (klass->get_crtc_gamma)
|
||||||
|
+ {
|
||||||
|
+ klass->get_crtc_gamma (manager, crtc, size, red, green, blue);
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ if (size)
|
||||||
|
+ *size = 0;
|
||||||
|
+ if (red)
|
||||||
|
+ *red = NULL;
|
||||||
|
+ if (green)
|
||||||
|
+ *green = NULL;
|
||||||
|
+ if (blue)
|
||||||
|
+ *blue = NULL;
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static gboolean
|
||||||
|
+is_night_light_supported (MetaMonitorManager *manager)
|
||||||
|
+{
|
||||||
|
+ GList *l;
|
||||||
|
+
|
||||||
|
+ for (l = meta_backend_get_gpus (manager->backend); l; l = l->next)
|
||||||
|
+ {
|
||||||
|
+ MetaGpu *gpu = l->data;
|
||||||
|
+ GList *l_crtc;
|
||||||
|
+
|
||||||
|
+ for (l_crtc = meta_gpu_get_crtcs (gpu); l_crtc; l_crtc = l_crtc->next)
|
||||||
|
+ {
|
||||||
|
+ MetaCrtc *crtc = l_crtc->data;
|
||||||
|
+ size_t gamma_lut_size;
|
||||||
|
+
|
||||||
|
+ meta_monitor_manager_get_crtc_gamma (manager, crtc,
|
||||||
|
+ &gamma_lut_size,
|
||||||
|
+ NULL, NULL, NULL);
|
||||||
|
+ if (gamma_lut_size > 0)
|
||||||
|
+ return TRUE;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return FALSE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void
|
||||||
|
meta_monitor_manager_setup (MetaMonitorManager *manager)
|
||||||
|
{
|
||||||
|
@@ -967,7 +1020,6 @@ meta_monitor_manager_setup (MetaMonitorManager *manager)
|
||||||
|
meta_dbus_display_config_set_apply_monitors_config_allowed (manager->display_config,
|
||||||
|
policy->enable_dbus);
|
||||||
|
|
||||||
|
-
|
||||||
|
meta_monitor_manager_read_current_state (manager);
|
||||||
|
|
||||||
|
meta_monitor_manager_ensure_initial_config (manager);
|
||||||
|
@@ -2445,7 +2497,6 @@ meta_monitor_manager_handle_get_crtc_gamma (MetaDBusDisplayConfig *skeleton,
|
||||||
|
guint crtc_id,
|
||||||
|
MetaMonitorManager *manager)
|
||||||
|
{
|
||||||
|
- MetaMonitorManagerClass *klass;
|
||||||
|
GList *combined_crtcs;
|
||||||
|
MetaCrtc *crtc;
|
||||||
|
gsize size;
|
||||||
|
@@ -2476,14 +2527,8 @@ meta_monitor_manager_handle_get_crtc_gamma (MetaDBusDisplayConfig *skeleton,
|
||||||
|
crtc = g_list_nth_data (combined_crtcs, crtc_id);
|
||||||
|
g_list_free (combined_crtcs);
|
||||||
|
|
||||||
|
- klass = META_MONITOR_MANAGER_GET_CLASS (manager);
|
||||||
|
- if (klass->get_crtc_gamma)
|
||||||
|
- klass->get_crtc_gamma (manager, crtc, &size, &red, &green, &blue);
|
||||||
|
- else
|
||||||
|
- {
|
||||||
|
- size = 0;
|
||||||
|
- red = green = blue = NULL;
|
||||||
|
- }
|
||||||
|
+ meta_monitor_manager_get_crtc_gamma (manager, crtc,
|
||||||
|
+ &size, &red, &green, &blue);
|
||||||
|
|
||||||
|
red_bytes = g_bytes_new_take (red, size * sizeof (unsigned short));
|
||||||
|
green_bytes = g_bytes_new_take (green, size * sizeof (unsigned short));
|
||||||
|
@@ -3078,6 +3123,16 @@ meta_monitor_manager_is_transform_handled (MetaMonitorManager *manager,
|
||||||
|
return manager_class->is_transform_handled (manager, crtc, transform);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+update_night_light_supported (MetaMonitorManager *manager)
|
||||||
|
+{
|
||||||
|
+ gboolean night_light_supported;
|
||||||
|
+
|
||||||
|
+ night_light_supported = is_night_light_supported (manager);
|
||||||
|
+ meta_dbus_display_config_set_night_light_supported (manager->display_config,
|
||||||
|
+ night_light_supported);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
meta_monitor_manager_real_read_current_state (MetaMonitorManager *manager)
|
||||||
|
{
|
||||||
|
@@ -3098,6 +3153,7 @@ meta_monitor_manager_real_read_current_state (MetaMonitorManager *manager)
|
||||||
|
}
|
||||||
|
|
||||||
|
rebuild_monitors (manager);
|
||||||
|
+ update_night_light_supported (manager);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
diff --git a/src/backends/native/meta-monitor-manager-native.c b/src/backends/native/meta-monitor-manager-native.c
|
||||||
|
index fd5e7784ff..37a50f1d6f 100644
|
||||||
|
--- a/src/backends/native/meta-monitor-manager-native.c
|
||||||
|
+++ b/src/backends/native/meta-monitor-manager-native.c
|
||||||
|
@@ -381,15 +381,30 @@ meta_monitor_manager_native_get_crtc_gamma (MetaMonitorManager *manager,
|
||||||
|
MetaKmsCrtc *kms_crtc;
|
||||||
|
const MetaKmsCrtcState *crtc_state;
|
||||||
|
|
||||||
|
- g_return_if_fail (META_IS_CRTC_KMS (crtc));
|
||||||
|
+ if (!META_IS_CRTC_KMS (crtc))
|
||||||
|
+ {
|
||||||
|
+ if (size)
|
||||||
|
+ *size = 0;
|
||||||
|
+ if (red)
|
||||||
|
+ *red = NULL;
|
||||||
|
+ if (green)
|
||||||
|
+ *green = NULL;
|
||||||
|
+ if (blue)
|
||||||
|
+ *blue = NULL;
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
kms_crtc = meta_crtc_kms_get_kms_crtc (META_CRTC_KMS (crtc));
|
||||||
|
crtc_state = meta_kms_crtc_get_current_state (kms_crtc);
|
||||||
|
|
||||||
|
- *size = crtc_state->gamma.size;
|
||||||
|
- *red = g_memdup2 (crtc_state->gamma.red, *size * sizeof **red);
|
||||||
|
- *green = g_memdup2 (crtc_state->gamma.green, *size * sizeof **green);
|
||||||
|
- *blue = g_memdup2 (crtc_state->gamma.blue, *size * sizeof **blue);
|
||||||
|
+ if (size)
|
||||||
|
+ *size = crtc_state->gamma.size;
|
||||||
|
+ if (red)
|
||||||
|
+ *red = g_memdup2 (crtc_state->gamma.red, *size * sizeof **red);
|
||||||
|
+ if (green)
|
||||||
|
+ *green = g_memdup2 (crtc_state->gamma.green, *size * sizeof **green);
|
||||||
|
+ if (blue)
|
||||||
|
+ *blue = g_memdup2 (crtc_state->gamma.blue, *size * sizeof **blue);
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
diff --git a/src/backends/x11/meta-monitor-manager-xrandr.c b/src/backends/x11/meta-monitor-manager-xrandr.c
|
||||||
|
index 98eb080b6b..865f4e5800 100644
|
||||||
|
--- a/src/backends/x11/meta-monitor-manager-xrandr.c
|
||||||
|
+++ b/src/backends/x11/meta-monitor-manager-xrandr.c
|
||||||
|
@@ -707,9 +707,12 @@ meta_monitor_manager_xrandr_get_crtc_gamma (MetaMonitorManager *manager,
|
||||||
|
(XID) meta_crtc_get_id (crtc));
|
||||||
|
|
||||||
|
*size = gamma->size;
|
||||||
|
- *red = g_memdup2 (gamma->red, sizeof (unsigned short) * gamma->size);
|
||||||
|
- *green = g_memdup2 (gamma->green, sizeof (unsigned short) * gamma->size);
|
||||||
|
- *blue = g_memdup2 (gamma->blue, sizeof (unsigned short) * gamma->size);
|
||||||
|
+ if (red)
|
||||||
|
+ *red = g_memdup2 (gamma->red, sizeof (unsigned short) * gamma->size);
|
||||||
|
+ if (green)
|
||||||
|
+ *green = g_memdup2 (gamma->green, sizeof (unsigned short) * gamma->size);
|
||||||
|
+ if (blue)
|
||||||
|
+ *blue = g_memdup2 (gamma->blue, sizeof (unsigned short) * gamma->size);
|
||||||
|
|
||||||
|
XRRFreeGamma (gamma);
|
||||||
|
}
|
||||||
|
diff --git a/src/org.gnome.Mutter.DisplayConfig.xml b/src/org.gnome.Mutter.DisplayConfig.xml
|
||||||
|
index c6859c2c09..5f85c5e271 100644
|
||||||
|
--- a/src/org.gnome.Mutter.DisplayConfig.xml
|
||||||
|
+++ b/src/org.gnome.Mutter.DisplayConfig.xml
|
||||||
|
@@ -297,6 +297,13 @@
|
||||||
|
-->
|
||||||
|
<property name="ApplyMonitorsConfigAllowed" type="b" access="read" />
|
||||||
|
|
||||||
|
+ <!--
|
||||||
|
+ NightLightSupported:
|
||||||
|
+
|
||||||
|
+ Whether night light is supported by this system.
|
||||||
|
+ -->
|
||||||
|
+ <property name="NightLightSupported" type="b" access="read" />
|
||||||
|
+
|
||||||
|
<!--
|
||||||
|
MonitorsChanged:
|
||||||
|
|
||||||
|
--
|
||||||
|
2.37.1
|
||||||
|
|
@ -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,43 @@
|
|||||||
|
From 69c40c6d126a5c804db54ce0afe581362e4fd33b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Daniel van Vugt <daniel.van.vugt@canonical.com>
|
||||||
|
Date: Tue, 12 Apr 2022 18:37:29 +0800
|
||||||
|
Subject: [PATCH 2/2] crtc/kms: Don't add gamma to the update if unsupported by
|
||||||
|
the CRTC
|
||||||
|
|
||||||
|
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2197
|
||||||
|
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2360>
|
||||||
|
---
|
||||||
|
src/backends/native/meta-crtc-kms.c | 6 +++++-
|
||||||
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/backends/native/meta-crtc-kms.c b/src/backends/native/meta-crtc-kms.c
|
||||||
|
index f1bc79146..953f023ce 100644
|
||||||
|
--- a/src/backends/native/meta-crtc-kms.c
|
||||||
|
+++ b/src/backends/native/meta-crtc-kms.c
|
||||||
|
@@ -201,10 +201,14 @@ meta_crtc_kms_maybe_set_gamma (MetaCrtcKms *crtc_kms,
|
||||||
|
MetaKms *kms = meta_kms_device_get_kms (kms_device);
|
||||||
|
MetaKmsUpdate *kms_update;
|
||||||
|
MetaKmsCrtcGamma *gamma;
|
||||||
|
+ MetaKmsCrtc *kms_crtc = meta_crtc_kms_get_kms_crtc (crtc_kms);
|
||||||
|
|
||||||
|
if (crtc_kms->is_gamma_valid)
|
||||||
|
return;
|
||||||
|
|
||||||
|
+ if (!meta_kms_crtc_has_gamma (kms_crtc))
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
gamma = meta_monitor_manager_native_get_cached_crtc_gamma (monitor_manager_native,
|
||||||
|
crtc_kms);
|
||||||
|
if (!gamma)
|
||||||
|
@@ -212,7 +216,7 @@ meta_crtc_kms_maybe_set_gamma (MetaCrtcKms *crtc_kms,
|
||||||
|
|
||||||
|
kms_update = meta_kms_ensure_pending_update (kms, kms_device);
|
||||||
|
meta_kms_update_set_crtc_gamma (kms_update,
|
||||||
|
- meta_crtc_kms_get_kms_crtc (crtc_kms),
|
||||||
|
+ kms_crtc,
|
||||||
|
gamma->size,
|
||||||
|
gamma->red,
|
||||||
|
gamma->green,
|
||||||
|
--
|
||||||
|
2.35.1
|
||||||
|
|
@ -0,0 +1,120 @@
|
|||||||
|
From b328c8cc8b0b31a4afe2bfc857c6ea5a2b837ef2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Piotr Lopatka <piotr.lopatka@gmail.com>
|
||||||
|
Date: Fri, 3 Sep 2021 20:01:59 +0100
|
||||||
|
Subject: [PATCH 2/2] onscreen/native: Pass damage rectangles when page
|
||||||
|
flipping
|
||||||
|
|
||||||
|
This commit passes damage rectangles metadata to the (KMS) primary
|
||||||
|
plane.
|
||||||
|
|
||||||
|
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1879>
|
||||||
|
---
|
||||||
|
src/backends/native/meta-crtc-kms.c | 4 +++-
|
||||||
|
src/backends/native/meta-crtc-kms.h | 6 +++---
|
||||||
|
src/backends/native/meta-onscreen-native.c | 22 ++++++++++++++++++----
|
||||||
|
3 files changed, 24 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/backends/native/meta-crtc-kms.c b/src/backends/native/meta-crtc-kms.c
|
||||||
|
index f1bc79146af..fde64817532 100644
|
||||||
|
--- a/src/backends/native/meta-crtc-kms.c
|
||||||
|
+++ b/src/backends/native/meta-crtc-kms.c
|
||||||
|
@@ -115,7 +115,7 @@ meta_crtc_kms_apply_transform (MetaCrtcKms *crtc_kms,
|
||||||
|
hw_transform);
|
||||||
|
}
|
||||||
|
|
||||||
|
-void
|
||||||
|
+MetaKmsPlaneAssignment *
|
||||||
|
meta_crtc_kms_assign_primary_plane (MetaCrtcKms *crtc_kms,
|
||||||
|
MetaDrmBuffer *buffer,
|
||||||
|
MetaKmsUpdate *kms_update)
|
||||||
|
@@ -161,6 +161,8 @@ meta_crtc_kms_assign_primary_plane (MetaCrtcKms *crtc_kms,
|
||||||
|
dst_rect,
|
||||||
|
flags);
|
||||||
|
meta_crtc_kms_apply_transform (crtc_kms, plane_assignment);
|
||||||
|
+
|
||||||
|
+ return plane_assignment;
|
||||||
|
}
|
||||||
|
|
||||||
|
static GList *
|
||||||
|
diff --git a/src/backends/native/meta-crtc-kms.h b/src/backends/native/meta-crtc-kms.h
|
||||||
|
index f8d241bbb51..bd80835f986 100644
|
||||||
|
--- a/src/backends/native/meta-crtc-kms.h
|
||||||
|
+++ b/src/backends/native/meta-crtc-kms.h
|
||||||
|
@@ -48,9 +48,9 @@ void meta_crtc_kms_set_cursor_renderer_private (MetaCrtcKms *crtc_kms,
|
||||||
|
void meta_crtc_kms_apply_transform (MetaCrtcKms *crtc_kms,
|
||||||
|
MetaKmsPlaneAssignment *kms_plane_assignment);
|
||||||
|
|
||||||
|
-void meta_crtc_kms_assign_primary_plane (MetaCrtcKms *crtc_kms,
|
||||||
|
- MetaDrmBuffer *buffer,
|
||||||
|
- MetaKmsUpdate *kms_update);
|
||||||
|
+MetaKmsPlaneAssignment * meta_crtc_kms_assign_primary_plane (MetaCrtcKms *crtc_kms,
|
||||||
|
+ MetaDrmBuffer *buffer,
|
||||||
|
+ MetaKmsUpdate *kms_update);
|
||||||
|
|
||||||
|
void meta_crtc_kms_set_mode (MetaCrtcKms *crtc_kms,
|
||||||
|
MetaKmsUpdate *kms_update);
|
||||||
|
diff --git a/src/backends/native/meta-onscreen-native.c b/src/backends/native/meta-onscreen-native.c
|
||||||
|
index 112bd0d438b..00b2d9f89cc 100644
|
||||||
|
--- a/src/backends/native/meta-onscreen-native.c
|
||||||
|
+++ b/src/backends/native/meta-onscreen-native.c
|
||||||
|
@@ -416,7 +416,9 @@ static void
|
||||||
|
meta_onscreen_native_flip_crtc (CoglOnscreen *onscreen,
|
||||||
|
MetaRendererView *view,
|
||||||
|
MetaCrtc *crtc,
|
||||||
|
- MetaKmsPageFlipListenerFlag flags)
|
||||||
|
+ MetaKmsPageFlipListenerFlag flags,
|
||||||
|
+ const int *rectangles,
|
||||||
|
+ int n_rectangles)
|
||||||
|
{
|
||||||
|
MetaOnscreenNative *onscreen_native = META_ONSCREEN_NATIVE (onscreen);
|
||||||
|
MetaRendererNative *renderer_native = onscreen_native->renderer_native;
|
||||||
|
@@ -430,6 +432,7 @@ meta_onscreen_native_flip_crtc (CoglOnscreen *onscreen,
|
||||||
|
MetaKmsUpdate *kms_update;
|
||||||
|
MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state = NULL;
|
||||||
|
MetaDrmBuffer *buffer;
|
||||||
|
+ MetaKmsPlaneAssignment *plane_assignment;
|
||||||
|
|
||||||
|
COGL_TRACE_BEGIN_SCOPED (MetaOnscreenNativeFlipCrtcs,
|
||||||
|
"Onscreen (flip CRTCs)");
|
||||||
|
@@ -456,8 +459,15 @@ meta_onscreen_native_flip_crtc (CoglOnscreen *onscreen,
|
||||||
|
buffer = secondary_gpu_state->gbm.next_fb;
|
||||||
|
}
|
||||||
|
|
||||||
|
- meta_crtc_kms_assign_primary_plane (crtc_kms, buffer, kms_update);
|
||||||
|
+ plane_assignment = meta_crtc_kms_assign_primary_plane (crtc_kms,
|
||||||
|
+ buffer,
|
||||||
|
+ kms_update);
|
||||||
|
|
||||||
|
+ if (rectangles != NULL && n_rectangles != 0)
|
||||||
|
+ {
|
||||||
|
+ meta_kms_plane_assignment_set_fb_damage (plane_assignment,
|
||||||
|
+ rectangles, n_rectangles);
|
||||||
|
+ }
|
||||||
|
break;
|
||||||
|
case META_RENDERER_NATIVE_MODE_SURFACELESS:
|
||||||
|
g_assert_not_reached ();
|
||||||
|
@@ -1081,7 +1091,9 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen,
|
||||||
|
meta_onscreen_native_flip_crtc (onscreen,
|
||||||
|
onscreen_native->view,
|
||||||
|
onscreen_native->crtc,
|
||||||
|
- META_KMS_PAGE_FLIP_LISTENER_FLAG_NONE);
|
||||||
|
+ META_KMS_PAGE_FLIP_LISTENER_FLAG_NONE,
|
||||||
|
+ rectangles,
|
||||||
|
+ n_rectangles);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
@@ -1299,7 +1311,9 @@ meta_onscreen_native_direct_scanout (CoglOnscreen *onscreen,
|
||||||
|
meta_onscreen_native_flip_crtc (onscreen,
|
||||||
|
onscreen_native->view,
|
||||||
|
onscreen_native->crtc,
|
||||||
|
- META_KMS_PAGE_FLIP_LISTENER_FLAG_DROP_ON_ERROR);
|
||||||
|
+ META_KMS_PAGE_FLIP_LISTENER_FLAG_DROP_ON_ERROR,
|
||||||
|
+ NULL,
|
||||||
|
+ 0);
|
||||||
|
|
||||||
|
kms_crtc = meta_crtc_kms_get_kms_crtc (META_CRTC_KMS (onscreen_native->crtc));
|
||||||
|
kms_device = meta_kms_crtc_get_device (kms_crtc);
|
||||||
|
--
|
||||||
|
2.36.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
|
||||||
|
|
@ -0,0 +1,37 @@
|
|||||||
|
From 8d6e41fc9b5194fb24523c939de54a2af46b5d07 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||||
|
Date: Fri, 27 May 2022 18:19:27 +0200
|
||||||
|
Subject: [PATCH] kms/crtc: Determine gamma support given the gamma length
|
||||||
|
|
||||||
|
The property doesn't necessarily exist when using drivers that doesn't
|
||||||
|
support atomic mode setting, and the way it worked will break night
|
||||||
|
light and other gamma related features. This makes things use the gamma
|
||||||
|
length; if it is higher than 0, it definitely supports it one way or the
|
||||||
|
other, i.e. GAMMA_LUT with the atomic backend, and drmModeCrtcSetGamma()
|
||||||
|
with the legacy/simple backend.
|
||||||
|
|
||||||
|
Fixes: 364572b95c8354ac66674064a8058aa98bc0bbef
|
||||||
|
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2287
|
||||||
|
(cherry picked from commit a2ebd10f049d888e451938e23a035ed97e0c8eff)
|
||||||
|
|
||||||
|
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2452>
|
||||||
|
---
|
||||||
|
src/backends/native/meta-kms-crtc.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/backends/native/meta-kms-crtc.c b/src/backends/native/meta-kms-crtc.c
|
||||||
|
index 24f5a2d7400..0513af947c9 100644
|
||||||
|
--- a/src/backends/native/meta-kms-crtc.c
|
||||||
|
+++ b/src/backends/native/meta-kms-crtc.c
|
||||||
|
@@ -96,7 +96,7 @@ meta_kms_crtc_is_active (MetaKmsCrtc *crtc)
|
||||||
|
gboolean
|
||||||
|
meta_kms_crtc_has_gamma (MetaKmsCrtc *crtc)
|
||||||
|
{
|
||||||
|
- return !!meta_kms_crtc_get_prop_id (crtc, META_KMS_CRTC_PROP_GAMMA_LUT);
|
||||||
|
+ return crtc->current_state.gamma.size > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
--
|
||||||
|
2.36.1
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
213
SOURCES/add-unsafe-mode-property.patch
Normal file
213
SOURCES/add-unsafe-mode-property.patch
Normal file
@ -0,0 +1,213 @@
|
|||||||
|
From d89c71ed2bdb18e9b01891d6b999c44f955778dc Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||||
|
Date: Wed, 1 Sep 2021 21:12:03 +0200
|
||||||
|
Subject: [PATCH 1/2] context: Add :unsafe-mode property
|
||||||
|
|
||||||
|
We are going to restrict several sensitive D-Bus APIs to a set
|
||||||
|
of allowed callers (like Settings or portal implementations).
|
||||||
|
|
||||||
|
Add an :unsafe-mode property to the context to allow turning off
|
||||||
|
those restrictions temporarily, in order to not get in the way
|
||||||
|
of development/debugging.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3943
|
||||||
|
|
||||||
|
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1983>
|
||||||
|
---
|
||||||
|
src/backends/meta-backend-private.h | 4 ++
|
||||||
|
src/backends/meta-backend.c | 83 +++++++++++++++++++++++++++++
|
||||||
|
2 files changed, 87 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/backends/meta-backend-private.h b/src/backends/meta-backend-private.h
|
||||||
|
index b930462b2..583d4e151 100644
|
||||||
|
--- a/src/backends/meta-backend-private.h
|
||||||
|
+++ b/src/backends/meta-backend-private.h
|
||||||
|
@@ -133,6 +133,10 @@ void meta_backend_foreach_device_monitor (MetaBackend *backend,
|
||||||
|
GFunc func,
|
||||||
|
gpointer user_data);
|
||||||
|
|
||||||
|
+gboolean meta_backend_get_unsafe_mode (MetaBackend *backend);
|
||||||
|
+void meta_backend_set_unsafe_mode (MetaBackend *backend,
|
||||||
|
+ gboolean enable);
|
||||||
|
+
|
||||||
|
META_EXPORT_TEST
|
||||||
|
MetaMonitorManager * meta_backend_get_monitor_manager (MetaBackend *backend);
|
||||||
|
MetaOrientationManager * meta_backend_get_orientation_manager (MetaBackend *backend);
|
||||||
|
diff --git a/src/backends/meta-backend.c b/src/backends/meta-backend.c
|
||||||
|
index ff84bfe6a..18bee2484 100644
|
||||||
|
--- a/src/backends/meta-backend.c
|
||||||
|
+++ b/src/backends/meta-backend.c
|
||||||
|
@@ -88,6 +88,17 @@
|
||||||
|
#include "wayland/meta-wayland.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+enum
|
||||||
|
+{
|
||||||
|
+ PROP_0,
|
||||||
|
+
|
||||||
|
+ PROP_UNSAFE_MODE,
|
||||||
|
+
|
||||||
|
+ N_PROPS
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static GParamSpec *obj_props[N_PROPS];
|
||||||
|
+
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
KEYMAP_CHANGED,
|
||||||
|
@@ -158,6 +169,8 @@ struct _MetaBackendPrivate
|
||||||
|
|
||||||
|
gboolean is_pointer_position_initialized;
|
||||||
|
|
||||||
|
+ gboolean unsafe_mode;
|
||||||
|
+
|
||||||
|
guint device_update_idle_id;
|
||||||
|
|
||||||
|
GHashTable *device_monitors;
|
||||||
|
@@ -814,6 +827,64 @@ upower_vanished (GDBusConnection *connection,
|
||||||
|
g_clear_object (&priv->upower_proxy);
|
||||||
|
}
|
||||||
|
|
||||||
|
+gboolean
|
||||||
|
+meta_backend_get_unsafe_mode (MetaBackend *backend)
|
||||||
|
+{
|
||||||
|
+ MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
|
||||||
|
+
|
||||||
|
+ return priv->unsafe_mode;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+meta_backend_set_unsafe_mode (MetaBackend *backend,
|
||||||
|
+ gboolean enable)
|
||||||
|
+{
|
||||||
|
+ MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
|
||||||
|
+
|
||||||
|
+ if (priv->unsafe_mode == enable)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ priv->unsafe_mode = enable;
|
||||||
|
+ g_object_notify_by_pspec (G_OBJECT (backend), obj_props[PROP_UNSAFE_MODE]);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+meta_backend_get_property (GObject *object,
|
||||||
|
+ guint prop_id,
|
||||||
|
+ GValue *value,
|
||||||
|
+ GParamSpec *pspec)
|
||||||
|
+{
|
||||||
|
+ MetaBackend *backend = META_BACKEND (object);
|
||||||
|
+ MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
|
||||||
|
+
|
||||||
|
+ switch (prop_id)
|
||||||
|
+ {
|
||||||
|
+ case PROP_UNSAFE_MODE:
|
||||||
|
+ g_value_set_boolean (value, priv->unsafe_mode);
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+meta_backend_set_property (GObject *object,
|
||||||
|
+ guint prop_id,
|
||||||
|
+ const GValue *value,
|
||||||
|
+ GParamSpec *pspec)
|
||||||
|
+{
|
||||||
|
+ MetaBackend *backend = META_BACKEND (object);
|
||||||
|
+
|
||||||
|
+ switch (prop_id)
|
||||||
|
+ {
|
||||||
|
+ case PROP_UNSAFE_MODE:
|
||||||
|
+ meta_backend_set_unsafe_mode (backend, g_value_get_boolean (value));
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
meta_backend_constructed (GObject *object)
|
||||||
|
{
|
||||||
|
@@ -851,6 +922,8 @@ meta_backend_class_init (MetaBackendClass *klass)
|
||||||
|
|
||||||
|
object_class->dispose = meta_backend_dispose;
|
||||||
|
object_class->constructed = meta_backend_constructed;
|
||||||
|
+ object_class->get_property = meta_backend_get_property;
|
||||||
|
+ object_class->set_property = meta_backend_set_property;
|
||||||
|
|
||||||
|
klass->post_init = meta_backend_real_post_init;
|
||||||
|
klass->grab_device = meta_backend_real_grab_device;
|
||||||
|
@@ -907,6 +980,16 @@ meta_backend_class_init (MetaBackendClass *klass)
|
||||||
|
NULL, NULL, NULL,
|
||||||
|
G_TYPE_NONE, 0);
|
||||||
|
|
||||||
|
+ obj_props[PROP_UNSAFE_MODE] =
|
||||||
|
+ g_param_spec_boolean ("unsafe-mode",
|
||||||
|
+ "unsafe mode",
|
||||||
|
+ "Unsafe mode",
|
||||||
|
+ FALSE,
|
||||||
|
+ G_PARAM_READWRITE |
|
||||||
|
+ G_PARAM_EXPLICIT_NOTIFY |
|
||||||
|
+ G_PARAM_STATIC_STRINGS);
|
||||||
|
+ g_object_class_install_properties (object_class, N_PROPS, obj_props);
|
||||||
|
+
|
||||||
|
mutter_stage_views = g_getenv ("MUTTER_STAGE_VIEWS");
|
||||||
|
stage_views_disabled = g_strcmp0 (mutter_stage_views, "0") == 0;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.35.1
|
||||||
|
|
||||||
|
|
||||||
|
From dc69aa57be79fa7f371788c852f6e23cf0d261cb Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||||
|
Date: Thu, 2 Sep 2021 18:41:16 +0200
|
||||||
|
Subject: [PATCH 2/2] context: Add (hidden) --unsafe-mode option
|
||||||
|
|
||||||
|
When running gnome-shell, it is possible to toggle unsafe-mode in
|
||||||
|
looking glass. We'll eventually start using the property in mutter
|
||||||
|
as well, so to make stand-alone debugging easier, also expose it
|
||||||
|
as a hidden command line option.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3943
|
||||||
|
|
||||||
|
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1983>
|
||||||
|
---
|
||||||
|
src/core/main.c | 7 +++++++
|
||||||
|
1 file changed, 7 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/core/main.c b/src/core/main.c
|
||||||
|
index 0d241f952..991d583a0 100644
|
||||||
|
--- a/src/core/main.c
|
||||||
|
+++ b/src/core/main.c
|
||||||
|
@@ -218,6 +218,7 @@ static char *opt_wayland_display;
|
||||||
|
static gboolean opt_display_server;
|
||||||
|
static gboolean opt_headless;
|
||||||
|
#endif
|
||||||
|
+static gboolean opt_unsafe_mode;
|
||||||
|
static gboolean opt_x11;
|
||||||
|
|
||||||
|
#ifdef HAVE_NATIVE_BACKEND
|
||||||
|
@@ -306,6 +307,11 @@ static GOptionEntry meta_options[] = {
|
||||||
|
N_("Add persistent virtual monitor (WxH or WxH@R)")
|
||||||
|
},
|
||||||
|
#endif
|
||||||
|
+ {
|
||||||
|
+ "unsafe-mode", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE,
|
||||||
|
+ &opt_unsafe_mode,
|
||||||
|
+ "Run in unsafe mode"
|
||||||
|
+ },
|
||||||
|
{
|
||||||
|
"x11", 0, 0, G_OPTION_ARG_NONE,
|
||||||
|
&opt_x11,
|
||||||
|
@@ -865,6 +871,7 @@ meta_init (void)
|
||||||
|
add_persistent_virtual_monitors ();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+ meta_backend_set_unsafe_mode (meta_get_backend(), opt_unsafe_mode);
|
||||||
|
meta_set_syncing (opt_sync || (g_getenv ("MUTTER_SYNC") != NULL));
|
||||||
|
|
||||||
|
if (opt_replace_wm)
|
||||||
|
--
|
||||||
|
2.35.1
|
||||||
|
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
Name: mutter
|
Name: mutter
|
||||||
Version: 40.9
|
Version: 40.9
|
||||||
Release: 1%{?dist}
|
Release: 9%{?dist}
|
||||||
Summary: Window and compositing manager based on Clutter
|
Summary: Window and compositing manager based on Clutter
|
||||||
|
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
@ -68,6 +68,39 @@ Patch14: hw-cursor-dumb-buffer.patch
|
|||||||
# Backport EGLStream overview fixes (#2052584)
|
# Backport EGLStream overview fixes (#2052584)
|
||||||
Patch15: eglstream-overview-fixes.patch
|
Patch15: eglstream-overview-fixes.patch
|
||||||
|
|
||||||
|
Patch16: 0001-clutter-Make-ClutterClickAction-independent-of-click.patch
|
||||||
|
Patch17: add-unsafe-mode-property.patch
|
||||||
|
|
||||||
|
# Backport KMS: Survive missing GAMMA_LUT property (#2083091)
|
||||||
|
Patch18: 0001-kms-crtc-Add-function-meta_kms_crtc_has_gamma.patch
|
||||||
|
Patch19: 0002-crtc-kms-Don-t-add-gamma-to-the-update-if-unsupporte.patch
|
||||||
|
Patch20: 0003-kms-crtc-Determine-gamma-support-given-the-gamma-len.patch
|
||||||
|
|
||||||
|
# Backport Pass dirty rects to gpu (#2080980)
|
||||||
|
Patch21: 0001-kms-Allow-passing-framebuffer-damage-metadata.patch
|
||||||
|
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
|
||||||
|
|
||||||
|
# Fix race condition causing stuck pointer grabs (#2090170)
|
||||||
|
Patch40: 0001-events-Pass-CurrentTime-to-XIAllowEvents-when-unfree.patch
|
||||||
|
|
||||||
|
# Backport night light availability property (#2057154)
|
||||||
|
Patch41: 0001-monitor-manager-Add-NightLightSupported-property-to-.patch
|
||||||
|
|
||||||
BuildRequires: chrpath
|
BuildRequires: chrpath
|
||||||
BuildRequires: pango-devel
|
BuildRequires: pango-devel
|
||||||
BuildRequires: startup-notification-devel
|
BuildRequires: startup-notification-devel
|
||||||
@ -214,6 +247,38 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop
|
|||||||
%{_datadir}/mutter-%{mutter_api_version}/tests
|
%{_datadir}/mutter-%{mutter_api_version}/tests
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Aug 16 2022 Jonas Ådahl <jadahl@redhat.com>) - 40.9-9
|
||||||
|
- Backport night light availability property
|
||||||
|
Resolves: #2057154
|
||||||
|
|
||||||
|
* Mon Jun 27 2022 Jonas Ådahl <jadahl@redhat.com>) - 40.9-8
|
||||||
|
- Fix race condition causing stuck pointer grabs
|
||||||
|
Resolves: #2090170
|
||||||
|
|
||||||
|
* 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
|
||||||
|
|
||||||
|
* Mon Jun 13 2022 Jocelyn Falempe <jfalempe@redhat.com - 40.9-5
|
||||||
|
- Backport Pass dirty rects to gpu
|
||||||
|
Resolves: #2080980
|
||||||
|
|
||||||
|
* Mon Jun 13 2022 Jocelyn Falempe <jfalempe@redhat.com - 40.9-4
|
||||||
|
- Backport KMS: Survive missing GAMMA_LUT property
|
||||||
|
Resolves: #2083091
|
||||||
|
|
||||||
|
* Fri Apr 01 2022 Florian Müllner <fmuellner@redhat.com> - 40.9-3
|
||||||
|
- Add MetaBackend:unsafe-mode property
|
||||||
|
Related: #2055366
|
||||||
|
|
||||||
|
* Wed Mar 30 2022 Florian Müllner <fmuellner@redhat.com> - 40.9-2
|
||||||
|
- Ignore click count for click actions
|
||||||
|
Resolves: #2052806
|
||||||
|
|
||||||
* Tue Feb 22 2022 Florian Müllner <fmuellner@redhat.com> - 40.9-1
|
* Tue Feb 22 2022 Florian Müllner <fmuellner@redhat.com> - 40.9-1
|
||||||
- Update to 40.9
|
- Update to 40.9
|
||||||
Resolves: #2056414
|
Resolves: #2056414
|
||||||
|
Loading…
Reference in New Issue
Block a user