[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