diff --git a/src/backends/native/meta-kms-device.c b/src/backends/native/meta-kms-device.c index a04ad1e08..4dec048d0 100644 --- a/src/backends/native/meta-kms-device.c +++ b/src/backends/native/meta-kms-device.c @@ -785,6 +785,9 @@ meta_kms_device_new (MetaKms *kms, if (device->caps.addfb2_modifiers) device->flags |= META_KMS_DEVICE_FLAG_HAS_ADDFB2; + if (device->caps.supports_color_modes) + device->flags |= META_KMS_DEVICE_FLAG_SUPPORTS_COLOR_MODES; + return device; } diff --git a/src/backends/native/meta-kms-impl-device-atomic.c b/src/backends/native/meta-kms-impl-device-atomic.c index 678811adb..7860cc2c6 100644 --- a/src/backends/native/meta-kms-impl-device-atomic.c +++ b/src/backends/native/meta-kms-impl-device-atomic.c @@ -1423,6 +1423,9 @@ meta_kms_impl_device_atomic_initable_init (GInitable *initable, GError **error) { MetaKmsImplDevice *impl_device = META_KMS_IMPL_DEVICE (initable); + MetaKmsDeviceCaps *caps = meta_kms_impl_device_get_caps (impl_device); + + caps->supports_color_modes = TRUE; if (!initable_parent_iface->init (initable, cancellable, error)) return FALSE; diff --git a/src/backends/native/meta-kms-impl-device.c b/src/backends/native/meta-kms-impl-device.c index 25cb1cbd5..6f29303b8 100644 --- a/src/backends/native/meta-kms-impl-device.c +++ b/src/backends/native/meta-kms-impl-device.c @@ -231,7 +231,7 @@ meta_kms_impl_device_has_cursor_plane_for (MetaKmsImplDevice *impl_device, return FALSE; } -const MetaKmsDeviceCaps * +MetaKmsDeviceCaps * meta_kms_impl_device_get_caps (MetaKmsImplDevice *impl_device) { MetaKmsImplDevicePrivate *priv = diff --git a/src/backends/native/meta-kms-impl-device.h b/src/backends/native/meta-kms-impl-device.h index 0bbbefa75..22396dba6 100644 --- a/src/backends/native/meta-kms-impl-device.h +++ b/src/backends/native/meta-kms-impl-device.h @@ -38,6 +38,7 @@ typedef struct _MetaKmsDeviceCaps gboolean prefers_shadow_buffer; gboolean uses_monotonic_clock; gboolean addfb2_modifiers; + gboolean supports_color_modes; } MetaKmsDeviceCaps; @@ -122,7 +123,7 @@ GList * meta_kms_impl_device_peek_planes (MetaKmsImplDevice *impl_device); gboolean meta_kms_impl_device_has_cursor_plane_for (MetaKmsImplDevice *impl_device, MetaKmsCrtc *crtc); -const MetaKmsDeviceCaps * meta_kms_impl_device_get_caps (MetaKmsImplDevice *impl_device); +MetaKmsDeviceCaps * meta_kms_impl_device_get_caps (MetaKmsImplDevice *impl_device); GList * meta_kms_impl_device_copy_fallback_modes (MetaKmsImplDevice *impl_device); diff --git a/src/backends/native/meta-kms-types.h b/src/backends/native/meta-kms-types.h index f20464dcf..63530cf9d 100644 --- a/src/backends/native/meta-kms-types.h +++ b/src/backends/native/meta-kms-types.h @@ -64,6 +64,7 @@ typedef enum _MetaKmsDeviceFlag META_KMS_DEVICE_FLAG_FORCE_LEGACY = 1 << 6, META_KMS_DEVICE_FLAG_DISABLE_CLIENT_MODIFIERS = 1 << 7, META_KMS_DEVICE_FLAG_DISABLE_VRR = 1 << 8, + META_KMS_DEVICE_FLAG_SUPPORTS_COLOR_MODES = 1 << 9, } MetaKmsDeviceFlag; typedef enum _MetaKmsResourceChanges diff --git a/src/backends/native/meta-output-kms.c b/src/backends/native/meta-output-kms.c index e522947d1..52d4b7988 100644 --- a/src/backends/native/meta-output-kms.c +++ b/src/backends/native/meta-output-kms.c @@ -367,6 +367,8 @@ meta_output_kms_new (MetaGpuKms *gpu_kms, GError **error) { MetaGpu *gpu = META_GPU (gpu_kms); + MetaKmsDevice *device = meta_kms_connector_get_device (kms_connector); + MetaKmsDeviceFlag device_flags = meta_kms_device_get_flags (device); uint32_t connector_id; uint32_t gpu_id; g_autoptr (MetaOutputInfo) output_info = NULL; @@ -453,7 +455,8 @@ meta_output_kms_new (MetaGpuKms *gpu_kms, output_info->tile_info = connector_state->tile_info; - if (output_info->edid_info) + if ((device_flags & META_KMS_DEVICE_FLAG_SUPPORTS_COLOR_MODES) && + output_info->edid_info) { struct di_supported_signal_colorimetry *edid_colorimetry = &output_info->edid_info->colorimetry; @@ -467,7 +470,8 @@ meta_output_kms_new (MetaGpuKms *gpu_kms, output_info->supported_color_spaces |= (1 << META_OUTPUT_COLORSPACE_BT2020); } - if (connector_state->hdr.supported && + if ((device_flags & META_KMS_DEVICE_FLAG_SUPPORTS_COLOR_MODES) && + connector_state->hdr.supported && output_info->edid_info && output_info->edid_info->hdr_static_metadata.type1) {