diff --git a/modules/ocl/include/opencv2/ocl.hpp b/modules/ocl/include/opencv2/ocl.hpp index 7cc55b8335..745953d04c 100644 --- a/modules/ocl/include/opencv2/ocl.hpp +++ b/modules/ocl/include/opencv2/ocl.hpp @@ -103,6 +103,7 @@ namespace cv void release(); Info &operator = (const Info &m); std::vector DeviceName; + String PlatformName; }; //////////////////////////////// Initialization & Info //////////////////////// //this function may be obsoleted diff --git a/modules/ocl/src/initialization.cpp b/modules/ocl/src/initialization.cpp index 7dc8d57182..29d81aa1dd 100644 --- a/modules/ocl/src/initialization.cpp +++ b/modules/ocl/src/initialization.cpp @@ -127,7 +127,7 @@ namespace cv cl_platform_id oclplatform; std::vector devices; std::vector devName; - + String platName; cl_context oclcontext; cl_command_queue clCmdQueue; int devnum; @@ -298,10 +298,14 @@ namespace cv std::vector platforms(numPlatforms); openCLSafeCall(clGetPlatformIDs(numPlatforms, &platforms[0], 0)); - char deviceName[256]; int devcienums = 0; + + const static int max_name_length = 256; + char deviceName[max_name_length]; + char plfmName[max_name_length]; for (unsigned i = 0; i < numPlatforms; ++i) { + cl_uint numsdev; cl_int status = clGetDeviceIDs(platforms[i], devicetype, 0, NULL, &numsdev); if(status != CL_DEVICE_NOT_FOUND) @@ -314,6 +318,9 @@ namespace cv openCLSafeCall(clGetDeviceIDs(platforms[i], devicetype, numsdev, &devices[0], 0)); Info ocltmpinfo; + openCLSafeCall(clGetPlatformInfo(platforms[i], CL_PLATFORM_VENDOR, sizeof(plfmName), plfmName, NULL)); + ocltmpinfo.PlatformName = String(plfmName); + ocltmpinfo.impl->platName = String(plfmName); ocltmpinfo.impl->oclplatform = platforms[i]; for(unsigned j = 0; j < numsdev; ++j) { @@ -1035,6 +1042,7 @@ namespace cv impl->release(); impl = new Impl; DeviceName.clear(); + PlatformName.clear(); } Info::~Info() @@ -1048,6 +1056,7 @@ namespace cv impl->release(); impl = m.impl->copy(); DeviceName = m.DeviceName; + PlatformName = m.PlatformName; return *this; } @@ -1055,6 +1064,7 @@ namespace cv { impl = m.impl->copy(); DeviceName = m.DeviceName; + PlatformName = m.PlatformName; } }//namespace ocl diff --git a/modules/ocl/test/main.cpp b/modules/ocl/test/main.cpp index 820d577552..3b16cffdd1 100644 --- a/modules/ocl/test/main.cpp +++ b/modules/ocl/test/main.cpp @@ -117,7 +117,7 @@ int main(int argc, char **argv) } setDevice(oclinfo[pid], device); - + cout << "Platform name:" << oclinfo[pid].PlatformName << endl; cout << "Device type:" << type << endl << "Device name:" << oclinfo[pid].DeviceName[device] << endl; return RUN_ALL_TESTS(); }