output/kms: Use meta_kms_connector_get_preferred_mode in init_output_modes
I have a monitor which can report two preferred modes: 5120x1440@240 and 3840x1080@60. Since they are enumerated in this order by KMS, init_output_modes would end up using 3840x1080@60 (and it was impossible to select any 5120x1440 mode in the GNOME display settings). Fix this by using meta_kms_connector_get_preferred_mode, which returns the first KMS mode with DRM_MODE_TYPE_PREFERRED. v2: * Use meta_kms_connector_get_preferred_mode. (Jonas Ådahl) Signed-off-by: Michel Dänzer <mdaenzer@redhat.com> Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3055>
This commit is contained in:
parent
49e6ce459c
commit
4d664fd797
@ -361,10 +361,12 @@ init_output_modes (MetaOutputInfo *output_info,
|
|||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
const MetaKmsConnectorState *connector_state;
|
const MetaKmsConnectorState *connector_state;
|
||||||
|
MetaKmsMode *kms_preferred_mode;
|
||||||
GList *l;
|
GList *l;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
connector_state = meta_kms_connector_get_current_state (kms_connector);
|
connector_state = meta_kms_connector_get_current_state (kms_connector);
|
||||||
|
kms_preferred_mode = meta_kms_connector_get_preferred_mode (kms_connector);
|
||||||
|
|
||||||
output_info->preferred_mode = NULL;
|
output_info->preferred_mode = NULL;
|
||||||
|
|
||||||
@ -373,12 +375,11 @@ init_output_modes (MetaOutputInfo *output_info,
|
|||||||
for (l = connector_state->modes, i = 0; l; l = l->next, i++)
|
for (l = connector_state->modes, i = 0; l; l = l->next, i++)
|
||||||
{
|
{
|
||||||
MetaKmsMode *kms_mode = l->data;
|
MetaKmsMode *kms_mode = l->data;
|
||||||
const drmModeModeInfo *drm_mode = meta_kms_mode_get_drm_mode (kms_mode);
|
|
||||||
MetaCrtcMode *crtc_mode;
|
MetaCrtcMode *crtc_mode;
|
||||||
|
|
||||||
crtc_mode = meta_gpu_kms_get_mode_from_kms_mode (gpu_kms, kms_mode);
|
crtc_mode = meta_gpu_kms_get_mode_from_kms_mode (gpu_kms, kms_mode);
|
||||||
output_info->modes[i] = crtc_mode;
|
output_info->modes[i] = crtc_mode;
|
||||||
if (drm_mode->type & DRM_MODE_TYPE_PREFERRED)
|
if (kms_mode == kms_preferred_mode)
|
||||||
output_info->preferred_mode = output_info->modes[i];
|
output_info->preferred_mode = output_info->modes[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user