mirror of
https://github.com/brl/mutter.git
synced 2024-11-26 01:50:42 -05:00
kms/update: Make change updates to take MetaKmsMode
This will be needed for state keeping connected to turning mode infos into blobs later used by the atomic modesetting implementation. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1488>
This commit is contained in:
parent
abac217617
commit
309651df6b
@ -176,7 +176,7 @@ meta_crtc_kms_set_mode (MetaCrtcKms *crtc_kms,
|
|||||||
MetaCrtc *crtc = META_CRTC (crtc_kms);
|
MetaCrtc *crtc = META_CRTC (crtc_kms);
|
||||||
MetaGpu *gpu = meta_crtc_get_gpu (crtc);
|
MetaGpu *gpu = meta_crtc_get_gpu (crtc);
|
||||||
GList *connectors;
|
GList *connectors;
|
||||||
const drmModeModeInfo *mode;
|
MetaKmsMode *kms_mode;
|
||||||
|
|
||||||
connectors = generate_crtc_connector_list (gpu, crtc);
|
connectors = generate_crtc_connector_list (gpu, crtc);
|
||||||
|
|
||||||
@ -184,17 +184,15 @@ meta_crtc_kms_set_mode (MetaCrtcKms *crtc_kms,
|
|||||||
{
|
{
|
||||||
const MetaCrtcConfig *crtc_config = meta_crtc_get_config (crtc);
|
const MetaCrtcConfig *crtc_config = meta_crtc_get_config (crtc);
|
||||||
MetaCrtcModeKms *crtc_mode_kms = META_CRTC_MODE_KMS (crtc_config->mode);
|
MetaCrtcModeKms *crtc_mode_kms = META_CRTC_MODE_KMS (crtc_config->mode);
|
||||||
MetaKmsMode *kms_mode;
|
|
||||||
|
|
||||||
kms_mode = meta_crtc_mode_kms_get_kms_mode (crtc_mode_kms);
|
kms_mode = meta_crtc_mode_kms_get_kms_mode (crtc_mode_kms);
|
||||||
mode = meta_kms_mode_get_drm_mode (kms_mode);
|
|
||||||
|
|
||||||
g_debug ("Setting CRTC (%" G_GUINT64_FORMAT ") mode to %s",
|
g_debug ("Setting CRTC (%" G_GUINT64_FORMAT ") mode to %s",
|
||||||
meta_crtc_get_id (crtc), mode->name);
|
meta_crtc_get_id (crtc), meta_kms_mode_get_name (kms_mode));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mode = NULL;
|
kms_mode = NULL;
|
||||||
|
|
||||||
g_debug ("Unsetting CRTC (%" G_GUINT64_FORMAT ") mode",
|
g_debug ("Unsetting CRTC (%" G_GUINT64_FORMAT ") mode",
|
||||||
meta_crtc_get_id (crtc));
|
meta_crtc_get_id (crtc));
|
||||||
@ -203,7 +201,7 @@ meta_crtc_kms_set_mode (MetaCrtcKms *crtc_kms,
|
|||||||
meta_kms_update_mode_set (kms_update,
|
meta_kms_update_mode_set (kms_update,
|
||||||
meta_crtc_kms_get_kms_crtc (crtc_kms),
|
meta_crtc_kms_get_kms_crtc (crtc_kms),
|
||||||
g_steal_pointer (&connectors),
|
g_steal_pointer (&connectors),
|
||||||
mode);
|
kms_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
#include "backends/native/meta-kms-device-private.h"
|
#include "backends/native/meta-kms-device-private.h"
|
||||||
#include "backends/native/meta-kms-impl-device.h"
|
#include "backends/native/meta-kms-impl-device.h"
|
||||||
|
#include "backends/native/meta-kms-mode.h"
|
||||||
#include "backends/native/meta-kms-update-private.h"
|
#include "backends/native/meta-kms-update-private.h"
|
||||||
|
|
||||||
struct _MetaKmsCrtc
|
struct _MetaKmsCrtc
|
||||||
@ -168,17 +169,19 @@ meta_kms_crtc_predict_state (MetaKmsCrtc *crtc,
|
|||||||
if (mode_set->crtc != crtc)
|
if (mode_set->crtc != crtc)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (mode_set->drm_mode)
|
if (mode_set->mode)
|
||||||
{
|
{
|
||||||
MetaKmsPlaneAssignment *plane_assignment;
|
MetaKmsPlaneAssignment *plane_assignment;
|
||||||
|
const drmModeModeInfo *drm_mode;
|
||||||
|
|
||||||
plane_assignment =
|
plane_assignment =
|
||||||
meta_kms_update_get_primary_plane_assignment (update, crtc);
|
meta_kms_update_get_primary_plane_assignment (update, crtc);
|
||||||
|
drm_mode = meta_kms_mode_get_drm_mode (mode_set->mode);
|
||||||
|
|
||||||
crtc->current_state.rect =
|
crtc->current_state.rect =
|
||||||
meta_fixed_16_rectangle_to_rectangle (plane_assignment->src_rect);
|
meta_fixed_16_rectangle_to_rectangle (plane_assignment->src_rect);
|
||||||
crtc->current_state.is_drm_mode_valid = TRUE;
|
crtc->current_state.is_drm_mode_valid = TRUE;
|
||||||
crtc->current_state.drm_mode = *mode_set->drm_mode;
|
crtc->current_state.drm_mode = *drm_mode;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#include "backends/native/meta-kms-connector.h"
|
#include "backends/native/meta-kms-connector.h"
|
||||||
#include "backends/native/meta-kms-crtc.h"
|
#include "backends/native/meta-kms-crtc.h"
|
||||||
#include "backends/native/meta-kms-device-private.h"
|
#include "backends/native/meta-kms-device-private.h"
|
||||||
|
#include "backends/native/meta-kms-mode.h"
|
||||||
#include "backends/native/meta-kms-page-flip-private.h"
|
#include "backends/native/meta-kms-page-flip-private.h"
|
||||||
#include "backends/native/meta-kms-plane.h"
|
#include "backends/native/meta-kms-plane.h"
|
||||||
#include "backends/native/meta-kms-private.h"
|
#include "backends/native/meta-kms-private.h"
|
||||||
@ -192,6 +193,7 @@ process_mode_set (MetaKmsImpl *impl,
|
|||||||
g_autofree uint32_t *connectors = NULL;
|
g_autofree uint32_t *connectors = NULL;
|
||||||
int n_connectors;
|
int n_connectors;
|
||||||
MetaKmsPlaneAssignment *plane_assignment;
|
MetaKmsPlaneAssignment *plane_assignment;
|
||||||
|
drmModeModeInfo *drm_mode;
|
||||||
uint32_t x, y;
|
uint32_t x, y;
|
||||||
uint32_t fb_id;
|
uint32_t fb_id;
|
||||||
int fd;
|
int fd;
|
||||||
@ -199,10 +201,13 @@ process_mode_set (MetaKmsImpl *impl,
|
|||||||
|
|
||||||
crtc = mode_set->crtc;
|
crtc = mode_set->crtc;
|
||||||
|
|
||||||
if (mode_set->drm_mode)
|
if (mode_set->mode)
|
||||||
{
|
{
|
||||||
GList *l;
|
GList *l;
|
||||||
|
|
||||||
|
drm_mode = g_alloca (sizeof *drm_mode);
|
||||||
|
*drm_mode = *meta_kms_mode_get_drm_mode (mode_set->mode);
|
||||||
|
|
||||||
fill_connector_ids_array (mode_set->connectors,
|
fill_connector_ids_array (mode_set->connectors,
|
||||||
&connectors,
|
&connectors,
|
||||||
&n_connectors);
|
&n_connectors);
|
||||||
@ -233,6 +238,7 @@ process_mode_set (MetaKmsImpl *impl,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
drm_mode = NULL;
|
||||||
x = y = 0;
|
x = y = 0;
|
||||||
n_connectors = 0;
|
n_connectors = 0;
|
||||||
connectors = NULL;
|
connectors = NULL;
|
||||||
@ -245,23 +251,23 @@ process_mode_set (MetaKmsImpl *impl,
|
|||||||
fb_id,
|
fb_id,
|
||||||
x, y,
|
x, y,
|
||||||
connectors, n_connectors,
|
connectors, n_connectors,
|
||||||
mode_set->drm_mode);
|
drm_mode);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
{
|
{
|
||||||
g_set_error (error, G_IO_ERROR, g_io_error_from_errno (-ret),
|
g_set_error (error, G_IO_ERROR, g_io_error_from_errno (-ret),
|
||||||
"Failed to set mode %s on CRTC %u: %s",
|
"Failed to set mode %s on CRTC %u: %s",
|
||||||
mode_set->drm_mode ? mode_set->drm_mode->name : "off",
|
drm_mode ? drm_mode->name : "off",
|
||||||
meta_kms_crtc_get_id (crtc),
|
meta_kms_crtc_get_id (crtc),
|
||||||
g_strerror (-ret));
|
g_strerror (-ret));
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mode_set->drm_mode)
|
if (drm_mode)
|
||||||
{
|
{
|
||||||
g_hash_table_replace (impl_simple->cached_mode_sets,
|
g_hash_table_replace (impl_simple->cached_mode_sets,
|
||||||
crtc,
|
crtc,
|
||||||
cached_mode_set_new (mode_set->connectors,
|
cached_mode_set_new (mode_set->connectors,
|
||||||
mode_set->drm_mode));
|
drm_mode));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -63,7 +63,7 @@ typedef struct _MetaKmsModeSet
|
|||||||
{
|
{
|
||||||
MetaKmsCrtc *crtc;
|
MetaKmsCrtc *crtc;
|
||||||
GList *connectors;
|
GList *connectors;
|
||||||
drmModeModeInfo *drm_mode;
|
MetaKmsMode *mode;
|
||||||
} MetaKmsModeSet;
|
} MetaKmsModeSet;
|
||||||
|
|
||||||
typedef struct _MetaKmsConnectorProperty
|
typedef struct _MetaKmsConnectorProperty
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include "backends/native/meta-kms-update-private.h"
|
#include "backends/native/meta-kms-update-private.h"
|
||||||
|
|
||||||
#include "backends/meta-display-config-shared.h"
|
#include "backends/meta-display-config-shared.h"
|
||||||
|
#include "backends/native/meta-kms-mode-private.h"
|
||||||
#include "backends/native/meta-kms-plane.h"
|
#include "backends/native/meta-kms-plane.h"
|
||||||
|
|
||||||
struct _MetaKmsUpdate
|
struct _MetaKmsUpdate
|
||||||
@ -149,7 +150,6 @@ meta_kms_plane_assignment_free (MetaKmsPlaneAssignment *plane_assignment)
|
|||||||
static void
|
static void
|
||||||
meta_kms_mode_set_free (MetaKmsModeSet *mode_set)
|
meta_kms_mode_set_free (MetaKmsModeSet *mode_set)
|
||||||
{
|
{
|
||||||
g_free (mode_set->drm_mode);
|
|
||||||
g_list_free (mode_set->connectors);
|
g_list_free (mode_set->connectors);
|
||||||
g_free (mode_set);
|
g_free (mode_set);
|
||||||
}
|
}
|
||||||
@ -208,10 +208,10 @@ meta_kms_update_unassign_plane (MetaKmsUpdate *update,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
meta_kms_update_mode_set (MetaKmsUpdate *update,
|
meta_kms_update_mode_set (MetaKmsUpdate *update,
|
||||||
MetaKmsCrtc *crtc,
|
MetaKmsCrtc *crtc,
|
||||||
GList *connectors,
|
GList *connectors,
|
||||||
const drmModeModeInfo *drm_mode)
|
MetaKmsMode *mode)
|
||||||
{
|
{
|
||||||
MetaKmsModeSet *mode_set;
|
MetaKmsModeSet *mode_set;
|
||||||
|
|
||||||
@ -221,7 +221,7 @@ meta_kms_update_mode_set (MetaKmsUpdate *update,
|
|||||||
*mode_set = (MetaKmsModeSet) {
|
*mode_set = (MetaKmsModeSet) {
|
||||||
.crtc = crtc,
|
.crtc = crtc,
|
||||||
.connectors = connectors,
|
.connectors = connectors,
|
||||||
.drm_mode = drm_mode ? g_memdup (drm_mode, sizeof *drm_mode) : NULL,
|
.mode = mode,
|
||||||
};
|
};
|
||||||
|
|
||||||
update->mode_sets = g_list_prepend (update->mode_sets, mode_set);
|
update->mode_sets = g_list_prepend (update->mode_sets, mode_set);
|
||||||
|
@ -85,10 +85,10 @@ MetaKmsUpdate * meta_kms_update_new (void);
|
|||||||
|
|
||||||
void meta_kms_update_free (MetaKmsUpdate *update);
|
void meta_kms_update_free (MetaKmsUpdate *update);
|
||||||
|
|
||||||
void meta_kms_update_mode_set (MetaKmsUpdate *update,
|
void meta_kms_update_mode_set (MetaKmsUpdate *update,
|
||||||
MetaKmsCrtc *crtc,
|
MetaKmsCrtc *crtc,
|
||||||
GList *connectors,
|
GList *connectors,
|
||||||
const drmModeModeInfo *drm_mode);
|
MetaKmsMode *mode);
|
||||||
|
|
||||||
MetaKmsPlaneAssignment * meta_kms_update_assign_plane (MetaKmsUpdate *update,
|
MetaKmsPlaneAssignment * meta_kms_update_assign_plane (MetaKmsUpdate *update,
|
||||||
MetaKmsCrtc *crtc,
|
MetaKmsCrtc *crtc,
|
||||||
|
Loading…
Reference in New Issue
Block a user