From 704fea6323b19e8bfc83481e17fe2b26c58b68bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Tue, 1 Oct 2019 11:51:53 +0200 Subject: [PATCH] renderer-native: Move 'backend' field to MetaRenderer So that it can be used by the generic MetaRenderer class, as well as other sub types, as well. https://gitlab.gnome.org/GNOME/mutter/merge_requests/838 --- src/backends/meta-renderer.c | 72 +++++++++++ src/backends/meta-renderer.h | 2 + src/backends/native/meta-renderer-native.c | 112 +++++------------- src/backends/x11/cm/meta-backend-x11-cm.c | 4 +- .../x11/nested/meta-backend-x11-nested.c | 4 +- 5 files changed, 109 insertions(+), 85 deletions(-) diff --git a/src/backends/meta-renderer.c b/src/backends/meta-renderer.c index 5b480d672..06b32ca2e 100644 --- a/src/backends/meta-renderer.c +++ b/src/backends/meta-renderer.c @@ -48,13 +48,33 @@ #include "backends/meta-backend-private.h" +enum +{ + PROP_0, + + PROP_BACKEND, + + N_PROPS +}; + +static GParamSpec *obj_props[N_PROPS]; + typedef struct _MetaRendererPrivate { + MetaBackend *backend; GList *views; } MetaRendererPrivate; G_DEFINE_TYPE_WITH_PRIVATE (MetaRenderer, meta_renderer, G_TYPE_OBJECT) +MetaBackend * +meta_renderer_get_backend (MetaRenderer *renderer) +{ + MetaRendererPrivate *priv = meta_renderer_get_instance_private (renderer); + + return priv->backend; +} + /** * meta_renderer_create_cogl_renderer: * @renderer: a #MetaRenderer object @@ -166,6 +186,46 @@ meta_renderer_get_view_from_logical_monitor (MetaRenderer *renderer, return NULL; } +static void +meta_renderer_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + MetaRenderer *renderer = META_RENDERER (object); + MetaRendererPrivate *priv = meta_renderer_get_instance_private (renderer); + + switch (prop_id) + { + case PROP_BACKEND: + g_value_set_object (value, priv->backend); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +meta_renderer_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + MetaRenderer *renderer = META_RENDERER (object); + MetaRendererPrivate *priv = meta_renderer_get_instance_private (renderer); + + switch (prop_id) + { + case PROP_BACKEND: + priv->backend = g_value_get_object (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + static void meta_renderer_finalize (GObject *object) { @@ -188,7 +248,19 @@ meta_renderer_class_init (MetaRendererClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); + object_class->get_property = meta_renderer_get_property; + object_class->set_property = meta_renderer_set_property; object_class->finalize = meta_renderer_finalize; klass->rebuild_views = meta_renderer_real_rebuild_views; + + obj_props[PROP_BACKEND] = + g_param_spec_object ("backend", + "backend", + "MetaBackend", + META_TYPE_BACKEND, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS); + g_object_class_install_properties (object_class, N_PROPS, obj_props); } diff --git a/src/backends/meta-renderer.h b/src/backends/meta-renderer.h index 478baee91..5be5d4521 100644 --- a/src/backends/meta-renderer.h +++ b/src/backends/meta-renderer.h @@ -46,6 +46,8 @@ struct _MetaRendererClass void (* rebuild_views) (MetaRenderer *renderer); }; +MetaBackend * meta_renderer_get_backend (MetaRenderer *renderer); + CoglRenderer * meta_renderer_create_cogl_renderer (MetaRenderer *renderer); void meta_renderer_rebuild_views (MetaRenderer *renderer); diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c index e15932526..9b0b861d3 100644 --- a/src/backends/native/meta-renderer-native.c +++ b/src/backends/native/meta-renderer-native.c @@ -83,17 +83,6 @@ #define DRM_FORMAT_INVALID 0 #endif -enum -{ - PROP_0, - - PROP_BACKEND, - - PROP_LAST -}; - -static GParamSpec *obj_props[PROP_LAST]; - typedef enum _MetaSharedFramebufferCopyMode { /* Zero-copy: primary GPU exports, secondary GPU imports as KMS FB */ @@ -227,7 +216,6 @@ struct _MetaRendererNative MetaGpuKms *primary_gpu_kms; - MetaBackend *backend; MetaGles3 *gles3; gboolean use_modifiers; @@ -353,7 +341,9 @@ get_secondary_gpu_state (CoglOnscreen *onscreen, static MetaEgl * meta_renderer_native_get_egl (MetaRendererNative *renderer_native) { - return meta_backend_get_egl (renderer_native->backend); + MetaRenderer *renderer = META_RENDERER (renderer_native); + + return meta_backend_get_egl (meta_renderer_get_backend (renderer)); } static MetaEgl * @@ -1707,8 +1697,9 @@ meta_onscreen_native_flip_crtcs (CoglOnscreen *onscreen, MetaOnscreenNative *onscreen_native = onscreen_egl->platform; MetaRendererView *view = onscreen_native->view; MetaRendererNative *renderer_native = onscreen_native->renderer_native; + MetaRenderer *renderer = META_RENDERER (renderer_native); MetaMonitorManager *monitor_manager = - meta_backend_get_monitor_manager (renderer_native->backend); + meta_backend_get_monitor_manager (meta_renderer_get_backend (renderer)); MetaPowerSave power_save_mode; MetaLogicalMonitor *logical_monitor; @@ -2266,7 +2257,8 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, CoglRendererEGL *cogl_renderer_egl = cogl_renderer->winsys; MetaRendererNativeGpuData *renderer_gpu_data = cogl_renderer_egl->platform; MetaRendererNative *renderer_native = renderer_gpu_data->renderer_native; - MetaBackend *backend = renderer_native->backend; + MetaRenderer *renderer = META_RENDERER (renderer_native); + MetaBackend *backend = meta_renderer_get_backend (renderer); MetaMonitorManager *monitor_manager = meta_backend_get_monitor_manager (backend); MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend); @@ -3002,9 +2994,11 @@ _cogl_winsys_egl_vtable = { gboolean meta_renderer_native_supports_mirroring (MetaRendererNative *renderer_native) { + MetaRenderer *renderer = META_RENDERER (renderer_native); + MetaBackend *backend = meta_renderer_get_backend (renderer); GList *l; - for (l = meta_backend_get_gpus (renderer_native->backend); l; l = l->next) + for (l = meta_backend_get_gpus (backend); l; l = l->next) { MetaGpuKms *gpu_kms = META_GPU_KMS (l->data); MetaRendererNativeGpuData *renderer_gpu_data; @@ -3252,7 +3246,8 @@ calculate_view_transform (MetaMonitorManager *monitor_manager, static CoglContext * cogl_context_from_renderer_native (MetaRendererNative *renderer_native) { - MetaBackend *backend = renderer_native->backend; + MetaRenderer *renderer = META_RENDERER (renderer_native); + MetaBackend *backend = meta_renderer_get_backend (renderer); ClutterBackend *clutter_backend = meta_backend_get_clutter_backend (backend); return clutter_backend_get_cogl_context (clutter_backend); @@ -3306,7 +3301,7 @@ meta_renderer_native_create_view (MetaRenderer *renderer, MetaLogicalMonitor *logical_monitor) { MetaRendererNative *renderer_native = META_RENDERER_NATIVE (renderer); - MetaBackend *backend = renderer_native->backend; + MetaBackend *backend = meta_renderer_get_backend (renderer); MetaMonitorManager *monitor_manager = meta_backend_get_monitor_manager (backend); CoglContext *cogl_context = @@ -3414,9 +3409,8 @@ meta_renderer_native_create_view (MetaRenderer *renderer, static void meta_renderer_native_rebuild_views (MetaRenderer *renderer) { - MetaRendererNative *renderer_native = META_RENDERER_NATIVE (renderer); - MetaBackendNative *backend_native = - META_BACKEND_NATIVE (renderer_native->backend); + MetaBackend *backend = meta_renderer_get_backend (renderer); + MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend); MetaKms *kms = meta_backend_native_get_kms (backend_native); MetaRendererClass *parent_renderer_class = META_RENDERER_CLASS (meta_renderer_native_parent_class); @@ -3431,7 +3425,8 @@ meta_renderer_native_rebuild_views (MetaRenderer *renderer) void meta_renderer_native_finish_frame (MetaRendererNative *renderer_native) { - MetaBackend *backend = renderer_native->backend; + MetaRenderer *renderer = META_RENDERER (renderer_native); + MetaBackend *backend = meta_renderer_get_backend (renderer); MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend); MetaKms *kms = meta_backend_native_get_kms (backend_native); MetaKmsUpdate *kms_update = NULL; @@ -3442,7 +3437,7 @@ meta_renderer_native_finish_frame (MetaRendererNative *renderer_native) { GList *l; - for (l = meta_backend_get_gpus (renderer_native->backend); l; l = l->next) + for (l = meta_backend_get_gpus (backend); l; l = l->next) { MetaGpu *gpu = l->data; GList *k; @@ -3483,49 +3478,6 @@ meta_renderer_native_get_frame_counter (MetaRendererNative *renderer_native) return renderer_native->frame_counter; } -static void -meta_renderer_native_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - MetaRendererNative *renderer_native = META_RENDERER_NATIVE (object); - - switch (prop_id) - { - case PROP_BACKEND: - g_value_set_object (value, renderer_native->backend); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -on_gpu_added (MetaBackendNative *backend_native, - MetaGpuKms *gpu_kms, - MetaRendererNative *renderer_native); - -static void -meta_renderer_native_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - MetaRendererNative *renderer_native = META_RENDERER_NATIVE (object); - - switch (prop_id) - { - case PROP_BACKEND: - renderer_native->backend = g_value_get_object (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - static gboolean create_secondary_egl_config (MetaEgl *egl, MetaRendererNativeMode mode, @@ -3912,7 +3864,10 @@ get_egl_device_display (MetaRendererNative *renderer_native, static int count_drm_devices (MetaRendererNative *renderer_native) { - return g_list_length (meta_backend_get_gpus (renderer_native->backend)); + MetaRenderer *renderer = META_RENDERER (renderer_native); + MetaBackend *backend = meta_renderer_get_backend (renderer); + + return g_list_length (meta_backend_get_gpus (backend)); } static MetaRendererNativeGpuData * @@ -4083,8 +4038,9 @@ static void on_power_save_mode_changed (MetaMonitorManager *monitor_manager, MetaRendererNative *renderer_native) { - MetaBackendNative *backend_native = - META_BACKEND_NATIVE (renderer_native->backend); + MetaRenderer *renderer = META_RENDERER (renderer_native); + MetaBackend *backend = meta_renderer_get_backend (renderer); + MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend); MetaKms *kms = meta_backend_native_get_kms (backend_native); MetaPowerSave power_save_mode; @@ -4174,7 +4130,8 @@ meta_renderer_native_initable_init (GInitable *initable, GError **error) { MetaRendererNative *renderer_native = META_RENDERER_NATIVE (initable); - MetaBackend *backend = renderer_native->backend; + MetaRenderer *renderer = META_RENDERER (renderer_native); + MetaBackend *backend = meta_renderer_get_backend (renderer); GList *gpus; GList *l; @@ -4225,7 +4182,8 @@ static void meta_renderer_native_constructed (GObject *object) { MetaRendererNative *renderer_native = META_RENDERER_NATIVE (object); - MetaBackend *backend = renderer_native->backend; + MetaRenderer *renderer = META_RENDERER (renderer_native); + MetaBackend *backend = meta_renderer_get_backend (renderer); MetaSettings *settings = meta_backend_get_settings (backend); MetaMonitorManager *monitor_manager = meta_backend_get_monitor_manager (backend); @@ -4257,24 +4215,12 @@ meta_renderer_native_class_init (MetaRendererNativeClass *klass) GObjectClass *object_class = G_OBJECT_CLASS (klass); MetaRendererClass *renderer_class = META_RENDERER_CLASS (klass); - object_class->get_property = meta_renderer_native_get_property; - object_class->set_property = meta_renderer_native_set_property; object_class->finalize = meta_renderer_native_finalize; object_class->constructed = meta_renderer_native_constructed; renderer_class->create_cogl_renderer = meta_renderer_native_create_cogl_renderer; renderer_class->create_view = meta_renderer_native_create_view; renderer_class->rebuild_views = meta_renderer_native_rebuild_views; - - obj_props[PROP_BACKEND] = - g_param_spec_object ("backend", - "backend", - "MetaBackendNative", - META_TYPE_BACKEND_NATIVE, - G_PARAM_READWRITE | - G_PARAM_CONSTRUCT_ONLY | - G_PARAM_STATIC_STRINGS); - g_object_class_install_properties (object_class, PROP_LAST, obj_props); } MetaRendererNative * diff --git a/src/backends/x11/cm/meta-backend-x11-cm.c b/src/backends/x11/cm/meta-backend-x11-cm.c index ab139a767..e5ebd68f2 100644 --- a/src/backends/x11/cm/meta-backend-x11-cm.c +++ b/src/backends/x11/cm/meta-backend-x11-cm.c @@ -100,7 +100,9 @@ static MetaRenderer * meta_backend_x11_cm_create_renderer (MetaBackend *backend, GError **error) { - return g_object_new (META_TYPE_RENDERER_X11_CM, NULL); + return g_object_new (META_TYPE_RENDERER_X11_CM, + "backend", backend, + NULL); } static MetaMonitorManager * diff --git a/src/backends/x11/nested/meta-backend-x11-nested.c b/src/backends/x11/nested/meta-backend-x11-nested.c index 0f022aa76..b9e7ff3b8 100644 --- a/src/backends/x11/nested/meta-backend-x11-nested.c +++ b/src/backends/x11/nested/meta-backend-x11-nested.c @@ -40,7 +40,9 @@ static MetaRenderer * meta_backend_x11_nested_create_renderer (MetaBackend *backend, GError **error) { - return g_object_new (META_TYPE_RENDERER_X11_NESTED, NULL); + return g_object_new (META_TYPE_RENDERER_X11_NESTED, + "backend", backend, + NULL); } static MetaMonitorManager *