#include <sstream>
#include <stdexcept>
#include <vector>
#include "deviceInfo.h"
#include "errorHelpers.h"
#include "typeWrappers.h"
* device info parameter. */
std::string get_device_info_string(cl_device_id device,
cl_device_info param_name)
{
size_t size = 0;
int err;
if ((err = clGetDeviceInfo(device, param_name, 0, NULL, &size))
!= CL_SUCCESS
|| size == 0)
{
throw std::runtime_error("clGetDeviceInfo failed\n");
}
std::vector<char> info(size);
if ((err = clGetDeviceInfo(device, param_name, size, info.data(), NULL))
!= CL_SUCCESS)
{
throw std::runtime_error("clGetDeviceInfo failed\n");
}
return std::string(info.data(), size - 1);
}
int is_extension_available(cl_device_id device, const char *extensionName)
{
std::string extString = get_device_extensions_string(device);
std::istringstream ss(extString);
while (ss)
{
std::string found;
ss >> found;
if (found == extensionName) return true;
}
return false;
}
std::string get_device_extensions_string(cl_device_id device)
{
return get_device_info_string(device, CL_DEVICE_EXTENSIONS);
}
std::string get_device_il_version_string(cl_device_id device)
{
return get_device_info_string(device, CL_DEVICE_IL_VERSION);
}
std::string get_device_version_string(cl_device_id device)
{
return get_device_info_string(device, CL_DEVICE_VERSION);
}
std::string get_device_name(cl_device_id device)
{
return get_device_info_string(device, CL_DEVICE_NAME);
}