From 6d2528f398cafcef3dd83c6ca6e64b23cf50e40d Mon Sep 17 00:00:00 2001 From: robquill Date: Tue, 18 Jun 2019 10:28:08 +0100 Subject: [PATCH] CL12: Use slice pitch instead of row pitch for 1D arrays. (#315) * Use slice pitch instead of row pitch for 1D arrays. Fixes fill_image 1Darray * Use slice pitch instead of row pitch for 1D arrays. Fixes copy_image 1Darray --- .../images/clCopyImage/test_copy_generic.cpp | 19 ++++++++++++++++++- .../images/clFillImage/test_fill_generic.cpp | 19 ++++++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/test_conformance/images/clCopyImage/test_copy_generic.cpp b/test_conformance/images/clCopyImage/test_copy_generic.cpp index 41680497..4612b0d7 100644 --- a/test_conformance/images/clCopyImage/test_copy_generic.cpp +++ b/test_conformance/images/clCopyImage/test_copy_generic.cpp @@ -195,12 +195,26 @@ cl_mem create_image( cl_context context, BufferOwningPtr& data, image_desc } else { // Else copy one scan line at a time. + size_t dstPitch2D = 0; + switch (imageInfo->type) + { + case CL_MEM_OBJECT_IMAGE3D: + case CL_MEM_OBJECT_IMAGE2D_ARRAY: + case CL_MEM_OBJECT_IMAGE2D: + dstPitch2D = mappedRow; + break; + case CL_MEM_OBJECT_IMAGE1D_ARRAY: + case CL_MEM_OBJECT_IMAGE1D: + dstPitch2D = mappedSlice; + break; + } + for ( size_t z = 0; z < depth; z++ ) { for ( size_t y = 0; y < height; y++ ) { memcpy( dst, src, scanlineSize ); - dst += mappedRow; + dst += dstPitch2D; src += scanlineSize; } @@ -478,6 +492,9 @@ int test_copy_image_generic( cl_device_id device, image_descriptor *srcImageInfo return -1; } sourcePtr += dstImageInfo->rowPitch; + if((dstImageInfo->type == CL_MEM_OBJECT_IMAGE1D_ARRAY || dstImageInfo->type == CL_MEM_OBJECT_IMAGE1D)) + destPtr += mappedSlice; + else destPtr += mappedRow; } sourcePtr += dstImageInfo->slicePitch - dstImageInfo->rowPitch * dstImageInfo->height; diff --git a/test_conformance/images/clFillImage/test_fill_generic.cpp b/test_conformance/images/clFillImage/test_fill_generic.cpp index 62a206dc..8c8163c0 100644 --- a/test_conformance/images/clFillImage/test_fill_generic.cpp +++ b/test_conformance/images/clFillImage/test_fill_generic.cpp @@ -190,12 +190,26 @@ cl_mem create_image( cl_context context, BufferOwningPtr& data, image_desc } else { // Else copy one scan line at a time. + size_t dstPitch2D = 0; + switch (imageInfo->type) + { + case CL_MEM_OBJECT_IMAGE3D: + case CL_MEM_OBJECT_IMAGE2D_ARRAY: + case CL_MEM_OBJECT_IMAGE2D: + dstPitch2D = mappedRow; + break; + case CL_MEM_OBJECT_IMAGE1D_ARRAY: + case CL_MEM_OBJECT_IMAGE1D: + dstPitch2D = mappedSlice; + break; + } + for ( size_t z = 0; z < depth; z++ ) { for ( size_t y = 0; y < height; y++ ) { memcpy( dst, src, scanlineSize ); - dst += mappedRow; + dst += dstPitch2D; src += scanlineSize; } @@ -503,6 +517,9 @@ int test_fill_image_generic( cl_device_id device, image_descriptor *imageInfo, return -1; } sourcePtr += imageInfo->rowPitch; + if((imageInfo->type == CL_MEM_OBJECT_IMAGE1D_ARRAY || imageInfo->type == CL_MEM_OBJECT_IMAGE1D)) + destPtr += mappedSlice; + else destPtr += mappedRow; } sourcePtr += imageInfo->slicePitch - ( imageInfo->rowPitch * (imageInfo->height > 0 ? imageInfo->height : 1) );