Ping for review. -----Original Message----- From: Pan, Xiuli Sent: Thursday, October 29, 2015 1:47 PM To: beignet@lists.freedesktop.org Cc: Pan, Xiuli <xiuli....@intel.com> Subject: [PATCH] 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....@intel.com> --- utests/compiler_fill_image_2d_array.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/utests/compiler_fill_image_2d_array.cpp b/utests/compiler_fill_image_2d_array.cpp index fc09362..ab7470e 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); -- 2.1.4 _______________________________________________ Beignet mailing list Beignet@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/beignet