set(CUDA_ARCH_PTX "1.1 1.3" CACHE STRING "Specify 'virtual' PTX architectures to build PTX intermediate code for") \r
\r
# These variables are used in config templates\r
- string(REGEX REPLACE "\\." "" ARCH_GPU_NO_POINTS "${CUDA_ARCH_BIN}")\r
+ string(REGEX REPLACE "\\." "" ARCH_BIN_NO_POINTS "${CUDA_ARCH_BIN}")\r
string(REGEX REPLACE "\\." "" ARCH_PTX_NO_POINTS "${CUDA_ARCH_PTX}")\r
\r
# Ckeck if user specified 1.0 compute capability\r
string(REGEX MATCH "1.0" HAS_ARCH_10 "${CUDA_ARCH_BIN} ${CUDA_ARCH_PTX}")\r
+ set(CUDA_ARCH_BIN_OR_PTX_10 0)\r
if(NOT ${HAS_ARCH_10} STREQUAL "")\r
- set(OPENCV_ARCH_GPU_OR_PTX_10 1)\r
+ set(CUDA_ARCH_BIN_OR_PTX_10 1)\r
endif()\r
\r
- set(NVCC_FLAGS_EXTRA "")\r
+ # Flags to be set\r
+ set(NVCC_FLAGS_EXTRA "") \r
+ \r
+ # These variables are passed into the template\r
+ set(OPENCV_CUDA_ARCH_BIN "") \r
+ set(OPENCV_CUDA_ARCH_PTX "") \r
\r
# Tell nvcc to add binaries for the specified GPUs\r
- string(REGEX MATCHALL "[0-9()]+" ARCH_LIST "${ARCH_GPU_NO_POINTS}")\r
+ string(REGEX MATCHALL "[0-9()]+" ARCH_LIST "${ARCH_BIN_NO_POINTS}")\r
foreach(ARCH IN LISTS ARCH_LIST)\r
if (ARCH MATCHES "([0-9]+)\\(([0-9]+)\\)")\r
set(NVCC_FLAGS_EXTRA ${NVCC_FLAGS_EXTRA} -gencode arch=compute_${CMAKE_MATCH_2},code=sm_${CMAKE_MATCH_1})\r
+ set(OPENCV_CUDA_ARCH_BIN "${OPENCV_CUDA_ARCH_BIN} ${CMAKE_MATCH_1}")\r
else()\r
set(NVCC_FLAGS_EXTRA ${NVCC_FLAGS_EXTRA} -gencode arch=compute_${ARCH},code=sm_${ARCH})\r
+ set(OPENCV_CUDA_ARCH_BIN "${OPENCV_CUDA_ARCH_BIN} ${ARCH}")\r
endif()\r
endforeach()\r
\r
string(REGEX MATCHALL "[0-9]+" ARCH_LIST "${ARCH_PTX_NO_POINTS}")\r
foreach(ARCH IN LISTS ARCH_LIST)\r
set(NVCC_FLAGS_EXTRA ${NVCC_FLAGS_EXTRA} -gencode arch=compute_${ARCH},code=compute_${ARCH})\r
+ set(OPENCV_CUDA_ARCH_PTX "${OPENCV_CUDA_ARCH_PTX} ${ARCH}")\r
endforeach() \r
\r
+ # Wil; be processed in other scripts\r
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ${NVCC_FLAGS_EXTRA}) \r
set(OpenCV_CUDA_CC "${NVCC_FLAGS_EXTRA}")\r
\r
#cmakedefine HAVE_CUDA
/* Compile for 'real' NVIDIA GPU architectures */
-#define OPENCV_ARCH_GPU "${ARCH_GPU_NO_POINTS}"
+#define CUDA_ARCH_BIN "${OPENCV_CUDA_ARCH_BIN}"
/* Compile for 'virtual' NVIDIA PTX architectures */
-#define OPENCV_ARCH_PTX "${ARCH_PTX_NO_POINTS}"
+#define CUDA_ARCH_PTX "${OPENCV_CUDA_ARCH_PTX}"
-/* Create PTX or CUBIN for 1.0 compute capability */
-#cmakedefine OPENCV_ARCH_GPU_OR_PTX_10
+/* Create PTX or BIN for 1.0 compute capability */
+#cmakedefine CUDA_ARCH_BIN_OR_PTX_10
/* VideoInput library */
#cmakedefine HAVE_VIDEOINPUT
\r
CV_EXPORTS bool cv::gpu::hasPtxVersion(int major, int minor)\r
{\r
- return ::compare(OPENCV_ARCH_PTX, major * 10 + minor, std::equal_to<int>());\r
+ return ::compare(CUDA_ARCH_PTX, major * 10 + minor, std::equal_to<int>());\r
}\r
\r
\r
CV_EXPORTS bool cv::gpu::hasLessOrEqualPtxVersion(int major, int minor)\r
{\r
- return ::compare(OPENCV_ARCH_PTX, major * 10 + minor, \r
+ return ::compare(CUDA_ARCH_PTX, major * 10 + minor, \r
std::less_equal<int>());\r
}\r
\r
\r
CV_EXPORTS bool cv::gpu::hasGreaterOrEqualPtxVersion(int major, int minor)\r
{\r
- return ::compare(OPENCV_ARCH_PTX, major * 10 + minor, \r
+ return ::compare(CUDA_ARCH_PTX, major * 10 + minor, \r
std::greater_equal<int>());\r
}\r
\r
\r
CV_EXPORTS bool cv::gpu::hasCubinVersion(int major, int minor)\r
{\r
- return ::compare(OPENCV_ARCH_GPU, major * 10 + minor, std::equal_to<int>());\r
+ return ::compare(CUDA_ARCH_BIN, major * 10 + minor, std::equal_to<int>());\r
}\r
\r
\r
CV_EXPORTS bool cv::gpu::hasGreaterOrEqualCubinVersion(int major, int minor)\r
{\r
- return ::compare(OPENCV_ARCH_GPU, major * 10 + minor, \r
+ return ::compare(CUDA_ARCH_BIN, major * 10 + minor, \r
std::greater_equal<int>());\r
}\r
\r
#error "Insufficient NPP version, please update it."\r
#endif\r
\r
-#if defined(OPENCV_ARCH_GPU_OR_PTX_10)\r
+#if defined(CUDA_ARCH_BIN_OR_PTX_10)\r
#error "OpenCV GPU module doesn't support NVIDIA compute capability 1.0"\r
#endif\r
\r