From 5302e560712372d2e7c2be081db2500766a5a1cf Mon Sep 17 00:00:00 2001 From: Elena Gvozdeva Date: Thu, 21 Aug 2014 16:07:04 +0400 Subject: [PATCH 1/2] fix for ocl_morphSmall --- modules/imgproc/src/morph.cpp | 9 +++++++-- modules/imgproc/src/opencl/filterSmall.cl | 12 ------------ 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/modules/imgproc/src/morph.cpp b/modules/imgproc/src/morph.cpp index 347e80bfe6..ea52ca7bbd 100644 --- a/modules/imgproc/src/morph.cpp +++ b/modules/imgproc/src/morph.cpp @@ -1434,7 +1434,7 @@ static bool ocl_morphSmall( InputArray _src, OutputArray _dst, InputArray _kerne "-D PX_PER_WI_X=%d -D PX_PER_WI_Y=%d -D PRIV_DATA_WIDTH=%d -D %s -D %s " "-D PX_LOAD_X_ITERATIONS=%d -D PX_LOAD_Y_ITERATIONS=%d " "-D srcT=%s -D srcT1=%s -D dstT=srcT -D dstT1=srcT1 -D WT=%s -D WT1=%s " - "-D convertToWT=%s -D convertToDstT=%s -D PROCESS_ELEM_=%s -D %s%s", + "-D convertToWT=%s -D convertToDstT=%s -D PX_LOAD_FLOAT_VEC_CONV=convert_%s -D PROCESS_ELEM_=%s -D %s%s", cn, anchor.x, anchor.y, ksize.width, ksize.height, pxLoadVecSize, pxLoadNumPixels, depth, pxPerWorkItemX, pxPerWorkItemY, privDataWidth, borderMap[borderType], @@ -1445,6 +1445,7 @@ static bool ocl_morphSmall( InputArray _src, OutputArray _dst, InputArray _kerne haveExtraMat ? ocl::typeToStr(wdepth):"srcT1",//to prevent overflow - WT1 haveExtraMat ? ocl::convertTypeStr(depth, wdepth, cn, cvt[0]) : "noconvert",//to prevent overflow - src to WT haveExtraMat ? ocl::convertTypeStr(wdepth, depth, cn, cvt[1]) : "noconvert",//to prevent overflow - WT to dst + ocl::typeToStr(CV_MAKE_TYPE(haveExtraMat ? wdepth : depth, pxLoadVecSize)), //PX_LOAD_FLOAT_VEC_CONV processing.c_str(), op2str[op], actual_op == op ? "" : cv::format(" -D %s", op2str[actual_op]).c_str()); @@ -1531,7 +1532,11 @@ static bool ocl_morphOp(InputArray _src, OutputArray _dst, InputArray _kernel, if (dev.isIntel() && !(dev.type() & ocl::Device::TYPE_CPU) && ((ksize.width < 5 && ksize.height < 5 && esz <= 4) || (ksize.width == 5 && ksize.height == 5 && cn == 1)) && - (iterations == 1) && cn == 1) + (iterations == 1) +#if defined __APPLE__ + && cn == 1 +#endif + ) { if (ocl_morphSmall(_src, _dst, kernel, anchor, borderType, op, actual_op, _extraMat)) return true; diff --git a/modules/imgproc/src/opencl/filterSmall.cl b/modules/imgproc/src/opencl/filterSmall.cl index 8cec36557b..967c28cdc6 100755 --- a/modules/imgproc/src/opencl/filterSmall.cl +++ b/modules/imgproc/src/opencl/filterSmall.cl @@ -164,18 +164,6 @@ inline bool isBorder(const struct RectCoords bounds, int2 coord, int numPixels) #define vload1(OFFSET, PTR) (*(PTR + OFFSET)) #define PX_LOAD_VEC_TYPE CAT(srcT1, PX_LOAD_VEC_SIZE) #define PX_LOAD_FLOAT_VEC_TYPE CAT(WT1, PX_LOAD_VEC_SIZE) - -#if PX_LOAD_VEC_SIZE == 1 -#define PX_LOAD_FLOAT_VEC_CONV (float) -#elif PX_LOAD_VEC_SIZE == 2 -#define PX_LOAD_FLOAT_VEC_CONV convert_float2 -#elif PX_LOAD_VEC_SIZE == 3 -#define PX_LOAD_FLOAT_VEC_CONV convert_float3 -#elif PX_LOAD_VEC_SIZE == 4 -#define PX_LOAD_FLOAT_VEC_CONV convert_float4 -#endif - -//#define PX_LOAD_FLOAT_VEC_CONV CAT(convert_, PX_LOAD_FLOAT_VEC_TYPE) #define PX_LOAD CAT(vload, PX_LOAD_VEC_SIZE) From 7ad6b47bc9d54f893beabbef6bcd5a2af8bb3f95 Mon Sep 17 00:00:00 2001 From: Elena Gvozdeva Date: Fri, 22 Aug 2014 10:31:13 +0400 Subject: [PATCH 2/2] fixed ocl_boxFilter --- modules/imgproc/src/smooth.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/imgproc/src/smooth.cpp b/modules/imgproc/src/smooth.cpp index 9d00bd2312..a53d8fe5dd 100644 --- a/modules/imgproc/src/smooth.cpp +++ b/modules/imgproc/src/smooth.cpp @@ -720,7 +720,7 @@ static bool ocl_boxFilter( InputArray _src, OutputArray _dst, int ddepth, "-D PX_PER_WI_X=%d -D PX_PER_WI_Y=%d -D PRIV_DATA_WIDTH=%d -D %s -D %s " "-D PX_LOAD_X_ITERATIONS=%d -D PX_LOAD_Y_ITERATIONS=%d " "-D srcT=%s -D srcT1=%s -D dstT=%s -D dstT1=%s -D WT=%s -D WT1=%s " - "-D convertToWT=%s -D convertToDstT=%s%s%s -D OP_BOX_FILTER", + "-D convertToWT=%s -D convertToDstT=%s%s%s -D PX_LOAD_FLOAT_VEC_CONV=convert_%s -D OP_BOX_FILTER", cn, anchor.x, anchor.y, ksize.width, ksize.height, pxLoadVecSize, pxLoadNumPixels, pxPerWorkItemX, pxPerWorkItemY, privDataWidth, borderMap[borderType], @@ -730,8 +730,9 @@ static bool ocl_boxFilter( InputArray _src, OutputArray _dst, int ddepth, ocl::typeToStr(ddepth), ocl::typeToStr(wtype), ocl::typeToStr(wdepth), ocl::convertTypeStr(sdepth, wdepth, cn, cvt[0]), ocl::convertTypeStr(wdepth, ddepth, cn, cvt[1]), - normalize ? " -D NORMALIZE" : "", sqr ? " -D SQR" : ""); - + normalize ? " -D NORMALIZE" : "", sqr ? " -D SQR" : "", + ocl::typeToStr(CV_MAKE_TYPE(wdepth, pxLoadVecSize)) //PX_LOAD_FLOAT_VEC_CONV + ); if (!kernel.create("filterSmall", cv::ocl::imgproc::filterSmall_oclsrc, build_options))