ocl_stream/traits/
to_ocl_buffer.rs

1/*
2 * opencl stream executor
3 * Copyright (C) 2021 trivernis
4 * See LICENSE for more information
5 */
6
7use ocl::{Buffer, OclPrm, ProQue};
8use std::any::type_name;
9
10pub trait ToOclBuffer<T>
11where
12    T: OclPrm,
13{
14    fn to_ocl_buffer(&self, pro_que: &ProQue) -> ocl::Result<Buffer<T>>;
15}
16
17impl<T> ToOclBuffer<T> for Vec<T>
18where
19    T: OclPrm,
20{
21    fn to_ocl_buffer(&self, pro_que: &ProQue) -> ocl::Result<Buffer<T>> {
22        log::trace!(
23            "Allocating OpenCL Buffer for Vec of type {} with len {}",
24            type_name::<T>(),
25            self.len()
26        );
27        let buffer = pro_que.buffer_builder().len(self.len()).build()?;
28        buffer.write(&self[..]).enq()?;
29
30        Ok(buffer)
31    }
32}