Commit 7172c164 authored by Vadim Pisarevsky's avatar Vadim Pisarevsky

Merge pull request #5717 from jet47:cuda-maxwell-fixes

parents d19897b7 1bef1b8d
...@@ -632,12 +632,12 @@ namespace cv { namespace cuda { namespace device ...@@ -632,12 +632,12 @@ namespace cv { namespace cuda { namespace device
__device__ __forceinline__ int idx_row_low(int y) const __device__ __forceinline__ int idx_row_low(int y) const
{ {
return (y >= 0) * y + (y < 0) * (y - ((y - height + 1) / height) * height); return (y >= 0) ? y : (y - ((y - height + 1) / height) * height);
} }
__device__ __forceinline__ int idx_row_high(int y) const __device__ __forceinline__ int idx_row_high(int y) const
{ {
return (y < height) * y + (y >= height) * (y % height); return (y < height) ? y : (y % height);
} }
__device__ __forceinline__ int idx_row(int y) const __device__ __forceinline__ int idx_row(int y) const
...@@ -647,12 +647,12 @@ namespace cv { namespace cuda { namespace device ...@@ -647,12 +647,12 @@ namespace cv { namespace cuda { namespace device
__device__ __forceinline__ int idx_col_low(int x) const __device__ __forceinline__ int idx_col_low(int x) const
{ {
return (x >= 0) * x + (x < 0) * (x - ((x - width + 1) / width) * width); return (x >= 0) ? x : (x - ((x - width + 1) / width) * width);
} }
__device__ __forceinline__ int idx_col_high(int x) const __device__ __forceinline__ int idx_col_high(int x) const
{ {
return (x < width) * x + (x >= width) * (x % width); return (x < width) ? x : (x % width);
} }
__device__ __forceinline__ int idx_col(int x) const __device__ __forceinline__ int idx_col(int x) const
......
...@@ -128,7 +128,7 @@ PERF_TEST_P(Sz_Flags, MulSpectrums, ...@@ -128,7 +128,7 @@ PERF_TEST_P(Sz_Flags, MulSpectrums,
TEST_CYCLE() cv::cuda::mulSpectrums(d_a, d_b, dst, flag); TEST_CYCLE() cv::cuda::mulSpectrums(d_a, d_b, dst, flag);
CUDA_SANITY_CHECK(dst); CUDA_SANITY_CHECK(dst, 1e-6, ERROR_RELATIVE);
} }
else else
{ {
...@@ -162,7 +162,7 @@ PERF_TEST_P(Sz, MulAndScaleSpectrums, ...@@ -162,7 +162,7 @@ PERF_TEST_P(Sz, MulAndScaleSpectrums,
TEST_CYCLE() cv::cuda::mulAndScaleSpectrums(d_src1, d_src2, dst, cv::DFT_ROWS, scale, false); TEST_CYCLE() cv::cuda::mulAndScaleSpectrums(d_src1, d_src2, dst, cv::DFT_ROWS, scale, false);
CUDA_SANITY_CHECK(dst); CUDA_SANITY_CHECK(dst, 1e-6, ERROR_RELATIVE);
} }
else else
{ {
......
...@@ -243,14 +243,8 @@ PERF_TEST_P(Sz_Type_Op, AlphaComp, ...@@ -243,14 +243,8 @@ PERF_TEST_P(Sz_Type_Op, AlphaComp,
TEST_CYCLE() cv::cuda::alphaComp(d_img1, d_img2, dst, alpha_op); TEST_CYCLE() cv::cuda::alphaComp(d_img1, d_img2, dst, alpha_op);
if (CV_MAT_DEPTH(type) < CV_32F) // The function is a just wrapper for NPP. We can't control its results.
{ SANITY_CHECK_NOTHING();
CUDA_SANITY_CHECK(dst, 1);
}
else
{
CUDA_SANITY_CHECK(dst, 1e-3, ERROR_RELATIVE);
}
} }
else else
{ {
......
...@@ -210,8 +210,8 @@ PERF_TEST_P(ImagePair_WinSz_Levels_Iters, PyrLKOpticalFlowDense, ...@@ -210,8 +210,8 @@ PERF_TEST_P(ImagePair_WinSz_Levels_Iters, PyrLKOpticalFlowDense,
cv::cuda::GpuMat u = flows[0]; cv::cuda::GpuMat u = flows[0];
cv::cuda::GpuMat v = flows[1]; cv::cuda::GpuMat v = flows[1];
CUDA_SANITY_CHECK(u); // Sanity test fails on Maxwell and CUDA 7.0
CUDA_SANITY_CHECK(v); SANITY_CHECK_NOTHING();
} }
else else
{ {
......
...@@ -163,7 +163,7 @@ CUDA_TEST_P(StereoConstantSpaceBP, Regression) ...@@ -163,7 +163,7 @@ CUDA_TEST_P(StereoConstantSpaceBP, Regression)
cv::Mat h_disp(disp); cv::Mat h_disp(disp);
h_disp.convertTo(h_disp, disp_gold.depth()); h_disp.convertTo(h_disp, disp_gold.depth());
EXPECT_MAT_NEAR(disp_gold, h_disp, 1.0); EXPECT_MAT_SIMILAR(disp_gold, h_disp, 1e-4);
} }
INSTANTIATE_TEST_CASE_P(CUDA_Stereo, StereoConstantSpaceBP, ALL_DEVICES); INSTANTIATE_TEST_CASE_P(CUDA_Stereo, StereoConstantSpaceBP, ALL_DEVICES);
......
...@@ -198,12 +198,12 @@ struct BrdWrap ...@@ -198,12 +198,12 @@ struct BrdWrap
{ {
__device__ __forceinline__ static int idx_low(int i, int len) __device__ __forceinline__ static int idx_low(int i, int len)
{ {
return (i >= 0) * i + (i < 0) * (i - ((i - len + 1) / len) * len); return (i >= 0) ? i : (i - ((i - len + 1) / len) * len);
} }
__device__ __forceinline__ static int idx_high(int i, int len) __device__ __forceinline__ static int idx_high(int i, int len)
{ {
return (i < len) * i + (i >= len) * (i % len); return (i < len) ? i : (i % len);
} }
}; };
......
...@@ -81,7 +81,7 @@ TEST(CUDA_BruteForceNonLocalMeans, Regression) ...@@ -81,7 +81,7 @@ TEST(CUDA_BruteForceNonLocalMeans, Regression)
cv::resize(bgr_gold, bgr_gold, cv::Size(256, 256)); cv::resize(bgr_gold, bgr_gold, cv::Size(256, 256));
cv::resize(gray_gold, gray_gold, cv::Size(256, 256)); cv::resize(gray_gold, gray_gold, cv::Size(256, 256));
EXPECT_MAT_NEAR(bgr_gold, dbgr, 1e-4); EXPECT_MAT_NEAR(bgr_gold, dbgr, 1);
EXPECT_MAT_NEAR(gray_gold, dgray, 1e-4); EXPECT_MAT_NEAR(gray_gold, dgray, 1e-4);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment