fix for ocl_morphSmall
authorElena Gvozdeva <elena.gvozdeva@itseez.com>
Thu, 21 Aug 2014 12:07:04 +0000 (16:07 +0400)
committerElena Gvozdeva <elena.gvozdeva@itseez.com>
Thu, 21 Aug 2014 12:31:24 +0000 (16:31 +0400)
modules/imgproc/src/morph.cpp
modules/imgproc/src/opencl/filterSmall.cl

index 347e80b..ea52ca7 100644 (file)
@@ -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;
index 8cec365..967c28c 100755 (executable)
@@ -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)