diff options
author | Dag Lem <dag@nimrod.no> | 2013-05-25 10:14:17 +0200 |
---|---|---|
committer | Zhigang Gong <zhigang.gong@linux.intel.com> | 2013-05-30 11:55:20 +0800 |
commit | 5291e1bcbe0786bafec5373072d782ac38e3a494 (patch) | |
tree | cb25d8fb1664de48b39fd9cc7fb9b67ac06b492b /utests | |
parent | c867de509c45538646b3fffbbbdc8a5d85f204d0 (diff) | |
download | beignet-5291e1bcbe0786bafec5373072d782ac38e3a494.tar.gz |
utests: Add test case for box blur on image buffer
This test demonstrates box blur on an image buffer, using an extremely
simple kernel.
Signed-off-by: Dag Lem <dag@nimrod.no>
Reviewed-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Diffstat (limited to 'utests')
-rw-r--r-- | utests/CMakeLists.txt | 1 | ||||
-rw-r--r-- | utests/compiler_box_blur_image.cpp | 52 | ||||
-rw-r--r-- | utests/utest_helper.hpp | 6 |
3 files changed, 59 insertions, 0 deletions
diff --git a/utests/CMakeLists.txt b/utests/CMakeLists.txt index 268cc51a..cde86129 100644 --- a/utests/CMakeLists.txt +++ b/utests/CMakeLists.txt @@ -9,6 +9,7 @@ set (utests_sources compiler_mandelbrot.cpp compiler_mandelbrot_alternate.cpp compiler_box_blur_float.cpp + compiler_box_blur_image.cpp compiler_box_blur.cpp compiler_insert_to_constant.cpp compiler_argument_structure.cpp diff --git a/utests/compiler_box_blur_image.cpp b/utests/compiler_box_blur_image.cpp new file mode 100644 index 00000000..d94a97c9 --- /dev/null +++ b/utests/compiler_box_blur_image.cpp @@ -0,0 +1,52 @@ +#include "utest_helper.hpp" + +static void compiler_box_blur_image() +{ + int w, h; + cl_image_format format = { }; + cl_image_desc desc = { }; + size_t origin[3] = { }; + size_t region[3]; + int *src, *dst; + + OCL_CREATE_KERNEL("compiler_box_blur_image"); + + /* Load the picture */ + src = cl_read_bmp("lenna128x128.bmp", &w, &h); + + format.image_channel_order = CL_RGBA; + format.image_channel_data_type = CL_UNORM_INT8; + desc.image_type = CL_MEM_OBJECT_IMAGE2D; + desc.image_width = w; + desc.image_height = h; + desc.image_depth = 1; + desc.image_row_pitch = w*sizeof(uint32_t); + + /* Run the kernel */ + OCL_CREATE_IMAGE(buf[0], CL_MEM_COPY_HOST_PTR, &format, &desc, src); + free(src); + desc.image_row_pitch = 0; + OCL_CREATE_IMAGE(buf[1], 0, &format, &desc, NULL); + OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]); + OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]); + globals[0] = w; + globals[1] = h; + locals[0] = 16; + locals[1] = 16; + OCL_NDRANGE(2); + dst = (int*)malloc(w*h*sizeof(uint32_t)); + region[0] = w; + region[1] = h; + region[2] = 1; + OCL_READ_IMAGE(buf[1], origin, region, dst); + + /* Save the image (for debug purpose) */ + cl_write_bmp(dst, w, h, "compiler_box_blur_image.bmp"); + + /* Compare with the golden image */ + OCL_CHECK_IMAGE(dst, w, h, "compiler_box_blur_ref.bmp"); + + free(dst); +} + +MAKE_UTEST_FROM_FUNCTION(compiler_box_blur_image); diff --git a/utests/utest_helper.hpp b/utests/utest_helper.hpp index d882fc7b..c28615e5 100644 --- a/utests/utest_helper.hpp +++ b/utests/utest_helper.hpp @@ -88,6 +88,12 @@ extern EGLSurface eglSurface; #define OCL_CREATE_IMAGE(IMAGE, FLAGS, FORMAT, DESC, DATA) \ OCL_CALL2(clCreateImage, IMAGE, ctx, FLAGS, FORMAT, DESC, DATA) +#define OCL_READ_IMAGE(IMAGE, ORIGIN, REGION, DATA) \ + OCL_CALL(clEnqueueReadImage, queue, IMAGE, CL_TRUE, ORIGIN, REGION, 0, 0, DATA, 0, NULL, NULL) + +#define OCL_WRITE_IMAGE(IMAGE, ORIGIN, REGION, DATA) \ + OCL_CALL(clEnqueueWriteImage, queue, IMAGE, CL_TRUE, ORIGIN, REGION, 0, 0, DATA, 0, NULL, NULL) + #define OCL_CREATE_GL_IMAGE(IMAGE, FLAGS, TARGET, LEVEL, TEXTURE) \ OCL_CALL2(clCreateFromGLTexture, IMAGE, ctx, FLAGS, TARGET, LEVEL, TEXTURE) |