use cl3::device::{
device_type_text, get_device_ids, get_device_info, vendor_id_text, CL_DEVICE_BUILT_IN_KERNELS,
CL_DEVICE_EXTENSIONS, CL_DEVICE_NAME, CL_DEVICE_OPENCL_C_VERSION, CL_DEVICE_PROFILE,
CL_DEVICE_SVM_CAPABILITIES, CL_DEVICE_TYPE, CL_DEVICE_TYPE_ALL, CL_DEVICE_VENDOR,
CL_DEVICE_VENDOR_ID, CL_DEVICE_VERSION,
};
use cl3::platform::{
get_platform_ids, get_platform_info, CL_PLATFORM_EXTENSIONS, CL_PLATFORM_NAME,
CL_PLATFORM_PROFILE, CL_PLATFORM_VENDOR, CL_PLATFORM_VERSION,
};
use cl3::types::{cl_int, cl_uint, cl_ulong};
fn main() -> Result<(), cl_int> {
let platforms = get_platform_ids()?;
println!("Number of platforms: {}", platforms.len());
for platform_id in platforms {
println!(
"CL_PLATFORM_VENDOR: {}",
String::from(get_platform_info(platform_id, CL_PLATFORM_VENDOR)?)
);
println!(
"CL_PLATFORM_NAME: {}",
String::from(get_platform_info(platform_id, CL_PLATFORM_NAME)?)
);
println!(
"CL_PLATFORM_VERSION: {}",
String::from(get_platform_info(platform_id, CL_PLATFORM_VERSION)?)
);
println!(
"CL_PLATFORM_PROFILE: {}",
String::from(get_platform_info(platform_id, CL_PLATFORM_PROFILE)?)
);
println!(
"CL_PLATFORM_EXTENSIONS: {}",
String::from(get_platform_info(platform_id, CL_PLATFORM_EXTENSIONS)?)
);
let devices = get_device_ids(platform_id, CL_DEVICE_TYPE_ALL)?;
println!("Number of devices: {}", devices.len());
println!();
for device_id in devices {
println!(
"\tCL_DEVICE_VENDOR: {}",
String::from(get_device_info(device_id, CL_DEVICE_VENDOR)?)
);
let vendor_id: cl_uint = get_device_info(device_id, CL_DEVICE_VENDOR_ID)?.into();
println!(
"\tCL_DEVICE_VENDOR_ID: {:X}, {}",
vendor_id,
vendor_id_text(vendor_id)
);
println!(
"\tCL_DEVICE_NAME: {}",
String::from(get_device_info(device_id, CL_DEVICE_NAME)?)
);
println!(
"\tCL_DEVICE_VERSION: {}",
String::from(get_device_info(device_id, CL_DEVICE_VERSION)?)
);
let device_type: cl_ulong = get_device_info(device_id, CL_DEVICE_TYPE)?.into();
println!(
"\tCL_DEVICE_TYPE: {:X}, {}",
device_type,
device_type_text(device_type)
);
println!(
"\tCL_DEVICE_PROFILE: {}",
String::from(get_device_info(device_id, CL_DEVICE_PROFILE)?)
);
println!(
"\tCL_DEVICE_EXTENSIONS: {}",
String::from(get_device_info(device_id, CL_DEVICE_EXTENSIONS)?)
);
println!(
"\tCL_DEVICE_OPENCL_C_VERSION: {:?}",
String::from(get_device_info(device_id, CL_DEVICE_OPENCL_C_VERSION)?)
);
println!(
"\tCL_DEVICE_BUILT_IN_KERNELS: {}",
String::from(get_device_info(device_id, CL_DEVICE_BUILT_IN_KERNELS)?)
);
println!(
"\tCL_DEVICE_SVM_CAPABILITIES: {:X}",
cl_ulong::from(get_device_info(device_id, CL_DEVICE_SVM_CAPABILITIES)?)
);
println!();
}
}
Ok(())
}