diff --git a/modules/core/include/opencv2/core/gpumat.hpp b/modules/core/include/opencv2/core/gpumat.hpp index 755660461..d0f415ec3 100644 --- a/modules/core/include/opencv2/core/gpumat.hpp +++ b/modules/core/include/opencv2/core/gpumat.hpp @@ -112,13 +112,13 @@ namespace cv { namespace gpu // Creates DeviceInfo object for the given GPU DeviceInfo(int device_id) : device_id_(device_id) { query(); } - std::string name() const { return name_; } + std::string name() const; // Return compute capability versions - int majorVersion() const { return majorVersion_; } - int minorVersion() const { return minorVersion_; } + int majorVersion() const; + int minorVersion() const; - int multiProcessorCount() const { return multi_processor_count_; } + int multiProcessorCount() const; size_t sharedMemPerBlock() const; @@ -132,7 +132,7 @@ namespace cv { namespace gpu // Checks whether the GPU module can be run on the given device bool isCompatible() const; - int deviceID() const { return device_id_; } + int deviceID() const; private: // Private section is fictive to preserve bin compatibility. diff --git a/modules/core/src/gpumat.cpp b/modules/core/src/gpumat.cpp index 7e4eab4a1..dc24b6e82 100644 --- a/modules/core/src/gpumat.cpp +++ b/modules/core/src/gpumat.cpp @@ -170,6 +170,11 @@ size_t cv::gpu::DeviceInfo::freeMemory() const { return deviceInfoFuncTable()->f size_t cv::gpu::DeviceInfo::totalMemory() const { return deviceInfoFuncTable()->totalMemory(); } bool cv::gpu::DeviceInfo::supports(FeatureSet feature_set) const { return deviceInfoFuncTable()->supports(feature_set); } bool cv::gpu::DeviceInfo::isCompatible() const { return deviceInfoFuncTable()->isCompatible(); } +int cv::gpu::DeviceInfo::deviceID() const { return deviceInfoFuncTable()->deviceID(); }; +int cv::gpu::DeviceInfo::majorVersion() const { return deviceInfoFuncTable()->majorVersion(); } +int cv::gpu::DeviceInfo::minorVersion() const { return deviceInfoFuncTable()->minorVersion(); } +std::string cv::gpu::DeviceInfo::name() const { return deviceInfoFuncTable()->name(); } +int cv::gpu::DeviceInfo::multiProcessorCount() const { return deviceInfoFuncTable()->multiProcessorCount(); } void cv::gpu::DeviceInfo::query() { deviceInfoFuncTable()->query(); } void cv::gpu::printCudaDeviceInfo(int device) { gpuFuncTable()->printCudaDeviceInfo(device); } diff --git a/modules/core/src/gpumat_cuda.hpp b/modules/core/src/gpumat_cuda.hpp index 56d626a5c..83172d5ca 100644 --- a/modules/core/src/gpumat_cuda.hpp +++ b/modules/core/src/gpumat_cuda.hpp @@ -11,6 +11,11 @@ virtual bool supports(FeatureSet) const = 0; virtual bool isCompatible() const = 0; virtual void query() = 0; + virtual int deviceID() const = 0; + virtual std::string name() const = 0; + virtual int majorVersion() const = 0; + virtual int minorVersion() const = 0; + virtual int multiProcessorCount() const = 0; virtual ~DeviceInfoFuncTable() {}; }; @@ -70,6 +75,11 @@ bool supports(FeatureSet) const { throw_nogpu; return false; } bool isCompatible() const { throw_nogpu; return false; } void query() { throw_nogpu; } + int deviceID() const { throw_nogpu; return -1; }; + std::string name() const { throw_nogpu; return std::string(); } + int majorVersion() const { throw_nogpu; return -1; } + int minorVersion() const { throw_nogpu; return -1; } + int multiProcessorCount() const { throw_nogpu; return -1; } }; class EmptyFuncTable : public GpuFuncTable @@ -579,6 +589,31 @@ namespace cv { namespace gpu { namespace device minorVersion_ = prop->minor; } + int deviceID() const + { + return device_id_; + } + + std::string name() const + { + return name_; + } + + int majorVersion() const + { + return majorVersion_; + } + + int minorVersion() const + { + return minorVersion_; + } + + int multiProcessorCount() const + { + return multi_processor_count_; + } + private: int device_id_;