diff --git a/src/backends/native/meta-kms-crtc.c b/src/backends/native/meta-kms-crtc.c index d89b12598..865cfbcde 100644 --- a/src/backends/native/meta-kms-crtc.c +++ b/src/backends/native/meta-kms-crtc.c @@ -180,6 +180,9 @@ read_crtc_legacy_gamma (MetaKmsCrtc *crtc, crtc_state->gamma.value->red, crtc_state->gamma.value->green, crtc_state->gamma.value->blue); + + if (meta_gamma_lut_is_identity (crtc_state->gamma.value)) + g_clear_pointer (&crtc_state->gamma.value, meta_gamma_lut_free); } static void diff --git a/src/backends/native/meta-kms-impl-device-simple.c b/src/backends/native/meta-kms-impl-device-simple.c index a00ae37e0..febcac01b 100644 --- a/src/backends/native/meta-kms-impl-device-simple.c +++ b/src/backends/native/meta-kms-impl-device-simple.c @@ -534,13 +534,21 @@ process_crtc_color_updates (MetaKmsImplDevice *impl_device, } else { + const MetaKmsCrtcState *crtc_state = + meta_kms_crtc_get_current_state (crtc); + g_autoptr (MetaGammaLut) identity_lut = + meta_gamma_lut_new_identity (crtc_state->gamma.size); + meta_topic (META_DEBUG_KMS, "[simple] Setting CRTC (%u, %s) gamma to bypass", meta_kms_crtc_get_id (crtc), meta_kms_impl_device_get_path (impl_device)); ret = drmModeCrtcSetGamma (fd, meta_kms_crtc_get_id (crtc), - 0, NULL, NULL, NULL); + identity_lut->size, + identity_lut->red, + identity_lut->green, + identity_lut->blue); } if (ret != 0)