From 2b5c3bfce7c5c0ca4d9947dc42b56693be290ef4 Mon Sep 17 00:00:00 2001 From: Pan Xiuli Date: Thu, 29 Oct 2015 13:46:36 +0800 Subject: 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 Reviewed-by: Yang Rong --- utests/compiler_fill_image_2d_array.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'utests') 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); -- cgit v1.2.3