[mutter/halfline/wip/kms-cleanups: 8/9] cursor-renderer-native: get drm fd straight from native renderer
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/halfline/wip/kms-cleanups: 8/9] cursor-renderer-native: get drm fd straight from native renderer
- Date: Thu, 10 Mar 2016 21:12:43 +0000 (UTC)
commit 07ca972f1683e87571349cb22662c525ccfae292
Author: Ray Strode <rstrode redhat com>
Date: Fri Jan 8 14:49:08 2016 -0500
cursor-renderer-native: get drm fd straight from native renderer
This commit changes the MetaCursorRendererNative class to fetch
the drm fd directly from native renderer instead of roundtripping
through cogl.
src/backends/native/meta-backend-native.c | 5 +-
src/backends/native/meta-cursor-renderer-native.c | 78 ++++++++++++++++++---
src/backends/native/meta-native-renderer.h | 3 +
src/backends/native/meta-session-controller.h | 5 +-
4 files changed, 77 insertions(+), 14 deletions(-)
---
diff --git a/src/backends/native/meta-backend-native.c b/src/backends/native/meta-backend-native.c
index 0f25614..351b079 100644
--- a/src/backends/native/meta-backend-native.c
+++ b/src/backends/native/meta-backend-native.c
@@ -245,7 +245,10 @@ meta_backend_native_create_monitor_manager (MetaBackend *backend)
static MetaCursorRenderer *
meta_backend_native_create_cursor_renderer (MetaBackend *backend)
{
- return g_object_new (META_TYPE_CURSOR_RENDERER_NATIVE, NULL);
+ MetaBackendNativePrivate *priv = meta_backend_native_get_instance_private (META_BACKEND_NATIVE (backend));
+ MetaNativeRenderer *renderer = meta_session_controller_get_renderer (priv->session_controller);
+
+ return g_object_new (META_TYPE_CURSOR_RENDERER_NATIVE, "renderer", renderer, NULL);
}
static void
diff --git a/src/backends/native/meta-cursor-renderer-native.c
b/src/backends/native/meta-cursor-renderer-native.c
index 444154c..0272d7c 100644
--- a/src/backends/native/meta-cursor-renderer-native.c
+++ b/src/backends/native/meta-cursor-renderer-native.c
@@ -34,6 +34,7 @@
#include <meta/util.h>
#include <meta/meta-backend.h>
+#include "meta-native-renderer.h"
#include "meta-monitor-manager-private.h"
#include "meta/boxes.h"
@@ -66,7 +67,7 @@ struct _MetaCursorRendererNativePrivate
MetaCursorSprite *last_cursor;
guint animation_timeout_id;
- int drm_fd;
+ MetaNativeRenderer *renderer;
struct gbm_device *gbm;
uint64_t cursor_width;
@@ -88,6 +89,11 @@ typedef struct _MetaCursorNativePrivate
struct gbm_bo *bos[HW_CURSOR_BUFFER_COUNT];
} MetaCursorNativePrivate;
+enum
+{
+ PROP_RENDERER = 1,
+};
+
G_DEFINE_TYPE_WITH_PRIVATE (MetaCursorRendererNative, meta_cursor_renderer_native,
META_TYPE_CURSOR_RENDERER);
static MetaCursorNativePrivate *
@@ -99,6 +105,8 @@ meta_cursor_renderer_native_finalize (GObject *object)
MetaCursorRendererNative *renderer = META_CURSOR_RENDERER_NATIVE (object);
MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (renderer);
+ g_clear_object (&priv->renderer);
+
if (priv->animation_timeout_id)
g_source_remove (priv->animation_timeout_id);
@@ -164,6 +172,7 @@ set_crtc_cursor (MetaCursorRendererNative *native,
gboolean force)
{
MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (native);
+ int drm_fd = meta_native_renderer_get_modesetting_fd (priv->renderer);
if (cursor_sprite)
{
@@ -186,7 +195,7 @@ set_crtc_cursor (MetaCursorRendererNative *native,
handle = gbm_bo_get_handle (bo);
meta_cursor_sprite_get_hotspot (cursor_sprite, &hot_x, &hot_y);
- drmModeSetCursor2 (priv->drm_fd, crtc->crtc_id, handle.u32,
+ drmModeSetCursor2 (drm_fd, crtc->crtc_id, handle.u32,
priv->cursor_width, priv->cursor_height, hot_x, hot_y);
if (cursor_priv->pending_bo_state == META_CURSOR_GBM_BO_STATE_SET)
@@ -200,7 +209,7 @@ set_crtc_cursor (MetaCursorRendererNative *native,
{
if (force || crtc->cursor_renderer_private != NULL)
{
- drmModeSetCursor2 (priv->drm_fd, crtc->crtc_id, 0, 0, 0, 0, 0);
+ drmModeSetCursor2 (drm_fd, crtc->crtc_id, 0, 0, 0, 0, 0);
crtc->cursor_renderer_private = NULL;
}
}
@@ -217,6 +226,7 @@ update_hw_cursor (MetaCursorRendererNative *native,
MetaCRTC *crtcs;
unsigned int i, n_crtcs;
MetaRectangle rect;
+ int drm_fd = meta_native_renderer_get_modesetting_fd (priv->renderer);
monitors = meta_monitor_manager_get ();
meta_monitor_manager_get_resources (monitors, NULL, NULL, &crtcs, &n_crtcs, NULL, NULL);
@@ -245,7 +255,7 @@ update_hw_cursor (MetaCursorRendererNative *native,
if (crtc_cursor)
{
- drmModeMoveCursor (priv->drm_fd, crtcs[i].crtc_id,
+ drmModeMoveCursor (drm_fd, crtcs[i].crtc_id,
rect.x - crtc_rect->x,
rect.y - crtc_rect->y);
}
@@ -620,11 +630,54 @@ meta_cursor_renderer_native_realize_cursor_from_xcursor (MetaCursorRenderer *ren
}
static void
+meta_cursor_renderer_native_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ MetaCursorRendererNative *self = META_CURSOR_RENDERER_NATIVE (object);
+ MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (self);
+
+ switch (prop_id)
+ {
+ case PROP_RENDERER:
+ priv->renderer = g_value_dup_object (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+meta_cursor_renderer_native_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ MetaCursorRendererNative *self = META_CURSOR_RENDERER_NATIVE (object);
+ MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (self);
+
+ switch (prop_id)
+ {
+ case PROP_RENDERER:
+ g_value_set_object (value, priv->renderer);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
meta_cursor_renderer_native_class_init (MetaCursorRendererNativeClass *klass)
{
MetaCursorRendererClass *renderer_class = META_CURSOR_RENDERER_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GParamSpec *param_spec;
+ object_class->get_property = meta_cursor_renderer_native_get_property;
+ object_class->set_property = meta_cursor_renderer_native_set_property;
object_class->finalize = meta_cursor_renderer_native_finalize;
renderer_class->update_cursor = meta_cursor_renderer_native_update_cursor;
#ifdef HAVE_WAYLAND
@@ -635,6 +688,13 @@ meta_cursor_renderer_native_class_init (MetaCursorRendererNativeClass *klass)
meta_cursor_renderer_native_realize_cursor_from_xcursor;
quark_cursor_sprite = g_quark_from_static_string ("-meta-cursor-native");
+
+ param_spec = g_param_spec_object ("renderer",
+ "renderer",
+ "renderer",
+ META_TYPE_NATIVE_RENDERER,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
+ g_object_class_install_property (object_class, PROP_RENDERER, param_spec);
}
static void
@@ -657,7 +717,6 @@ static void
meta_cursor_renderer_native_init (MetaCursorRendererNative *native)
{
MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (native);
- CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
MetaMonitorManager *monitors;
monitors = meta_monitor_manager_get ();
@@ -667,13 +726,12 @@ meta_cursor_renderer_native_init (MetaCursorRendererNative *native)
#if defined(CLUTTER_WINDOWING_EGL)
if (clutter_check_windowing_backend (CLUTTER_WINDOWING_EGL))
{
- CoglRenderer *cogl_renderer = cogl_display_get_renderer (cogl_context_get_display (ctx));
- priv->drm_fd = cogl_kms_renderer_get_kms_fd (cogl_renderer);
- priv->gbm = gbm_create_device (priv->drm_fd);
+ int drm_fd = meta_native_renderer_get_modesetting_fd (priv->renderer);
+ priv->gbm = gbm_create_device (drm_fd);
uint64_t width, height;
- if (drmGetCap (priv->drm_fd, DRM_CAP_CURSOR_WIDTH, &width) == 0 &&
- drmGetCap (priv->drm_fd, DRM_CAP_CURSOR_HEIGHT, &height) == 0)
+ if (drmGetCap (drm_fd, DRM_CAP_CURSOR_WIDTH, &width) == 0 &&
+ drmGetCap (drm_fd, DRM_CAP_CURSOR_HEIGHT, &height) == 0)
{
priv->cursor_width = width;
priv->cursor_height = height;
diff --git a/src/backends/native/meta-native-renderer.h b/src/backends/native/meta-native-renderer.h
index 79d7630..6cd6cb5 100644
--- a/src/backends/native/meta-native-renderer.h
+++ b/src/backends/native/meta-native-renderer.h
@@ -26,6 +26,9 @@
#define META_NATIVE_RENDERER_H
#include <glib-object.h>
+
+typedef struct _MetaNativeRenderer MetaNativeRenderer;
+
#include "backends/native/meta-session-controller.h"
#define META_TYPE_NATIVE_RENDERER (meta_native_renderer_get_type ())
diff --git a/src/backends/native/meta-session-controller.h b/src/backends/native/meta-session-controller.h
index 48ddf89..0c6f2d2 100644
--- a/src/backends/native/meta-session-controller.h
+++ b/src/backends/native/meta-session-controller.h
@@ -22,11 +22,10 @@
#include <gio/gio.h>
-#include "backends/native/meta-session-controller.h"
-#include "backends/native/meta-native-renderer.h"
-
typedef struct _MetaSessionController MetaSessionController;
+#include "backends/native/meta-native-renderer.h"
+
MetaSessionController *meta_session_controller_new (GError **error);
const char *meta_session_controller_get_seat_id (MetaSessionController *self);
MetaNativeRenderer *meta_session_controller_get_renderer (MetaSessionController *self);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]