[PATCH i-g-t,v2 3/3] tests/chamelium/kms_chamelium_color: Fix ctm-limited-range subtest

Borah, Chaitanya Kumar chaitanya.kumar.borah at intel.com
Tue Apr 1 10:07:07 UTC 2025



> -----Original Message-----
> From: Sharma, Swati2 <swati2.sharma at intel.com>
> Sent: Friday, March 28, 2025 11:41 PM
> To: igt-dev at lists.freedesktop.org
> Cc: ville.syrjala at linux.intel.com; Shankar, Uma <uma.shankar at intel.com>;
> Borah, Chaitanya Kumar <chaitanya.kumar.borah at intel.com>; Sharma,
> Swati2 <swati2.sharma at intel.com>
> Subject: [PATCH i-g-t,v2 3/3] tests/chamelium/kms_chamelium_color: Fix
> ctm-limited-range subtest
> 
> This test verifies the connector's capability to clip RGB values when switching
> between full and limited range output.
> 
> Steps:
> 1. Render a frame with full RGB values (0-255).
> 2. Set the connector's range property to **limited**
> (BROADCAST_RGB_16_235).
>    - Despite the full-range input, the output should be clipped
>      to limited range (16-235).
> 3. Commit and capture the output frame (Frame A).
> 4. Render a frame with limited RGB values (16-235).
> 5. Set the connector's range property to **full** (BROADCAST_RGB_FULL).
>    - The output should now match the input without modification.
> 6. Commit and capture the output frame (Frame B).
> 7. Compare captured frames from steps 3 and 6.
>    - The frames should be identical, confirming that the
>      connector correctly handles limited range clipping.
> 
> v2: -remove unused fb (Chaitanya)
>     -remove computation of reference CRC (Chaitanya)
>     -add details of test (Chaitanya)
> 
> Signed-off-by: Swati Sharma <swati2.sharma at intel.com>
> ---
>  tests/chamelium/kms_chamelium_color.c | 60 ++++++++++-----------------
>  1 file changed, 23 insertions(+), 37 deletions(-)
> 
> diff --git a/tests/chamelium/kms_chamelium_color.c
> b/tests/chamelium/kms_chamelium_color.c
> index 68611ec6a..6009de7d0 100644
> --- a/tests/chamelium/kms_chamelium_color.c
> +++ b/tests/chamelium/kms_chamelium_color.c
> @@ -342,19 +342,19 @@ static bool test_pipe_limited_range_ctm(data_t
> *data,
>  		{ 0.0, 0.0, limited_result }
>  	};
>  	color_t red_green_blue_full[] = {
> -		{ 0.5, 0.0, 0.0 },
> -		{ 0.0, 0.5, 0.0 },
> -		{ 0.0, 0.0, 0.5 }
> +		{ 1.0, 0.0, 0.0 },
> +		{ 0.0, 1.0, 0.0 },
> +		{ 0.0, 0.0, 1.0 }
>  	};
>  	double ctm[] = { 1.0, 0.0, 0.0,
> -			0.0, 1.0, 0.0,
> -			0.0, 0.0, 1.0 };
> +			 0.0, 1.0, 0.0,
> +			 0.0, 0.0, 1.0 };
>  	gamma_lut_t *degamma_linear, *gamma_linear;
>  	igt_output_t *output = data->output;
>  	drmModeModeInfo *mode = data->mode;
> -	struct igt_fb fb_modeset, fb, fbref;
> -	struct chamelium_frame_dump *frame_limited;
> -	int fb_id, fb_modeset_id, fbref_id;
> +	struct igt_fb fb;
> +	struct chamelium_frame_dump *frame_limited, *frame_full;
> +	int fb_id;
>  	bool ret = false;
> 
>  	igt_require(igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM));
> @@ -373,28 +373,11 @@ static bool test_pipe_limited_range_ctm(data_t
> *data,
>  			      &fb);
>  	igt_assert(fb_id);
> 
> -	fb_modeset_id = igt_create_fb(data->drm_fd,
> -				      mode->hdisplay,
> -				      mode->vdisplay,
> -				      DRM_FORMAT_XRGB8888,
> -				      DRM_FORMAT_MOD_LINEAR,
> -				      &fb_modeset);
> -	igt_assert(fb_modeset_id);
> -
> -	fbref_id = igt_create_fb(data->drm_fd,
> -				 mode->hdisplay,
> -				 mode->vdisplay,
> -				 DRM_FORMAT_XRGB8888,
> -				 DRM_FORMAT_MOD_LINEAR,
> -				 &fbref);
> -	igt_assert(fbref_id);
> -
> -	igt_plane_set_fb(primary, &fb_modeset);
> -
>  	set_degamma(data, primary->pipe, degamma_linear);
>  	set_gamma(data, primary->pipe, gamma_linear);
>  	set_ctm(primary->pipe, ctm);
> 
> +	/* Set the output into full range. */
>  	igt_output_set_prop_value(output,
>  				  IGT_CONNECTOR_BROADCAST_RGB,
>  				  BROADCAST_RGB_FULL);
> @@ -402,11 +385,21 @@ static bool test_pipe_limited_range_ctm(data_t
> *data,
>  	igt_plane_set_fb(primary, &fb);
>  	igt_display_commit(&data->display);
> 
> +	chamelium_capture(data->chamelium, port, 0, 0, 0, 0, 1);
> +	frame_full =
> +		chamelium_read_captured_frame(data->chamelium, 0);
> +
>  	/* Set the output into limited range. */
>  	igt_output_set_prop_value(output,
>  				  IGT_CONNECTOR_BROADCAST_RGB,
>  				  BROADCAST_RGB_16_235);
>  	paint_rectangles(data, mode, red_green_blue_full, &fb);
> +	igt_plane_set_fb(primary, &fb);

We may not need to set this again. Hopefully, there is no downside to painting an fb already assigned to a plane (apart from transient artifacts).
If there is, then we should consider using different frame buffers for full and limited painting.

Otherwise LGTM.

Reviewed-by: Chaitanya Kumar Borah <chaitanya.kumar.borah at intel.com>

> +	igt_display_commit(&data->display);
> +
> +	chamelium_capture(data->chamelium, port, 0, 0, 0, 0, 1);
> +	frame_limited =
> +		chamelium_read_captured_frame(data->chamelium, 0);
> 
>  	/* And reset.. */
>  	igt_output_set_prop_value(output,
> @@ -414,18 +407,11 @@ static bool test_pipe_limited_range_ctm(data_t
> *data,
>  				  BROADCAST_RGB_FULL);
>  	igt_plane_set_fb(primary, NULL);
>  	igt_output_set_pipe(output, PIPE_NONE);
> -	chamelium_capture(data->chamelium, port, 0, 0, 0, 0, 1);
> -	frame_limited =
> -		chamelium_read_captured_frame(data->chamelium, 0);
> 
> -
> -	/* Verify that the framebuffer reference of the software
> -	 * computed output is equal to the frame dump of the CTM
> -	 * matrix transformation output.
> -	 */
> -	ret = chamelium_frame_match_or_dump(data->chamelium, port,
> -					    frame_limited, &fbref,
> -					    CHAMELIUM_CHECK_ANALOG);
> +	/* Verify frame dumps are equal. */
> +	ret = chamelium_frame_match_or_dump_frame_pair(data-
> >chamelium, port,
> +						       frame_full, frame_limited,
> +
> CHAMELIUM_CHECK_ANALOG);
> 
>  	free_lut(gamma_linear);
>  	free_lut(degamma_linear);
> --
> 2.25.1



More information about the igt-dev mailing list