diff --git a/modules/gpu/cuda/cuda_shared.hpp b/modules/gpu/cuda/cuda_shared.hpp index 4da7dcdfd..391773be2 100644 --- a/modules/gpu/cuda/cuda_shared.hpp +++ b/modules/gpu/cuda/cuda_shared.hpp @@ -51,7 +51,9 @@ namespace cv { typedef unsigned char uchar; typedef unsigned short ushort; - typedef unsigned int uint; + typedef unsigned int uint; + + extern "C" void error( const char *error_string, const char *file, const int line, const char *func = ""); namespace impl { @@ -62,4 +64,8 @@ namespace cv } } +#ifdef __CUDACC__ + #define cudaSafeCall(err) { if( cudaSuccess != err) cv::gpu::error(cudaGetErrorString(err), __FILE__, __LINE__); } +#endif + #endif /* __OPENCV_CUDA_SHARED_HPP__ */ diff --git a/modules/gpu/cuda/stereobm.cu b/modules/gpu/cuda/stereobm.cu index 396248570..39d72af85 100644 --- a/modules/gpu/cuda/stereobm.cu +++ b/modules/gpu/cuda/stereobm.cu @@ -297,7 +297,6 @@ extern "C" void cv::gpu::impl::stereoBM_GPU(const DevMem2D& left, const DevMem2D size_t smem_size = (BLOCK_W + N_DISPARITIES * SHARED_MEM_SIZE) * sizeof(unsigned int); -#define cudaSafeCall cudaSafeCall( cudaMemset2D(disp.ptr, disp.step, 0, disp.cols, disp. rows) ); cudaSafeCall( cudaMemset2D(minSSD_buf.ptr, minSSD_buf.step, 0xFF, minSSD_buf.cols * minSSD_buf.elemSize(), disp. rows) ); diff --git a/modules/gpu/src/precomp.cpp b/modules/gpu/src/precomp.cpp index b4481e4f9..c4a61d923 100644 --- a/modules/gpu/src/precomp.cpp +++ b/modules/gpu/src/precomp.cpp @@ -42,3 +42,9 @@ #include "precomp.hpp" /* End of file. */ + + +extern "C" void cv::gpu::error( const char *error_string, const char *file, const int line, const char *func) +{ + cv::error( cv::Exception(CV_GpuApiCallError, error_string, func, file, line) ); +} diff --git a/modules/gpu/src/precomp.hpp b/modules/gpu/src/precomp.hpp index 46cfdbd10..5584586a7 100644 --- a/modules/gpu/src/precomp.hpp +++ b/modules/gpu/src/precomp.hpp @@ -70,25 +70,14 @@ #include "cuda_runtime_api.h" -#define cudaCallerSafeCall(err) err; - -#ifdef __GNUC__ - #define cudaSafeCall(err) __cudaSafeCall(err, __FILE__, __LINE__, __func__) -#else - #define cudaSafeCall(err) __cudaSafeCall(err, __FILE__, __LINE__) +#ifdef __GNUC__ + #define cudaSafeCall(err) { if(cudaSuccess != err) cv::gpu::error(cudaGetErrorString(err), __FILE__, __LINE__, __func__); } +#else + #define cudaSafeCall(err) { if(cudaSuccess != err) cv::gpu::error(cudaGetErrorString(err), __FILE__, __LINE__); } #endif -namespace cv -{ - namespace gpu - { - static inline void __cudaSafeCall( cudaError err, const char *file, const int line, const char *func = "") - { - if( cudaSuccess != err) - cv::error( cv::Exception(CV_GpuApiCallError, cudaGetErrorString(err), func, file, line) ); - } - } -} +#define cudaCallerSafeCall(err) err; + #endif /* HAVE_CUDA */