Message ID | 1442937302-8211-11-git-send-email-tjakobi@math.uni-bielefeld.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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.hwang@samsung.com> Reviewed-by: Hyungwon Hwang <human.hwang@samsung.com> Best regards, Hyungwon Hwang On Tue, 22 Sep 2015 17:54:59 +0200 Tobias Jakobi <tjakobi@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 <tjakobi@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 majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hello Hyungwon, Hyungwon Hwang wrote: > Hello, > > I think this patch should update .gitignore, not for adding the built > binary to untracked file list. good point. I should do this for the event test as well I guess. Going to respin the series. With best wishes, Tobias > But without it, it looks good to me, and I tested it on my Odroid U3 > board. > > Tested-by: Hyungwon Hwang <human.hwang@samsung.com> > Reviewed-by: Hyungwon Hwang <human.hwang@samsung.com> > > Best regards, > Hyungwon Hwang > > > On Tue, 22 Sep 2015 17:54:59 +0200 > Tobias Jakobi <tjakobi@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 <tjakobi@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 majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 9 November 2015 at 09:47, Tobias Jakobi <tjakobi@math.uni-bielefeld.de> wrote: > Hello Hyungwon, > > Hyungwon Hwang wrote: >> Hello, >> >> I think this patch should update .gitignore, not for adding the built >> binary to untracked file list. > good point. I should do this for the event test as well I guess. > > Going to respin the series. > Imho you can do that as a single patch on top. There is no problem if git status prints out a binary name for a couple of commits. Regards, Emil -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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 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 <tjakobi@math.uni-bielefeld.de> --- tests/exynos/exynos_fimg2d_test.c | 132 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+)