diff --git a/modules/gpu/src/opencv2/gpu/device/kernels.hpp b/modules/gpu/src/opencv2/gpu/device/kernels.hpp index 5298befbc..5f3f04161 100644 --- a/modules/gpu/src/opencv2/gpu/device/kernels.hpp +++ b/modules/gpu/src/opencv2/gpu/device/kernels.hpp @@ -63,7 +63,7 @@ namespace cv struct Warp { - static __forceinline__ __device__ int STRIDE() { return warpSize; + static __forceinline__ __device__ int STRIDE() { return warpSize }; static __forceinline__ __device__ int SHIFT() { return threadIdx.x & (warpSize - 1); } }; @@ -77,8 +77,8 @@ namespace cv out[idx] = in[idx]; } - template - __forceinline__ __device__ void Copy(ForwardIterator beg, ForwardIterator end, OutIter out) + template + __forceinline__ __device__ void Copy(InIter beg, InIter end, OutIter out) { int STRIDE = Worker::STRIDE(); int SHIFT = Worker::SHIFT(); @@ -103,6 +103,19 @@ namespace cv for (; idx < length; idx += STRIDE, cur += STRIDE) out[idx] = cur; } + + template + __forceinline__ __device__ void Yota(OutIter beg, OutIter end, int val) + { + int STRIDE = Worker::STRIDE(); + int SHIFT = Worker::SHIFT(); + + beg += SHIFT; + val += SHIFT; + + for (; beg < end; beg += STRIDE, val += STRIDE) + *beg = val; + } } } }