clay_utils/
args.rs

1use std::ops::Deref;
2use ocl;
3use clay_core::{Context};
4
5
6pub fn parse<T: Deref<Target=str>, I: Iterator<Item=T>>(args: I) -> clay_core::Result<Context> {
7    let args = args.collect::<Vec<_>>();
8    let platform = if args.len() > 1 {
9        let platform_list = ocl::Platform::list();
10        let index = args[1].parse::<usize>().map_err(|e| e.to_string())?;
11        assert!(platform_list.len() > index);
12        platform_list[index]
13    } else {
14        ocl::Platform::default()
15    };
16    let device = ocl::Device::first(platform)?;
17    let context = Context::new(platform, device)?;
18    Ok(context)
19}