[igt-dev] [i-g-t V2 1/2] lib/igt_kms: Add a helper to check the max_bpc constraints

Sharma, Swati2 swati2.sharma at intel.com
Sun Jul 17 18:22:15 UTC 2022


LGTM
Reviewed-by:  Swati Sharma <swati2.sharma at intel.com>


On 04-Jul-22 7:02 PM, Bhanuprakash Modem wrote:
> The "max bpc" property only ensures that the bpc will not go beyond
> the value set through this property. It does not guarantee that the
> same bpc will be used for the given mode.
> 
> If clock/bandwidth constraints permit, the max bpc will be used to
> show the mode, otherwise the bpc will be reduced. So, if we really
> want a particular bpc set, we can try reducing the resolution, till
> we get the bpc that we set in max bpc property.
> 
> This patch will add a helper to iterate over all connector modes,
> and return True if there is a valid mode to use the same bpc as set
> by max_bpc property, else False.
> 
> Cc: Swati Sharma <swati2.sharma at intel.com>
> CC: Ankit Nautiyal <ankit.k.nautiyal at intel.com>
> Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem at intel.com>
> ---
>   lib/igt_kms.c | 38 ++++++++++++++++++++++++++++++++++++++
>   lib/igt_kms.h |  2 ++
>   2 files changed, 40 insertions(+)
> 
> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> index d8867f09..14064614 100644
> --- a/lib/igt_kms.c
> +++ b/lib/igt_kms.c
> @@ -5667,6 +5667,44 @@ bool igt_check_output_bpc_equal(int drmfd, enum pipe pipe,
>   	return (current == bpc);
>   }
>   
> +/*
> + * igt_max_bpc_constraint
> + * @display: a pointer to an #igt_display_t structure
> + * @pipe: Display pipe
> + * @output: Target output
> + * @bpc: BPC to compare with max & current bpc
> + *
> + * The "max bpc" property only ensures that the bpc will not go beyond
> + * the value set through this property. It does not guarantee that the
> + * same bpc will be used for the given mode.
> + *
> + * So, if we really want a particular bpc set, try reducing the resolution
> + * till we get the bpc that we set in max bpc property.
> + *
> + * Returns: True if suitable mode found to use requested bpc, else False.
> + */
> +bool igt_max_bpc_constraint(igt_display_t *display, enum pipe pipe,
> +			    igt_output_t *output, int bpc)
> +{
> +	drmModeConnector *connector = output->config.connector;
> +
> +	igt_sort_connector_modes(connector, sort_drm_modes_by_clk_dsc);
> +
> +	for_each_connector_mode(output) {
> +		igt_output_override_mode(output, &connector->modes[j__]);
> +		igt_display_commit2(display, display->is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY);
> +
> +		if (!igt_check_output_bpc_equal(display->drm_fd, pipe,
> +						output->name, bpc))
> +			continue;
> +
> +		return true;
> +	}
> +
> +	igt_output_override_mode(output, NULL);
> +	return false;
> +}
> +
>   /*
>    * igt_check_bigjoiner_support:
>    * @display: a pointer to an #igt_display_t structure
> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
> index 4b67708d..5856a4b3 100644
> --- a/lib/igt_kms.h
> +++ b/lib/igt_kms.h
> @@ -971,6 +971,8 @@ int sort_drm_modes_by_res_asc(const void *a, const void *b);
>   void igt_sort_connector_modes(drmModeConnector *connector,
>   		int (*comparator)(const void *, const void*));
>   
> +bool igt_max_bpc_constraint(igt_display_t *display, enum pipe pipe,
> +		igt_output_t *output, int bpc);
>   bool igt_check_bigjoiner_support(igt_display_t *display);
>   
>   #endif /* __IGT_KMS_H__ */

-- 
~Swati Sharma


More information about the igt-dev mailing list