CV_EXPORTS MatAllocator* getOpenCLAllocator();
+CV_EXPORTS_W bool isPerformanceCheckBypassed();
+#define OCL_PERFORMANCE_CHECK(condition) (cv::ocl::isPerformanceCheckBypassed() || (condition))
+
}}
#endif
Size sz1 = dims1 <= 2 ? psrc1->size() : Size();
Size sz2 = dims2 <= 2 ? psrc2->size() : Size();
#ifdef HAVE_OPENCL
- bool use_opencl = _dst.isUMat() && dims1 <= 2 && dims2 <= 2;
+ bool use_opencl = OCL_PERFORMANCE_CHECK(_dst.isUMat()) && dims1 <= 2 && dims2 <= 2;
#endif
bool src1Scalar = checkScalar(*psrc1, type2, kind1, kind2);
bool src2Scalar = checkScalar(*psrc2, type1, kind2, kind1);
haveScalar = true;
}
- CV_OCL_RUN(_src1.dims() <= 2 && _src2.dims() <= 2 && _dst.isUMat(),
+ CV_OCL_RUN(_src1.dims() <= 2 && _src2.dims() <= 2 && OCL_PERFORMANCE_CHECK(_dst.isUMat()),
ocl_compare(_src1, _src2, _dst, op, haveScalar))
int kind1 = _src1.kind(), kind2 = _src2.kind();
InputArray _upperb, OutputArray _dst)
{
CV_OCL_RUN(_src.dims() <= 2 && _lowerb.dims() <= 2 &&
- _upperb.dims() <= 2 && _dst.isUMat(),
+ _upperb.dims() <= 2 && OCL_PERFORMANCE_CHECK(_dst.isUMat()),
ocl_inRange(_src, _lowerb, _upperb, _dst))
int skind = _src.kind(), lkind = _lowerb.kind(), ukind = _upperb.kind();
# endif
#endif
+
+// TODO Move to some common place
+static bool getBoolParameter(const char* name, bool defaultValue)
+{
+ const char* envValue = getenv(name);
+ if (envValue == NULL)
+ {
+ return defaultValue;
+ }
+ cv::String value = envValue;
+ if (value == "1" || value == "True" || value == "true" || value == "TRUE")
+ {
+ return true;
+ }
+ if (value == "0" || value == "False" || value == "false" || value == "FALSE")
+ {
+ return false;
+ }
+ CV_ErrorNoReturn(cv::Error::StsBadArg, cv::format("Invalid value for %s parameter: %s", name, value.c_str()));
+}
+
+
// TODO Move to some common place
static size_t getConfigurationParameterForSize(const char* name, size_t defaultValue)
{
#endif
+static bool isRaiseError()
+{
+ static bool initialized = false;
+ static bool value = false;
+ if (!initialized)
+ {
+ value = getBoolParameter("OPENCV_OPENCL_RAISE_ERROR", false);
+ initialized = true;
+ }
+ return value;
+}
+
#ifdef _DEBUG
#define CV_OclDbgAssert CV_DbgAssert
#else
-#define CV_OclDbgAssert(expr) (void)(expr)
+#define CV_OclDbgAssert(expr) do { if (isRaiseError()) { CV_Assert(expr); } else { (void)(expr); } } while ((void)0, 0)
#endif
namespace cv { namespace ocl {
return p ? p->handle : 0;
}
+bool isPerformanceCheckBypassed()
+{
+ static bool initialized = false;
+ static bool value = false;
+ if (!initialized)
+ {
+ value = getBoolParameter("OPENCV_OPENCL_PERF_CHECK_BYPASS", false);
+ initialized = true;
+ }
+ return value;
+}
+
}}
{
#ifdef HAVE_OPENCL
Scalar _res;
- CV_OCL_RUN_(_src.isUMat() && _src.dims() <= 2,
+ CV_OCL_RUN_(OCL_PERFORMANCE_CHECK(_src.isUMat()) && _src.dims() <= 2,
ocl_sum(_src, _res, OCL_OP_SUM),
_res)
#endif
#ifdef HAVE_OPENCL
int res = -1;
- CV_OCL_RUN_(_src.isUMat() && _src.dims() <= 2,
+ CV_OCL_RUN_(OCL_PERFORMANCE_CHECK(_src.isUMat()) && _src.dims() <= 2,
ocl_countNonZero(_src, res),
res)
#endif
void cv::meanStdDev( InputArray _src, OutputArray _mean, OutputArray _sdv, InputArray _mask )
{
- CV_OCL_RUN(_src.isUMat() && _src.dims() <= 2,
+ CV_OCL_RUN(OCL_PERFORMANCE_CHECK(_src.isUMat()) && _src.dims() <= 2,
ocl_meanStdDev(_src, _mean, _sdv, _mask))
Mat src = _src.getMat(), mask = _mask.getMat();
CV_Assert( (cn == 1 && (_mask.empty() || _mask.type() == CV_8U)) ||
(cn > 1 && _mask.empty() && !minIdx && !maxIdx) );
- CV_OCL_RUN(_src.isUMat() && _src.dims() <= 2 && (_mask.empty() || _src.size() == _mask.size()),
+ CV_OCL_RUN(OCL_PERFORMANCE_CHECK(_src.isUMat()) && _src.dims() <= 2 && (_mask.empty() || _src.size() == _mask.size()),
ocl_minMaxIdx(_src, minVal, maxVal, minIdx, maxIdx, _mask))
Mat src = _src.getMat(), mask = _mask.getMat();
#ifdef HAVE_OPENCL
double _result = 0;
- CV_OCL_RUN_(_src.isUMat() && _src.dims() <= 2,
+ CV_OCL_RUN_(OCL_PERFORMANCE_CHECK(_src.isUMat()) && _src.dims() <= 2,
ocl_norm(_src, normType, _mask, _result),
_result)
#endif
#ifdef HAVE_OPENCL
double _result = 0;
- CV_OCL_RUN_(_src1.isUMat(),
+ CV_OCL_RUN_(OCL_PERFORMANCE_CHECK(_src1.isUMat()),
ocl_norm(_src1, _src2, normType, _mask, _result),
_result)
#endif