#include "boring_parts.h" #define RETURN_IF_FAIL(expr) do { \ int res=(expr); \ if ( res != 0 ) return res; \ } while(0) // TODO : print streamsdk::getOpenCLErrorCodeStr(res) #define CL_RETURN_VAL_IF_FAIL(val, expr) do { \ cl_int res=(expr); \ if ( res != CL_SUCCESS ) { \ std::cerr << "file " << __FILE__ << ": line " << __LINE__ << " (" << __PRETTY_FUNCTION__ \ << "): '" << "expr" << "' failed (return code : " << res << ")" << std::endl; \ return val; \ } \ } while(0) int initLibs() { // FIXME : unused RETURN_IF_FAIL( initOpenCL() ); return 0; } int initOpenCL() { cl_uint id, numPlatforms, numDevices; char pbuf[100]; std::string dTypeStr; cl_platform_id *platforms, platform; cl_device_id *devices, device; // Get platform count CL_RETURN_VAL_IF_FAIL(1, clGetPlatformIDs(0, NULL, &numPlatforms) ); std::cout << "Detected " << numPlatforms << " platform(s)" << std::endl; if ( ! ( numPlatforms > 0 ) ) return 2; // Allocate room for all platform IDs platforms = new cl_platform_id[numPlatforms]; // Get platform IDs CL_RETURN_VAL_IF_FAIL(3, clGetPlatformIDs(numPlatforms, platforms, &numPlatforms) ); // Enumerate platforms and grab informations for(id=0;id 0 ) ) return 12; // Allocate room for all devices IDs devices = new cl_device_id[numDevices]; // Get devices IDs CL_RETURN_VAL_IF_FAIL(13, clGetDeviceIDs(platform,CL_DEVICE_TYPE_ALL,numDevices,devices,&numDevices) ); // Enumerate devices and grab informations for(id=0;id