From 9001fa9717c88f8d429fbfafb236f8b8cf92dba2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Fri, 27 May 2022 18:18:27 +0200 Subject: [PATCH] kms/crtc: Always read the gamma state It doesn't depend on whether the CRTC is active or not, so always read it. This is also useful to know whether a CRTC supports gamma, before it is being turned on, without relying on the existance of properties. Part-of: --- src/backends/native/meta-kms-crtc.c | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/src/backends/native/meta-kms-crtc.c b/src/backends/native/meta-kms-crtc.c index 8c2f8d783..93df17031 100644 --- a/src/backends/native/meta-kms-crtc.c +++ b/src/backends/native/meta-kms-crtc.c @@ -105,20 +105,14 @@ read_gamma_state (MetaKmsCrtc *crtc, MetaKmsImplDevice *impl_device, drmModeCrtc *drm_crtc) { - if (crtc_state->gamma.size != drm_crtc->gamma_size) - { - crtc_state->gamma.size = drm_crtc->gamma_size; + g_assert (!crtc_state->gamma.red && + !crtc_state->gamma.green && + !crtc_state->gamma.blue); - crtc_state->gamma.red = g_realloc_n (crtc_state->gamma.red, - drm_crtc->gamma_size, - sizeof (uint16_t)); - crtc_state->gamma.green = g_realloc_n (crtc_state->gamma.green, - drm_crtc->gamma_size, - sizeof (uint16_t)); - crtc_state->gamma.blue = g_realloc_n (crtc_state->gamma.blue, - drm_crtc->gamma_size, - sizeof (uint16_t)); - } + crtc_state->gamma.size = drm_crtc->gamma_size; + crtc_state->gamma.red = g_new0 (uint16_t, drm_crtc->gamma_size); + crtc_state->gamma.green = g_new0 (uint16_t, drm_crtc->gamma_size); + crtc_state->gamma.blue = g_new0 (uint16_t, drm_crtc->gamma_size); drmModeCrtcGetGamma (meta_kms_impl_device_get_fd (impl_device), crtc->id, @@ -209,7 +203,6 @@ meta_kms_crtc_read_state (MetaKmsCrtc *crtc, crtc_state.is_drm_mode_valid = drm_crtc->mode_valid; crtc_state.drm_mode = drm_crtc->mode; - crtc_state.gamma.size = 0; active_prop = &crtc->prop_table.props[META_KMS_CRTC_PROP_ACTIVE]; if (active_prop->prop_id) @@ -224,6 +217,8 @@ meta_kms_crtc_read_state (MetaKmsCrtc *crtc, crtc_state.is_active = drm_crtc->mode_valid; } + read_gamma_state (crtc, &crtc_state, impl_device, drm_crtc); + if (!crtc_state.is_active) { if (crtc->current_state.is_active) @@ -231,7 +226,6 @@ meta_kms_crtc_read_state (MetaKmsCrtc *crtc, } else { - read_gamma_state (crtc, &crtc_state, impl_device, drm_crtc); changes = meta_kms_crtc_state_changes (&crtc->current_state, &crtc_state); }