__shared__ best_type smaxval[nthreads];\r
\r
uint tid = threadIdx.y * blockDim.x + threadIdx.x;\r
- uint idx = min(tid, gridDim.x * gridDim.y - 1);\r
+ uint idx = min(tid, size - 1);\r
\r
sminval[tid] = minval[idx];\r
smaxval[tid] = maxval[idx];\r
__syncthreads();\r
\r
- findMinMaxInSmem<nthreads, best_type>(sminval, smaxval, tid);\r
+ findMinMaxInSmem<nthreads, best_type>(sminval, smaxval, tid);\r
\r
if (tid == 0) \r
{\r
\r
// Returns required buffer sizes\r
void getBufSizeRequired(int cols, int rows, int elem_size, int& b1cols, \r
- int& b1rows, int& b2cols, int& b2rows)\r
+ int& b1rows, int& b2cols, int& b2rows)\r
{\r
dim3 threads, grid;\r
estimateThreadCfg(cols, rows, threads, grid);\r
\r
template <typename T>\r
void minMaxLocCaller(const DevMem2D src, double* minval, double* maxval, \r
- int minloc[2], int maxloc[2], PtrStep valbuf, PtrStep locbuf)\r
+ int minloc[2], int maxloc[2], PtrStep valbuf, PtrStep locbuf)\r
{\r
dim3 threads, grid;\r
estimateThreadCfg(src.cols, src.rows, threads, grid);\r
__shared__ uint smaxloc[nthreads];\r
\r
uint tid = threadIdx.y * blockDim.x + threadIdx.x;\r
- uint idx = min(tid, gridDim.x * gridDim.y - 1);\r
+ uint idx = min(tid, size - 1);\r
\r
sminval[tid] = minval[idx];\r
smaxval[tid] = maxval[idx];\r
smaxloc[tid] = maxloc[idx];\r
__syncthreads();\r
\r
- findMinMaxLocInSmem<nthreads, best_type>(sminval, smaxval, sminloc, smaxloc, tid);\r
+ findMinMaxLocInSmem<nthreads, best_type>(sminval, smaxval, sminloc, smaxloc, tid);\r
\r
if (tid == 0) \r
{\r
\r
const int tid = threadIdx.y * blockDim.x + threadIdx.x;\r
\r
- DstType res = tid < gridDim.x * gridDim.y ? result[tid] : VecTraits<DstType>::all(0);\r
+ DstType res = tid < size ? result[tid] : VecTraits<DstType>::all(0);\r
smem[tid] = res.x;\r
smem[tid + nthreads] = res.y;\r
__syncthreads();\r
\r
const int tid = threadIdx.y * blockDim.x + threadIdx.x;\r
\r
- DstType res = tid < gridDim.x * gridDim.y ? result[tid] : VecTraits<DstType>::all(0);\r
+ DstType res = tid < size ? result[tid] : VecTraits<DstType>::all(0);\r
smem[tid] = res.x;\r
smem[tid + nthreads] = res.y;\r
smem[tid + 2 * nthreads] = res.z;\r
\r
const int tid = threadIdx.y * blockDim.x + threadIdx.x;\r
\r
- DstType res = tid < gridDim.x * gridDim.y ? result[tid] : VecTraits<DstType>::all(0);\r
+ DstType res = tid < size ? result[tid] : VecTraits<DstType>::all(0);\r
smem[tid] = res.x;\r
smem[tid + nthreads] = res.y;\r
smem[tid + 2 * nthreads] = res.z;\r
minMaxMaskCaller<double> };\r
\r
CV_Assert(src.channels() == 1);\r
+\r
CV_Assert(mask.empty() || (mask.type() == CV_8U && src.size() == mask.size()));\r
\r
- bool double_ok = hasGreaterOrEqualVersion(1, 3) && \r
- hasNativeDoubleSupport(getDevice());\r
- CV_Assert(src.type() != CV_64F || double_ok);\r
+ CV_Assert(src.type() != CV_64F || (hasGreaterOrEqualVersion(1, 3) && \r
+ hasNativeDoubleSupport(getDevice())));\r
\r
double minVal_; if (!minVal) minVal = &minVal_;\r
double maxVal_; if (!maxVal) maxVal = &maxVal_;\r
minMaxLocMaskCaller<double> };\r
\r
CV_Assert(src.channels() == 1);\r
+\r
CV_Assert(mask.empty() || (mask.type() == CV_8U && src.size() == mask.size()));\r
\r
- bool double_ok = hasGreaterOrEqualVersion(1, 3) && \r
- hasNativeDoubleSupport(getDevice());\r
- CV_Assert(src.type() != CV_64F || double_ok);\r
+ CV_Assert(src.type() != CV_64F || (hasGreaterOrEqualVersion(1, 3) && \r
+ hasNativeDoubleSupport(getDevice())));\r
\r
double minVal_; if (!minVal) minVal = &minVal_;\r
double maxVal_; if (!maxVal) maxVal = &maxVal_;\r
\r
Size valbuf_size, locbuf_size;\r
getBufSizeRequired(src.cols, src.rows, src.elemSize(), valbuf_size.width, \r
- valbuf_size.height, locbuf_size.width, locbuf_size.height);\r
+ valbuf_size.height, locbuf_size.width, locbuf_size.height);\r
ensureSizeIsEnough(valbuf_size, CV_8U, valBuf);\r
ensureSizeIsEnough(locbuf_size, CV_8U, locBuf);\r
\r
\r
CV_Assert(src.channels() == 1);\r
\r
- bool double_ok = hasGreaterOrEqualVersion(1, 3) && \r
- hasNativeDoubleSupport(getDevice());\r
- CV_Assert(src.type() != CV_64F || double_ok);\r
+ CV_Assert(src.type() != CV_64F || (hasGreaterOrEqualVersion(1, 3) && \r
+ hasNativeDoubleSupport(getDevice())));\r
\r
Size buf_size;\r
getBufSizeRequired(src.cols, src.rows, buf_size.width, buf_size.height);\r