[igt-dev] [PATCH i-g-t] tests/kms_plane_alpha_blend: Fix alpha in coverage-vs-premult-vs-constant

Juha-Pekka Heikkila juhapekka.heikkila at gmail.com
Fri Jun 18 08:52:59 UTC 2021


On 11.6.2021 15.44, Vidya Srinivas wrote:
> Patch sets alpha to 0x7e for coverage, Pre-multiplied and constant as
> per the buffer being created initially in prepare_crtc. Patch also
> add commit after setting fb on primary plane. Without this change
> CRC mismatch is seen on few Gen11 systems.
> 
> Signed-off-by: Vidya Srinivas <vidya.srinivas at intel.com>
> ---
>   tests/kms_plane_alpha_blend.c | 9 +++++++--
>   1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/tests/kms_plane_alpha_blend.c b/tests/kms_plane_alpha_blend.c
> index a37cb27c7d62..d3a73cf43fcd 100644
> --- a/tests/kms_plane_alpha_blend.c
> +++ b/tests/kms_plane_alpha_blend.c
> @@ -448,29 +448,34 @@ static void coverage_premult_constant(data_t *data, enum pipe pipe, igt_plane_t
>   	igt_crc_t ref_crc = {}, crc = {};
>   
>   	/* Set a background color on the primary fb for testing */
> -	if (plane->type != DRM_PLANE_TYPE_PRIMARY)
> +	if (plane->type != DRM_PLANE_TYPE_PRIMARY) {
>   		igt_plane_set_fb(igt_pipe_get_plane_type(&display->pipes[pipe], DRM_PLANE_TYPE_PRIMARY), &data->gray_fb);
> +		igt_display_commit2(display, COMMIT_ATOMIC);

Why this extra commit needed? There's just below commit before crc is 
started

> +	}
>   
>   	igt_plane_set_prop_enum(plane, IGT_PLANE_PIXEL_BLEND_MODE, "Coverage");
> +	igt_plane_set_prop_value(plane, IGT_PLANE_ALPHA, 0x7e);

On this test there's already per pixel alpha, setting plane alpha values 
so low will probably in this case in final rounding make these planes 
completely invisible. I'd suspect you can get any image pass crc doing 
it like this. Likely what you see on screen with these values is just 
pure grey instead of intended test image.


>   	igt_plane_set_fb(plane, &data->argb_fb_cov_7e);
>   	igt_display_commit2(display, COMMIT_ATOMIC);
>   	igt_pipe_crc_start(data->pipe_crc);
>   	igt_pipe_crc_get_single(data->pipe_crc, &ref_crc);
>   
>   	igt_plane_set_prop_enum(plane, IGT_PLANE_PIXEL_BLEND_MODE, "Pre-multiplied");
> +	igt_plane_set_prop_value(plane, IGT_PLANE_ALPHA, 0x7e);
>   	igt_plane_set_fb(plane, &data->argb_fb_7e);
>   	igt_display_commit2(display, COMMIT_ATOMIC);
>   	igt_pipe_crc_get_current(display->drm_fd, data->pipe_crc, &crc);
>   	igt_assert_crc_equal(&ref_crc, &crc);
>   
>   	igt_plane_set_prop_enum(plane, IGT_PLANE_PIXEL_BLEND_MODE, "None");
> -	igt_plane_set_prop_value(plane, IGT_PLANE_ALPHA, 0x7e7e);
> +	igt_plane_set_prop_value(plane, IGT_PLANE_ALPHA, 0x7e);
>   	igt_plane_set_fb(plane, &data->argb_fb_cov_7e);
>   	igt_display_commit2(display, COMMIT_ATOMIC);
>   	igt_pipe_crc_get_current(display->drm_fd, data->pipe_crc, &crc);
>   	igt_assert_crc_equal(&ref_crc, &crc);
>   
>   	igt_pipe_crc_stop(data->pipe_crc);
> +

stray new line

>   }
>   
>   static void run_test_on_pipe_planes(data_t *data, enum pipe pipe, bool blend,
> 



More information about the igt-dev mailing list