[igt-dev] [PATCH i-g-t 1/2] tests/i915/kms_big_fb: optimize async flip tests

Govindapillai, Vinod vinod.govindapillai at intel.com
Fri Oct 14 08:36:14 UTC 2022


On Mon, 2022-10-10 at 12:35 +0300, Juha-Pekka Heikkila wrote:
> on async flip tests there's need to create large solid color
> framebuffer. Here is optimized creating this framebuffer
> with help of rendercopy.
> 
> Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila at gmail.com>
> ---
>  tests/i915/kms_big_fb.c | 85 +++++++++++++++++++++++------------------
>  1 file changed, 47 insertions(+), 38 deletions(-)

Reviewed-by: Vinod Govindapillai <vinod.govindapillai at intel.com>

> 
> diff --git a/tests/i915/kms_big_fb.c b/tests/i915/kms_big_fb.c
> index e91bea4f3..eb40e9cdf 100644
> --- a/tests/i915/kms_big_fb.c
> +++ b/tests/i915/kms_big_fb.c
> @@ -88,44 +88,6 @@ static void fini_buf(struct intel_buf *buf)
>         intel_buf_destroy(buf);
>  }
>  
> -static void setup_fb(data_t *data, struct igt_fb *newfb, uint32_t width,
> -                    uint32_t height, uint64_t format, uint64_t modifier, uint64_t stride)
> -{
> -       struct drm_mode_fb_cmd2 f = {0};
> -       cairo_t *cr;
> -
> -       newfb->strides[0] = stride;
> -       igt_create_bo_for_fb(data->drm_fd, width, height, format, modifier,
> -                            newfb);
> -
> -       igt_assert(newfb->gem_handle > 0);
> -
> -       f.width = newfb->width;
> -       f.height = newfb->height;
> -       f.pixel_format = newfb->drm_format;
> -       f.flags = DRM_MODE_FB_MODIFIERS;
> -
> -       for (int n = 0; n < newfb->num_planes; n++) {
> -               f.handles[n] = newfb->gem_handle;
> -               f.modifier[n] = newfb->modifier;
> -               f.pitches[n] = newfb->strides[n];
> -               f.offsets[n] = newfb->offsets[n];
> -       }
> -
> -       if (data->planeclearrgb[0] != 0.0 || data->planeclearrgb[1] != 0.0 ||
> -           data->planeclearrgb[2] != 0.0) {
> -               cr = igt_get_cairo_ctx(data->drm_fd, newfb);
> -               igt_paint_color(cr, 0, 0, newfb->width, newfb->height,
> -                               data->planeclearrgb[0],
> -                               data->planeclearrgb[1],
> -                               data->planeclearrgb[2]);
> -               igt_put_cairo_ctx(cr);
> -       }
> -
> -       igt_assert(drmIoctl(data->drm_fd, DRM_IOCTL_MODE_ADDFB2, &f) == 0);
> -       newfb->fb_id = f.fb_id;
> -}
> -
>  static void copy_pattern(data_t *data,
>                          struct igt_fb *dst_fb, int dx, int dy,
>                          struct igt_fb *src_fb, int sx, int sy,
> @@ -167,6 +129,53 @@ static void copy_pattern(data_t *data,
>         intel_bb_reset(data->ibb, true);
>  }
>  
> +static void setup_fb(data_t *data, struct igt_fb *newfb, uint32_t width,
> +                    uint32_t height, uint64_t format, uint64_t modifier, uint64_t stride)
> +{
> +       struct drm_mode_fb_cmd2 f = {0};
> +       struct igt_fb col_fb;
> +
> +       newfb->strides[0] = stride;
> +       igt_create_bo_for_fb(data->drm_fd, width, height, format, modifier,
> +                            newfb);
> +
> +       igt_assert(newfb->gem_handle > 0);
> +
> +       f.width = newfb->width;
> +       f.height = newfb->height;
> +       f.pixel_format = newfb->drm_format;
> +       f.flags = DRM_MODE_FB_MODIFIERS;
> +
> +       for (int n = 0; n < newfb->num_planes; n++) {
> +               f.handles[n] = newfb->gem_handle;
> +               f.modifier[n] = newfb->modifier;
> +               f.pitches[n] = newfb->strides[n];
> +               f.offsets[n] = newfb->offsets[n];
> +       }
> +
> +       if (data->planeclearrgb[0] != 0.0 || data->planeclearrgb[1] != 0.0 ||
> +           data->planeclearrgb[2] != 0.0) {
> +               igt_create_color_fb(data->drm_fd, 512, 512,
> +                                   newfb->drm_format, newfb->modifier,
> +                                   data->planeclearrgb[0],
> +                                   data->planeclearrgb[1],
> +                                   data->planeclearrgb[2],
> +                                   &col_fb);
> +
> +               for (int y = 0; y < newfb->height; y += 512) {
> +                       for (int x = 0; x < newfb->width; x += 512) {
> +                               copy_pattern(data, newfb, x, y,
> +                                       &col_fb, 0, 0,
> +                                       512, 512);
> +                       }
> +               }
> +               igt_remove_fb(data->drm_fd, &col_fb);
> +       }
> +
> +       igt_assert(drmIoctl(data->drm_fd, DRM_IOCTL_MODE_ADDFB2, &f) == 0);
> +       newfb->fb_id = f.fb_id;
> +}
> +
>  static void generate_pattern(data_t *data,
>                              struct igt_fb *fb,
>                              int w, int h)



More information about the igt-dev mailing list