diff --git a/modules/core/src/matrix.cpp b/modules/core/src/matrix.cpp index 46c8eeac86..7eff30660c 100644 --- a/modules/core/src/matrix.cpp +++ b/modules/core/src/matrix.cpp @@ -2758,15 +2758,18 @@ namespace cv { static bool ocl_setIdentity( InputOutputArray _m, const Scalar& s ) { - int type = _m.type(), depth = CV_MAT_DEPTH(type), cn = CV_MAT_CN(type), kercn = cn; - if (cn == 1) + int type = _m.type(), depth = CV_MAT_DEPTH(type), cn = CV_MAT_CN(type), kercn = cn, rowsPerWI = 1; + int sctype = CV_MAKE_TYPE(depth, cn == 3 ? 4 : cn); + if (ocl::Device::getDefault().isIntel()) { - kercn = std::min(ocl::predictOptimalVectorWidth(_m), 4); - if (kercn != 4) - kercn = 1; + rowsPerWI = 4; + if (cn == 1) + { + kercn = std::min(ocl::predictOptimalVectorWidth(_m), 4); + if (kercn != 4) + kercn = 1; + } } - int sctype = CV_MAKE_TYPE(depth, cn == 3 ? 4 : cn), - rowsPerWI = ocl::Device::getDefault().isIntel() ? 4 : 1; ocl::Kernel k("setIdentity", ocl::core::set_identity_oclsrc, format("-D T=%s -D T1=%s -D cn=%d -D ST=%s -D kercn=%d -D rowsPerWI=%d",