[igt-dev] [PATCH i-g-t] tests/kms_color: check degamma and gamma props in CTM subtests

Alex Hung alex.hung at amd.com
Fri Nov 4 21:01:07 UTC 2022


Hi Melissa,

Thanks for helping out.

The "set_luts" is not necessary because free_lut() already checks NULL 
pointers. See inline comments.

On 2022-11-03 12:40, Melissa Wen wrote:
> Some CTM subtests generate and set degamma/gamma LUTs without checking
> if these properties are supported by the driver. Therefore, if degamma
> and gamma are used in the subtest, check the color properties before
> generate and set LUTs. If these properties are not supported, these
> subtests will skip instead of failing.
> 
> Signed-off-by: Melissa Wen <mwen at igalia.com>
> ---
>   tests/kms_color.c | 20 +++++++++++++-------
>   1 file changed, 13 insertions(+), 7 deletions(-)
> 
> diff --git a/tests/kms_color.c b/tests/kms_color.c
> index e4dc2465..e0222c42 100644
> --- a/tests/kms_color.c
> +++ b/tests/kms_color.c
> @@ -463,7 +463,7 @@ static bool test_pipe_ctm(data_t *data,
>   	};
>   	gamma_lut_t *degamma_linear, *gamma_linear;
>   	igt_output_t *output = data->output;
> -	bool ret = true;
> +	bool set_luts, ret = true;

set_luts is not needed.

>   	igt_display_t *display = &data->display;
>   	drmModeModeInfo *mode = data->mode;
>   	struct igt_fb fb_modeset, fb;
> @@ -472,9 +472,6 @@ static bool test_pipe_ctm(data_t *data,
>   
>   	igt_require(igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM));
>   
> -	degamma_linear = generate_table(data->degamma_lut_size, 1.0);
> -	gamma_linear = generate_table(data->gamma_lut_size, 1.0);
> -
>   	igt_output_set_pipe(output, primary->pipe->pipe);
>   	igt_output_override_mode(output, mode);
>   
> @@ -501,7 +498,14 @@ static bool test_pipe_ctm(data_t *data,
>   	 * representing intermediate values between 0 and 1.0 causes
>   	 * rounding issues and inaccuracies leading to crc mismatch.
>   	 */
> -	if (memcmp(before, after, sizeof(color_t))) {
> +	set_luts = memcmp(before, after, sizeof(color_t));
> +	if (set_luts) {

The above if condition can just stay the same since set_luts is not 
needed afterwards.

> +		igt_require(igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT));
> +		igt_require(igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_GAMMA_LUT));
> +
> +		degamma_linear = generate_table(data->degamma_lut_size, 1.0);
> +		gamma_linear = generate_table(data->gamma_lut_size, 1.0);
> +
>   		set_degamma(data, primary->pipe, degamma_linear);
>   		set_gamma(data, primary->pipe, gamma_linear);
>   	} else {
> @@ -542,8 +546,10 @@ static bool test_pipe_ctm(data_t *data,
>   	igt_remove_fb(data->drm_fd, &fb);
>   	igt_remove_fb(data->drm_fd, &fb_modeset);
>   
> -	free_lut(degamma_linear);
> -	free_lut(gamma_linear);
> +	if (set_luts) {
> +		free_lut(degamma_linear);
> +		free_lut(gamma_linear);
> +	}

set_luts is not needed, so no changes here because free_lut() checks 
NULL pointers, like in the function "test_pipe_legacy_gamma_reset".

>   
>   	return ret;
>   }





More information about the igt-dev mailing list