[Beignet] [PATCH] utests: fix compiler_fill_image_2d_array random bug
Yang, Rong R
rong.r.yang at intel.com
Thu Nov 5 22:59:23 PST 2015
LGTM, thanks, pushed.
> -----Original Message-----
> From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of
> Pan Xiuli
> Sent: Thursday, October 29, 2015 13:47
> To: beignet at lists.freedesktop.org
> Cc: Pan, Xiuli
> Subject: [Beignet] [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.pan at 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 at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet
More information about the Beignet
mailing list