From 017d8461ae509b2d8ef5f585de8ad908081d28a0 Mon Sep 17 00:00:00 2001 From: Nicholas Kazlauskas Date: Fri, 22 Feb 2019 12:08:46 -0500 Subject: tests/kms_plane_alpha_blend: Paint FBs with cairo source operator MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. 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 Signed-off-by: Nicholas Kazlauskas Reviewed-by: Ville Syrjälä --- tests/kms_plane_alpha_blend.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'tests/kms_plane_alpha_blend.c') 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, -- cgit v1.2.3