As I'm developing this effect, I think it's good to add a new effect to utests. It could be a good example for starting developing more advanced effects.
Signed-off-by: Lu Guanqun <[email protected]> --- kernels/compiler_mirror_effect.cl | 13 ++++++++++ kernels/compiler_mirror_effect_ref.bmp | Bin utests/CMakeLists.txt | 1 + utests/compiler_mirror_effect.cpp | 43 ++++++++++++++++++++++++++++++++ 4 files changed, 57 insertions(+) create mode 100644 kernels/compiler_mirror_effect.cl create mode 100644 kernels/compiler_mirror_effect_ref.bmp create mode 100644 utests/compiler_mirror_effect.cpp diff --git a/kernels/compiler_mirror_effect.cl b/kernels/compiler_mirror_effect.cl new file mode 100644 index 0000000..d923348 --- /dev/null +++ b/kernels/compiler_mirror_effect.cl @@ -0,0 +1,13 @@ +__kernel void compiler_mirror_effect(__global const uint *src, + __global uint *dst, + int w, + int h) +{ + int x = get_global_id(0); + int y = get_global_id(1); + + int new_dst_index = y * w + (w-1-x); + int old_src_index = y * w + x; + + dst[new_dst_index] = src[old_src_index]; +} diff --git a/kernels/compiler_mirror_effect_ref.bmp b/kernels/compiler_mirror_effect_ref.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f5626ea4112eb9058150868f6cac7346510953f5 GIT binary patch literal 49206 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 b`o}*hEXUuYSNI-(Y;%yO9FM?o&_n(gOy$qV literal 0 HcmV?d00001 diff --git a/utests/CMakeLists.txt b/utests/CMakeLists.txt index c6399ea..d2f384a 100644 --- a/utests/CMakeLists.txt +++ b/utests/CMakeLists.txt @@ -56,6 +56,7 @@ set (utests_sources compiler_lower_return1.cpp compiler_lower_return2.cpp compiler_mad_hi.cpp + compiler_mirror_effect.cpp compiler_mul_hi.cpp compiler_mad24.cpp compiler_mul24.cpp diff --git a/utests/compiler_mirror_effect.cpp b/utests/compiler_mirror_effect.cpp new file mode 100644 index 0000000..635e416 --- /dev/null +++ b/utests/compiler_mirror_effect.cpp @@ -0,0 +1,43 @@ +#include "utest_helper.hpp" +#include <cmath> + +static int w = 0; +static int h = 0; +static int sz = 0; +static int *src = NULL, *dst = NULL; + +static void compiler_mirror_effect() +{ + OCL_CREATE_KERNEL("compiler_mirror_effect"); + + /* Load the picture */ + src = cl_read_bmp("lenna128x128.bmp", &w, &h); + sz = w * h * sizeof(int); + + /* Run the kernel */ + OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, sz, src); + OCL_CREATE_BUFFER(buf[1], 0, sz, NULL); + OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]); + OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]); + OCL_SET_ARG(2, sizeof(int), &w); + OCL_SET_ARG(3, sizeof(int), &h); + globals[0] = w; + globals[1] = h; + locals[0] = 16; + locals[1] = 1; + free(src); + OCL_NDRANGE(2); + OCL_MAP_BUFFER(1); + dst = (int*) buf_data[1]; + + /* Save the image (for debug purpose) */ + cl_write_bmp(dst, w, h, "compiler_mirror_effect.bmp"); + + /* Compare with the golden image */ + OCL_CHECK_IMAGE(dst, w, h, "compiler_mirror_effect_ref.bmp"); + + OCL_UNMAP_BUFFER(1); +} + +MAKE_UTEST_FROM_FUNCTION(compiler_mirror_effect); + _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
