+cl_device_type setup_device_types_filter (char *opencl_device_types)
+{
+ cl_device_type device_types_filter = 0;
+
+ if (opencl_device_types)
+ {
+ char *device_types = strdup (opencl_device_types);
+
+ char *next = strtok (device_types, ",");
+
+ do
+ {
+ int device_type = atoi (next);
+
+ if (device_type < 1 || device_type > 3)
+ {
+ log_error ("ERROR: invalid device_type %u specified", device_type);
+
+ exit (-1);
+ }
+
+ device_types_filter |= 1 << device_type;
+
+ } while ((next = strtok (NULL, ",")) != NULL);
+
+ free (device_types);
+ }
+ else
+ {
+ device_types_filter = CL_DEVICE_TYPE_ALL;
+ }
+
+ return device_types_filter;
+}
+