summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPan Xiuli <xiuli.pan@intel.com>2015-10-29 13:46:36 +0800
committerYang Rong <rong.r.yang@intel.com>2015-11-06 14:43:06 +0800
commit2b5c3bfce7c5c0ca4d9947dc42b56693be290ef4 (patch)
treee6fedd507369adc3a81272687e9fbc2b1e42cba8
parentd85f413acae792012893978c77ad856abec657ca (diff)
utests: fix compiler_fill_image_2d_array random bug
Use safer image write instead of map and memset. When create image without data, we could not set pitch and we don't know the pitch either. So use map and memset the space is too dangerous if pitch is bigger than w*sizeof(bpp), in this case the actually pitch is 512 but memset use pitch as 64*4=256. With only half space set to 0, there will be undefined behavior when we want to check the result for those space that we haven't set to 0. Signed-off-by: Pan Xiuli <xiuli.pan@intel.com> Reviewed-by: Yang Rong <rong.r.yang@intel.com>
-rw-r--r--utests/compiler_fill_image_2d_array.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/utests/compiler_fill_image_2d_array.cpp b/utests/compiler_fill_image_2d_array.cpp
index fc093622..ab7470eb 100644
--- a/utests/compiler_fill_image_2d_array.cpp
+++ b/utests/compiler_fill_image_2d_array.cpp
@@ -11,6 +11,7 @@ static void compiler_fill_image_2d_array(void)
size_t origin[3] = { };
size_t region[3];
uint32_t* dst;
+ uint32_t* src;
memset(&desc, 0x0, sizeof(cl_image_desc));
memset(&format, 0x0, sizeof(cl_image_format));
@@ -28,9 +29,16 @@ static void compiler_fill_image_2d_array(void)
OCL_CREATE_IMAGE(buf[0], 0, &format, &desc, NULL);
- OCL_MAP_BUFFER_GTT(0);
- memset(buf_data[0], 0, sizeof(uint32_t) * w * h * array);
- OCL_UNMAP_BUFFER_GTT(0);
+ region[0] = w;
+ region[1] = h;
+ region[2] = array;
+
+ // As we don't know the pitch right now, we cannot
+ // use map to setup the image. It is safer to use
+ // write image
+ src = (uint32_t*)malloc(sizeof(uint32_t) * w * h * array);
+ memset(src, 0, sizeof(uint32_t) * w * h * array);
+ OCL_WRITE_IMAGE(buf[0], origin, region, src);
// Run the kernel
OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
@@ -43,9 +51,6 @@ static void compiler_fill_image_2d_array(void)
OCL_NDRANGE(3);
// Check result
- region[0] = w;
- region[1] = h;
- region[2] = array;
dst = (uint32_t*)malloc(w*h*array*sizeof(uint32_t));
OCL_READ_IMAGE(buf[0], origin, region, dst);
@@ -79,6 +84,7 @@ static void compiler_fill_image_2d_array(void)
}
}
free(dst);
+ free(src);
}
MAKE_UTEST_FROM_FUNCTION(compiler_fill_image_2d_array);