[igt-dev] [PATCH i-g-t] tests/kms_plane_alpha_blend: Paint FBs with cairo source operator

Ville Syrjälä ville.syrjala at linux.intel.com
Fri Feb 22 17:39:52 UTC 2019


On Fri, Feb 22, 2019 at 12:08:46PM -0500, Nicholas Kazlauskas wrote:
> Cairo defaults to using a blended fill, so when IGT tries to paint on
> top of a framebuffer in these tests with an alpha less than 1.0 the
> previous framebuffer contents will still be present underneath.
> 
> On amdgpu this is an issue because the framebuffer is created in
> an unitialized state and can have contents from previous tests
> still within memory.

igt_fb more or less assumes all fbs start out black. Sounds like you
need a memset() or equivalent somewhere.

> 
> This patch explicitly sets the cairo filling operator to SOURCE to
> overwrite the contents when performing fills with alpha < 1.0 in
> this test.
> 
> It also fixes the creation of the transparent FB. My guess as for why
> this test previously passed on i915 is because the primary FB was
> also black, so the CRC would match even if the black overlay plane
> was partially transparent.
> 
> Cc: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
> Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas at amd.com>
> ---
>  tests/kms_plane_alpha_blend.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/tests/kms_plane_alpha_blend.c b/tests/kms_plane_alpha_blend.c
> index 1d9d8933..d7dc44ab 100644
> --- a/tests/kms_plane_alpha_blend.c
> +++ b/tests/kms_plane_alpha_blend.c
> @@ -83,6 +83,7 @@ static void draw_squares(struct igt_fb *fb, int w, int h, double a)
>  {
>  	cairo_t *cr = igt_get_cairo_ctx(fb->fd, fb);
>  
> +	cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
>  	igt_paint_color_alpha(cr, 0, 0,         w / 2, h / 2, 1., 0., 0., a);
>  	igt_paint_color_alpha(cr, w / 2, 0,     w / 2, h / 2, 0., 1., 0., a);
>  	igt_paint_color_alpha(cr, 0, h / 2,     w / 2, h / 2, 0., 0., 1., a);
> @@ -197,7 +198,8 @@ static void prepare_crtc(data_t *data, igt_output_t *output, enum pipe pipe)
>  			      &data->argb_fb_0);
>  
>  		cr = igt_get_cairo_ctx(data->gfx_fd, &data->argb_fb_0);
> -		igt_paint_color_alpha(cr, 0, 0, w, h, 0., 0., 0., 1.0);
> +		cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
> +		igt_paint_color_alpha(cr, 0, 0, w, h, 0., 0., 0., 0.0);
>  		igt_put_cairo_ctx(data->gfx_fd, &data->argb_fb_0, cr);
>  
>  		igt_create_fb(data->gfx_fd, w, h,
> -- 
> 2.17.1
> 
> _______________________________________________
> igt-dev mailing list
> igt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/igt-dev

-- 
Ville Syrjälä
Intel


More information about the igt-dev mailing list