/*M/////////////////////////////////////////////////////////////////////////////////////// // // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. // // By downloading, copying, installing or using the software you agree to this license. // If you do not agree to this license, do not download, install, // copy or use the software. // // // License Agreement // For Open Source Computer Vision Library // // Copyright (C) 2000-2008, Intel Corporation, all rights reserved. // Copyright (C) 2009, Willow Garage Inc., all rights reserved. // Third party copyrights are property of their respective owners. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // // * Redistribution's of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // // * Redistribution's in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // // * The name of the copyright holders may not be used to endorse or promote products // derived from this software without specific prior written permission. // // This software is provided by the copyright holders and contributors "as is" and // any express or implied warranties, including, but not limited to, the implied // warranties of merchantability and fitness for a particular purpose are disclaimed. // In no event shall the Intel Corporation or contributors be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused // and on any theory of liability, whether in contract, strict liability, // or tort (including negligence or otherwise) arising in any way out of // the use of this software, even if advised of the possibility of such damage. // //M*/ #include "cu_safe_call.h" #ifdef HAVE_CUDA namespace { #define error_entry(entry) { entry, #entry } struct ErrorEntry { int code; std::string str; }; class ErrorEntryComparer { public: inline ErrorEntryComparer(int code) : code_(code) {} inline bool operator()(const ErrorEntry& e) const { return e.code == code_; } private: int code_; }; std::string getErrorString(int code, const ErrorEntry* errors, size_t n) { size_t idx = std::find_if(errors, errors + n, ErrorEntryComparer(code)) - errors; const std::string& msg = (idx != n) ? errors[idx].str : std::string("Unknown error code"); std::ostringstream ostr; ostr << msg << " [Code = " << code << "]"; return ostr.str(); } const ErrorEntry cu_errors [] = { error_entry( CUDA_SUCCESS ), error_entry( CUDA_ERROR_INVALID_VALUE ), error_entry( CUDA_ERROR_OUT_OF_MEMORY ), error_entry( CUDA_ERROR_NOT_INITIALIZED ), error_entry( CUDA_ERROR_DEINITIALIZED ), error_entry( CUDA_ERROR_PROFILER_DISABLED ), error_entry( CUDA_ERROR_PROFILER_NOT_INITIALIZED ), error_entry( CUDA_ERROR_PROFILER_ALREADY_STARTED ), error_entry( CUDA_ERROR_PROFILER_ALREADY_STOPPED ), error_entry( CUDA_ERROR_NO_DEVICE ), error_entry( CUDA_ERROR_INVALID_DEVICE ), error_entry( CUDA_ERROR_INVALID_IMAGE ), error_entry( CUDA_ERROR_INVALID_CONTEXT ), error_entry( CUDA_ERROR_CONTEXT_ALREADY_CURRENT ), error_entry( CUDA_ERROR_MAP_FAILED ), error_entry( CUDA_ERROR_UNMAP_FAILED ), error_entry( CUDA_ERROR_ARRAY_IS_MAPPED ), error_entry( CUDA_ERROR_ALREADY_MAPPED ), error_entry( CUDA_ERROR_NO_BINARY_FOR_GPU ), error_entry( CUDA_ERROR_ALREADY_ACQUIRED ), error_entry( CUDA_ERROR_NOT_MAPPED ), error_entry( CUDA_ERROR_NOT_MAPPED_AS_ARRAY ), error_entry( CUDA_ERROR_NOT_MAPPED_AS_POINTER ), error_entry( CUDA_ERROR_ECC_UNCORRECTABLE ), error_entry( CUDA_ERROR_UNSUPPORTED_LIMIT ), error_entry( CUDA_ERROR_CONTEXT_ALREADY_IN_USE ), error_entry( CUDA_ERROR_INVALID_SOURCE ), error_entry( CUDA_ERROR_FILE_NOT_FOUND ), error_entry( CUDA_ERROR_SHARED_OBJECT_SYMBOL_NOT_FOUND ), error_entry( CUDA_ERROR_SHARED_OBJECT_INIT_FAILED ), error_entry( CUDA_ERROR_OPERATING_SYSTEM ), error_entry( CUDA_ERROR_INVALID_HANDLE ), error_entry( CUDA_ERROR_NOT_FOUND ), error_entry( CUDA_ERROR_NOT_READY ), error_entry( CUDA_ERROR_LAUNCH_FAILED ), error_entry( CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES ), error_entry( CUDA_ERROR_LAUNCH_TIMEOUT ), error_entry( CUDA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING ), error_entry( CUDA_ERROR_PEER_ACCESS_ALREADY_ENABLED ), error_entry( CUDA_ERROR_PEER_ACCESS_NOT_ENABLED ), error_entry( CUDA_ERROR_PRIMARY_CONTEXT_ACTIVE ), error_entry( CUDA_ERROR_CONTEXT_IS_DESTROYED ), error_entry( CUDA_ERROR_ASSERT ), error_entry( CUDA_ERROR_TOO_MANY_PEERS ), error_entry( CUDA_ERROR_HOST_MEMORY_ALREADY_REGISTERED ), error_entry( CUDA_ERROR_HOST_MEMORY_NOT_REGISTERED ), error_entry( CUDA_ERROR_UNKNOWN ) }; const size_t cu_errors_num = sizeof(cu_errors) / sizeof(cu_errors[0]); } std::string cv::gpu::detail::cuGetErrString(CUresult res) { return getErrorString(res, cu_errors, cu_errors_num); } #endif // HAVE_CUDA