kms/connector: Track max_bpc in KmsConnectorState

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3552>
This commit is contained in:
Sebastian Wick 2024-01-29 16:41:48 +01:00 committed by Marge Bot
parent e9e613a6c3
commit 3e14edb00c
4 changed files with 12 additions and 29 deletions

View File

@ -195,19 +195,6 @@ has_privacy_screen_software_toggle (MetaKmsConnector *connector)
META_KMS_CONNECTOR_PROP_PRIVACY_SCREEN_SW_STATE) != 0; META_KMS_CONNECTOR_PROP_PRIVACY_SCREEN_SW_STATE) != 0;
} }
const MetaKmsRange *
meta_kms_connector_get_max_bpc (MetaKmsConnector *connector)
{
const MetaKmsRange *range = NULL;
if (connector->current_state &&
meta_kms_connector_get_prop_id (connector,
META_KMS_CONNECTOR_PROP_MAX_BPC))
range = &connector->current_state->max_bpc;
return range;
}
static void static void
sync_fd_held (MetaKmsConnector *connector, sync_fd_held (MetaKmsConnector *connector,
MetaKmsImplDevice *impl_device) MetaKmsImplDevice *impl_device)
@ -446,6 +433,7 @@ state_set_properties (MetaKmsConnectorState *state,
prop = &props[META_KMS_CONNECTOR_PROP_MAX_BPC]; prop = &props[META_KMS_CONNECTOR_PROP_MAX_BPC];
if (prop->prop_id) if (prop->prop_id)
{ {
state->max_bpc.supported = TRUE;
state->max_bpc.value = prop->value; state->max_bpc.value = prop->value;
state->max_bpc.min_value = prop->range_min; state->max_bpc.min_value = prop->range_min;
state->max_bpc.max_value = prop->range_max; state->max_bpc.max_value = prop->range_max;
@ -1063,7 +1051,8 @@ meta_kms_connector_state_changes (MetaKmsConnectorState *state,
if (!kms_modes_equal (state->modes, new_state->modes)) if (!kms_modes_equal (state->modes, new_state->modes))
return META_KMS_RESOURCE_CHANGE_FULL; return META_KMS_RESOURCE_CHANGE_FULL;
if (state->max_bpc.value != new_state->max_bpc.value || if (state->max_bpc.supported != new_state->max_bpc.supported ||
state->max_bpc.value != new_state->max_bpc.value ||
state->max_bpc.min_value != new_state->max_bpc.min_value || state->max_bpc.min_value != new_state->max_bpc.min_value ||
state->max_bpc.max_value != new_state->max_bpc.max_value) state->max_bpc.max_value != new_state->max_bpc.max_value)
return META_KMS_RESOURCE_CHANGE_FULL; return META_KMS_RESOURCE_CHANGE_FULL;

View File

@ -57,7 +57,12 @@ typedef struct _MetaKmsConnectorState
MetaMonitorTransform panel_orientation_transform; MetaMonitorTransform panel_orientation_transform;
MetaKmsRange max_bpc; struct {
uint64_t value;
uint64_t min_value;
uint64_t max_value;
gboolean supported;
} max_bpc;
struct { struct {
MetaOutputColorspace value; MetaOutputColorspace value;
@ -100,8 +105,6 @@ const MetaKmsConnectorState * meta_kms_connector_get_current_state (MetaKmsConne
gboolean meta_kms_connector_is_privacy_screen_supported (MetaKmsConnector *connector); gboolean meta_kms_connector_is_privacy_screen_supported (MetaKmsConnector *connector);
const MetaKmsRange * meta_kms_connector_get_max_bpc (MetaKmsConnector *connector);
gboolean meta_kms_connector_is_color_space_supported (MetaKmsConnector *connector, gboolean meta_kms_connector_is_color_space_supported (MetaKmsConnector *connector,
MetaOutputColorspace color_space); MetaOutputColorspace color_space);

View File

@ -88,10 +88,3 @@ typedef enum _MetaKmsPropType
META_KMS_PROP_TYPE_RAW = 0, META_KMS_PROP_TYPE_RAW = 0,
META_KMS_PROP_TYPE_FIXED_16, META_KMS_PROP_TYPE_FIXED_16,
} MetaKmsPropType; } MetaKmsPropType;
typedef struct _MetaKmsRange
{
uint64_t value;
uint64_t min_value;
uint64_t max_value;
} MetaKmsRange;

View File

@ -316,7 +316,6 @@ meta_output_kms_new (MetaGpuKms *gpu_kms,
const MetaKmsConnectorState *connector_state; const MetaKmsConnectorState *connector_state;
GArray *crtcs; GArray *crtcs;
GList *l; GList *l;
const MetaKmsRange *max_bpc_range;
gpu_id = meta_gpu_kms_get_id (gpu_kms); gpu_id = meta_gpu_kms_get_id (gpu_kms);
connector_id = meta_kms_connector_get_id (kms_connector); connector_id = meta_kms_connector_get_id (kms_connector);
@ -367,11 +366,10 @@ meta_output_kms_new (MetaGpuKms *gpu_kms,
output_info->hotplug_mode_update = connector_state->hotplug_mode_update; output_info->hotplug_mode_update = connector_state->hotplug_mode_update;
output_info->supports_underscanning = connector_state->underscan.supported; output_info->supports_underscanning = connector_state->underscan.supported;
max_bpc_range = meta_kms_connector_get_max_bpc (kms_connector); if (connector_state->max_bpc.supported)
if (max_bpc_range)
{ {
output_info->max_bpc_min = max_bpc_range->min_value; output_info->max_bpc_min = connector_state->max_bpc.min_value;
output_info->max_bpc_max = max_bpc_range->max_value; output_info->max_bpc_max = connector_state->max_bpc.max_value;
} }
if (connector_state->edid_data) if (connector_state->edid_data)