summaryrefslogtreecommitdiff
path: root/utests/compiler_box_blur_float.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'utests/compiler_box_blur_float.cpp')
-rw-r--r--utests/compiler_box_blur_float.cpp65
1 files changed, 65 insertions, 0 deletions
diff --git a/utests/compiler_box_blur_float.cpp b/utests/compiler_box_blur_float.cpp
new file mode 100644
index 00000000..a3c97bc4
--- /dev/null
+++ b/utests/compiler_box_blur_float.cpp
@@ -0,0 +1,65 @@
+#include "utest_helper.hpp"
+#include <cmath>
+
+static int *tmp = NULL;
+static struct float4 {float x,y,z,w;} *src = NULL, *dst = NULL;
+static int w = 0;
+static int h = 0;
+static int sz = 0;
+static const size_t chunk = 64;
+
+static void compiler_box_blur_float()
+{
+ OCL_CREATE_KERNEL("compiler_box_blur_float");
+
+ /* Load the picture */
+ tmp = cl_read_bmp("lenna128x128.bmp", &w, &h);
+ sz = w * h * sizeof(float[4]);
+ src = (float4*)malloc(sz);
+
+ /* RGBA -> float4 conversion */
+ const int n = w*h;
+ for (int i = 0; i < n; ++i) {
+ src[i].x = (float) (tmp[i] & 0xff);
+ src[i].y = (float) ((tmp[i] >> 8) & 0xff);
+ src[i].z = (float) ((tmp[i] >> 16) & 0xff);
+ src[i].w = 0.f;
+ }
+ free(tmp);
+
+ /* 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);
+ OCL_SET_ARG(4, sizeof(int), &chunk);
+ globals[0] = size_t(w);
+ globals[1] = h/chunk + ((h%chunk)?1:0);
+ locals[0] = 16;
+ locals[1] = 1;
+ free(src);
+ OCL_NDRANGE(2);
+ OCL_MAP_BUFFER(1);
+ dst = (float4*) buf_data[1];
+
+ /* Convert back to RGBA and save */
+ int *tmp = (int*) malloc(n*sizeof(int));
+ for (int i = 0; i < n; ++i) {
+ int to = int(std::min(dst[i].x, 255.f));
+ to |= int(std::min(dst[i].y, 255.f)) << 8;
+ to |= int(std::min(dst[i].z, 255.f)) << 16;
+ tmp[i] = to;
+ }
+
+ /* Save the image (for debug purpose) */
+ cl_write_bmp(tmp, w, h, "compiler_box_blur_float.bmp");
+
+ /* Compare with the golden image */
+ OCL_CHECK_IMAGE(tmp, w, h, "compiler_box_blur_float_ref.bmp");
+ free(tmp);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_box_blur_float);
+