summaryrefslogtreecommitdiff
path: root/tests/kms_plane_alpha_blend.c
diff options
context:
space:
mode:
authorNicholas Kazlauskas <nicholas.kazlauskas@amd.com>2019-02-22 12:08:46 -0500
committerHarry Wentland <harry.wentland@amd.com>2019-02-27 14:45:29 -0500
commit017d8461ae509b2d8ef5f585de8ad908081d28a0 (patch)
treef23cb54ca06f9afecf605d6160f36522aec0cd7f /tests/kms_plane_alpha_blend.c
parentb79007f9c575a538a63ce9301a890ed9e1a45f35 (diff)
tests/kms_plane_alpha_blend: Paint FBs with cairo source operator
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 <maarten.lankhorst@linux.intel.com> Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Diffstat (limited to 'tests/kms_plane_alpha_blend.c')
-rw-r--r--tests/kms_plane_alpha_blend.c4
1 files changed, 3 insertions, 1 deletions
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,