15 std::vector<cl::Platform> all_platforms;
16 cl::Platform::get(&all_platforms);
18 if (all_platforms.size() == 0)
20 throw std::runtime_error(
"No platforms found. Check OpenCL installation!");
22 cl::Platform default_platform = all_platforms[0];
23 std::cout <<
"Using platform: " 24 << default_platform.getInfo<CL_PLATFORM_NAME>() <<
"\n";
26 std::vector<cl::Device> all_devices;
27 default_platform.getDevices(CL_DEVICE_TYPE_ALL, &all_devices);
28 if (all_devices.size() == 0)
30 throw std::runtime_error(
"No devices found. Check OpenCL installation!");
34 for (cl::Device dev : all_devices)
36 std::cout <<
"Dev found: " << dev.getInfo<CL_DEVICE_TYPE>() <<
" " 37 << dev.getInfo<CL_DEVICE_NAME>() << std::endl;
42 cl::Device default_device = all_devices[0];
43 std::cout <<
"Using device: " << default_device.getInfo<CL_DEVICE_NAME>()
45 return std::make_shared<cl::Device>(default_device);
52 cl::Context context({*device});
53 return std::make_shared<cl::Context>(context);
58 std::ifstream file(path);
59 std::stringstream ss = std::stringstream();
61 while (file.getline(buffer, 65500))
66 return std::make_shared<std::string>(ss.str());
73 cl::Program::Sources sources;
74 sources.push_back({kernel->c_str(), kernel->length()});
76 cl::Program program(*context, sources);
77 if (program.build({*device}) != CL_SUCCESS)
79 throw std::runtime_error(
81 program.getBuildInfo<CL_PROGRAM_BUILD_LOG>(*device));
83 return std::make_shared<cl::Program>(program);
88 cl::CommandQueue queue(*context, *device);
89 return std::make_shared<cl::CommandQueue>(queue);
93 const std::string& program_name)
95 cl::Kernel kernel = cl::Kernel(*program, program_name.c_str());
96 return std::make_shared<cl::Kernel>(kernel);
ContextPtr get_ocl_context(DevicePtr device)
QueuePtr create_ocl_command_queue(ContextPtr context, DevicePtr device)
DevicePtr get_ocl_default_device()
std::shared_ptr< cl::Device > DevicePtr
StringPtr load_kernel_definition(const std::string &path)
std::shared_ptr< std::string > StringPtr
std::shared_ptr< cl::Program > ProgramPtr
std::shared_ptr< cl::CommandQueue > QueuePtr
KernelPtr create_ocl_kernel(ProgramPtr program, const std::string &program_name)
This namespace is used by the nodelets inside our package pses_kinect_utilities.
std::shared_ptr< cl::Context > ContextPtr
std::shared_ptr< cl::Kernel > KernelPtr
ProgramPtr build_ocl_program(DevicePtr device, ContextPtr context, StringPtr kernel)