Hello,

I think this patch should update .gitignore, not for adding the built
binary to untracked file list.

But without it, it looks good to me, and I tested it on my Odroid U3
board.

Tested-by: Hyungwon Hwang <human.hw...@samsung.com>
Reviewed-by: Hyungwon Hwang <human.hw...@samsung.com>

Best regards,
Hyungwon Hwang


On Tue, 22 Sep 2015 17:54:59 +0200
Tobias Jakobi <tjak...@math.uni-bielefeld.de> wrote:

> To check if g2d_move() works properly we create a small checkerboard
> pattern in the center of the screen and then shift this pattern
> around with g2d_move(). The pattern should be properly preserved
> by the operation.
> 
> Signed-off-by: Tobias Jakobi <tjak...@math.uni-bielefeld.de>
> ---
>  tests/exynos/exynos_fimg2d_test.c | 132
> ++++++++++++++++++++++++++++++++++++++ 1 file changed, 132
> insertions(+)
> 
> diff --git a/tests/exynos/exynos_fimg2d_test.c
> b/tests/exynos/exynos_fimg2d_test.c index dfb00a0..797fb6e 100644
> --- a/tests/exynos/exynos_fimg2d_test.c
> +++ b/tests/exynos/exynos_fimg2d_test.c
> @@ -313,6 +313,130 @@ fail:
>       return ret;
>  }
>  
> +static int g2d_move_test(struct exynos_device *dev,
> +                             struct exynos_bo *tmp,
> +                             struct exynos_bo *buf,
> +                             enum e_g2d_buf_type type)
> +{
> +     struct g2d_context *ctx;
> +     struct g2d_image img = {0}, tmp_img = {0};
> +     unsigned int img_w, img_h, count;
> +     int cur_x, cur_y;
> +     void *checkerboard;
> +     int ret;
> +
> +     static const struct g2d_step {
> +             int x, y;
> +     } steps[] = {
> +             { 1,  0}, { 0,  1},
> +             {-1,  0}, { 0, -1},
> +             { 1,  1}, {-1, -1},
> +             { 1, -1}, {-1,  1},
> +             { 2,  1}, { 1,  2},
> +             {-2, -1}, {-1, -2},
> +             { 2, -1}, { 1, -2},
> +             {-2,  1}, {-1,  2}
> +     };
> +     static const unsigned int num_steps =
> +             sizeof(steps) / sizeof(struct g2d_step);
> +
> +     ctx = g2d_init(dev->fd);
> +     if (!ctx)
> +             return -EFAULT;
> +
> +     img.bo[0] = buf->handle;
> +
> +     /* create pattern of half the screen size */
> +     checkerboard = create_checkerboard_pattern(screen_width /
> 64, screen_height / 64, 32);
> +     if (!checkerboard) {
> +             ret = -EFAULT;
> +             goto fail;
> +     }
> +
> +     img_w = (screen_width / 64) * 32;
> +     img_h = (screen_height / 64) * 32;
> +
> +     switch (type) {
> +     case G2D_IMGBUF_GEM:
> +             memcpy(tmp->vaddr, checkerboard, img_w * img_h * 4);
> +             tmp_img.bo[0] = tmp->handle;
> +             break;
> +     case G2D_IMGBUF_USERPTR:
> +             tmp_img.user_ptr[0].userptr = (unsigned
> long)checkerboard;
> +             tmp_img.user_ptr[0].size = img_w * img_h * 4;
> +             break;
> +     case G2D_IMGBUF_COLOR:
> +     default:
> +             ret = -EFAULT;
> +             goto fail;
> +     }
> +
> +     /* solid fill framebuffer with white color */
> +     img.width = screen_width;
> +     img.height = screen_height;
> +     img.stride = screen_width * 4;
> +     img.buf_type = G2D_IMGBUF_GEM;
> +     img.color_mode = G2D_COLOR_FMT_ARGB8888 | G2D_ORDER_AXRGB;
> +     img.color = 0xffffffff;
> +
> +     /* put checkerboard pattern in the center of the framebuffer
> */
> +     cur_x = (screen_width - img_w) / 2;
> +     cur_y = (screen_height - img_h) / 2;
> +     tmp_img.width = img_w;
> +     tmp_img.height = img_h;
> +     tmp_img.stride = img_w * 4;
> +     tmp_img.buf_type = type;
> +     tmp_img.color_mode = G2D_COLOR_FMT_ARGB8888 |
> G2D_ORDER_AXRGB; +
> +     ret = g2d_solid_fill(ctx, &img, 0, 0, screen_width,
> screen_height) ||
> +             g2d_copy(ctx, &tmp_img, &img, 0, 0, cur_x, cur_y,
> img_w, img_h); +
> +     if (!ret)
> +             ret = g2d_exec(ctx);
> +     if (ret < 0)
> +                     goto fail;
> +
> +     printf("move test with %s.\n",
> +                     type == G2D_IMGBUF_GEM ? "gem" : "userptr");
> +
> +     srand(time(NULL));
> +     for (count = 0; count < 256; ++count) {
> +             const struct g2d_step *s;
> +
> +             /* select step and validate it */
> +             while (1) {
> +                     s = &steps[random() % num_steps];
> +
> +                     if (cur_x + s->x < 0 || cur_y + s->y < 0 ||
> +                             cur_x + img_w + s->x >= screen_width
> ||
> +                             cur_y + img_h + s->y >=
> screen_height)
> +                             continue;
> +                     else
> +                             break;
> +             }
> +
> +             ret = g2d_move(ctx, &img, cur_x, cur_y, cur_x +
> s->x, cur_y + s->y,
> +                     img_w, img_h);
> +             if (!ret)
> +                     ret = g2d_exec(ctx);
> +
> +             if (ret < 0)
> +                     goto fail;
> +
> +             cur_x += s->x;
> +             cur_y += s->y;
> +
> +             usleep(100000);
> +     }
> +
> +fail:
> +     g2d_fini(ctx);
> +
> +     free(checkerboard);
> +
> +     return ret;
> +}
> +
>  static int g2d_copy_with_scale_test(struct exynos_device *dev,
>                                       struct exynos_bo *src,
>                                       struct exynos_bo *dst,
> @@ -708,6 +832,14 @@ int main(int argc, char **argv)
>  
>       wait_for_user_input(0);
>  
> +     ret = g2d_move_test(dev, src, bo, G2D_IMGBUF_GEM);
> +     if (ret < 0) {
> +             fprintf(stderr, "failed to test move operation.\n");
> +             goto err_free_src;
> +     }
> +
> +     wait_for_user_input(0);
> +
>       ret = g2d_copy_with_scale_test(dev, src, bo, G2D_IMGBUF_GEM);
>       if (ret < 0) {
>               fprintf(stderr, "failed to test copy and scale
> operation.\n");

--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to