mirror of
https://github.com/brl/mutter.git
synced 2025-08-04 07:34:53 +00:00
monitor-manager: Make MetaCrtc a GObject
Turn MetaCrtc into a GObject and move it to a separate file. This changes the storage format, resulting in changing the API for accessing MetaCrtcs from using an array, to using a GList. https://bugzilla.gnome.org/show_bug.cgi?id=785381
This commit is contained in:
@@ -25,6 +25,7 @@
|
||||
|
||||
#include "meta-monitor-manager-kms.h"
|
||||
#include "meta-monitor-config-manager.h"
|
||||
#include "meta-crtc.h"
|
||||
#include "meta-output.h"
|
||||
#include "meta-backend-private.h"
|
||||
#include "meta-renderer-native.h"
|
||||
@@ -663,13 +664,15 @@ add_common_modes (MetaMonitorManager *manager,
|
||||
g_ptr_array_free (array, TRUE);
|
||||
}
|
||||
|
||||
static void
|
||||
init_crtc (MetaCrtc *crtc,
|
||||
MetaMonitorManager *manager,
|
||||
drmModeCrtc *drm_crtc)
|
||||
static MetaCrtc *
|
||||
create_crtc (MetaMonitorManager *manager,
|
||||
drmModeCrtc *drm_crtc)
|
||||
{
|
||||
MetaCrtc *crtc;
|
||||
unsigned int i;
|
||||
|
||||
crtc = g_object_new (META_TYPE_CRTC, NULL);
|
||||
|
||||
crtc->crtc_id = drm_crtc->crtc_id;
|
||||
crtc->rect.x = drm_crtc->x;
|
||||
crtc->rect.y = drm_crtc->y;
|
||||
@@ -694,6 +697,8 @@ init_crtc (MetaCrtc *crtc,
|
||||
|
||||
crtc->driver_private = g_new0 (MetaCrtcKms, 1);
|
||||
crtc->driver_notify = (GDestroyNotify) meta_crtc_destroy_notify;
|
||||
|
||||
return crtc;
|
||||
}
|
||||
|
||||
static MetaOutput *
|
||||
@@ -706,6 +711,7 @@ create_output (MetaMonitorManager *manager,
|
||||
MetaOutputKms *output_kms;
|
||||
GArray *crtcs;
|
||||
GBytes *edid;
|
||||
GList *l;
|
||||
unsigned int i;
|
||||
unsigned int crtc_mask;
|
||||
|
||||
@@ -791,11 +797,12 @@ create_output (MetaMonitorManager *manager,
|
||||
|
||||
crtcs = g_array_new (FALSE, FALSE, sizeof (MetaCrtc*));
|
||||
|
||||
for (i = 0; i < manager->n_crtcs; i++)
|
||||
for (l = manager->crtcs, i = 0; l; l = l->next, i++)
|
||||
{
|
||||
if (crtc_mask & (1 << i))
|
||||
{
|
||||
MetaCrtc *crtc = &manager->crtcs[i];
|
||||
MetaCrtc *crtc = l->data;
|
||||
|
||||
g_array_append_val (crtcs, crtc);
|
||||
}
|
||||
}
|
||||
@@ -805,11 +812,13 @@ create_output (MetaMonitorManager *manager,
|
||||
|
||||
if (output_kms->current_encoder && output_kms->current_encoder->crtc_id != 0)
|
||||
{
|
||||
for (i = 0; i < manager->n_crtcs; i++)
|
||||
for (l = manager->crtcs; l; l = l->next)
|
||||
{
|
||||
if (manager->crtcs[i].crtc_id == output_kms->current_encoder->crtc_id)
|
||||
MetaCrtc *crtc = l->data;
|
||||
|
||||
if (crtc->crtc_id == output_kms->current_encoder->crtc_id)
|
||||
{
|
||||
output->crtc = &manager->crtcs[i];
|
||||
output->crtc = crtc;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1041,8 +1050,7 @@ init_crtcs (MetaMonitorManager *manager,
|
||||
MetaMonitorManagerKms *manager_kms = META_MONITOR_MANAGER_KMS (manager);
|
||||
unsigned int i;
|
||||
|
||||
manager->n_crtcs = resources->count_crtcs;
|
||||
manager->crtcs = g_new0 (MetaCrtc, manager->n_crtcs);
|
||||
manager->crtcs = NULL;
|
||||
|
||||
for (i = 0; i < (unsigned)resources->count_crtcs; i++)
|
||||
{
|
||||
@@ -1051,13 +1059,13 @@ init_crtcs (MetaMonitorManager *manager,
|
||||
|
||||
drm_crtc = drmModeGetCrtc (manager_kms->fd, resources->crtcs[i]);
|
||||
|
||||
crtc = &manager->crtcs[i];
|
||||
|
||||
init_crtc (crtc, manager, drm_crtc);
|
||||
crtc = create_crtc (manager, drm_crtc);
|
||||
find_crtc_properties (manager_kms, crtc);
|
||||
init_crtc_rotations (manager, crtc, i);
|
||||
|
||||
drmModeFreeCrtc (drm_crtc);
|
||||
|
||||
manager->crtcs = g_list_append (manager->crtcs, crtc);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1327,9 +1335,9 @@ apply_crtc_assignments (MetaMonitorManager *manager,
|
||||
}
|
||||
/* Disable CRTCs not mentioned in the list (they have is_dirty == FALSE,
|
||||
because they weren't seen in the first loop) */
|
||||
for (i = 0; i < manager->n_crtcs; i++)
|
||||
for (l = manager->crtcs; l; l = l->next)
|
||||
{
|
||||
MetaCrtc *crtc = &manager->crtcs[i];
|
||||
MetaCrtc *crtc = l->data;
|
||||
|
||||
crtc->logical_monitor = NULL;
|
||||
|
||||
|
@@ -48,6 +48,7 @@
|
||||
#include <xf86drm.h>
|
||||
|
||||
#include "backends/meta-backend-private.h"
|
||||
#include "backends/meta-crtc.h"
|
||||
#include "backends/meta-egl.h"
|
||||
#include "backends/meta-egl-ext.h"
|
||||
#include "backends/meta-logical-monitor.h"
|
||||
@@ -683,11 +684,13 @@ meta_onscreen_native_set_crtc_modes (MetaOnscreenNative *onscreen_native)
|
||||
}
|
||||
else
|
||||
{
|
||||
unsigned int i;
|
||||
GList *crtcs;
|
||||
GList *l;
|
||||
|
||||
for (i = 0; i < monitor_manager->n_crtcs; i++)
|
||||
crtcs = meta_monitor_manager_get_crtcs (monitor_manager);
|
||||
for (l = crtcs; l; l = l->next)
|
||||
{
|
||||
MetaCrtc *crtc = &monitor_manager->crtcs[i];
|
||||
MetaCrtc *crtc = l->data;
|
||||
|
||||
meta_monitor_manager_kms_apply_crtc_mode (monitor_manager_kms,
|
||||
crtc,
|
||||
@@ -768,11 +771,13 @@ meta_onscreen_native_flip_crtcs (CoglOnscreen *onscreen)
|
||||
}
|
||||
else
|
||||
{
|
||||
unsigned int i;
|
||||
GList *crtcs;
|
||||
GList *l;
|
||||
|
||||
for (i = 0; i < monitor_manager->n_crtcs; i++)
|
||||
crtcs = meta_monitor_manager_get_crtcs (monitor_manager);
|
||||
for (l = crtcs; l; l = l->next)
|
||||
{
|
||||
MetaCrtc *crtc = &monitor_manager->crtcs[i];
|
||||
MetaCrtc *crtc = l->data;
|
||||
|
||||
meta_onscreen_native_flip_crtc (onscreen_native, flip_closure,
|
||||
crtc, crtc->rect.x, crtc->rect.y,
|
||||
@@ -1827,11 +1832,13 @@ meta_renderer_native_finish_frame (MetaRendererNative *renderer_native)
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
MetaMonitorManagerKms *monitor_manager_kms =
|
||||
META_MONITOR_MANAGER_KMS (monitor_manager);
|
||||
unsigned int i;
|
||||
GList *crtcs;
|
||||
GList *l;
|
||||
|
||||
for (i = 0; i < monitor_manager->n_crtcs; i++)
|
||||
crtcs = meta_monitor_manager_get_crtcs (monitor_manager);
|
||||
for (l = crtcs; l; l = l->next)
|
||||
{
|
||||
MetaCrtc *crtc = &monitor_manager->crtcs[i];
|
||||
MetaCrtc *crtc = l->data;
|
||||
|
||||
if (crtc->current_mode)
|
||||
continue;
|
||||
|
Reference in New Issue
Block a user