diff --git a/src/command_queue.rs b/src/command_queue.rs index 1993189..0f11e17 100644 --- a/src/command_queue.rs +++ b/src/command_queue.rs @@ -68,13 +68,18 @@ unsafe impl Send for CommandQueue {} unsafe impl Sync for CommandQueue {} impl CommandQueue { - const fn new(queue: cl_command_queue, max_work_item_dimensions: cl_uint) -> Self { + pub const fn new(queue: cl_command_queue, max_work_item_dimensions: cl_uint) -> Self { Self { queue, max_work_item_dimensions, } } + pub fn wrap_cl_command_queue(queue: cl_command_queue, device: &Device) -> Result { + let max_work_item_dimensions = device.max_work_item_dimensions()?; + Ok(Self::new(queue, max_work_item_dimensions)) + } + /// Get the underlying OpenCL cl_command_queue. pub const fn get(&self) -> cl_command_queue { self.queue diff --git a/src/context.rs b/src/context.rs index 7bb9fa2..5e50b90 100644 --- a/src/context.rs +++ b/src/context.rs @@ -112,13 +112,17 @@ unsafe impl Send for Context {} unsafe impl Sync for Context {} impl Context { - fn new(context: cl_context, devices: &[cl_device_id]) -> Self { + pub fn new(context: cl_context, devices: &[cl_device_id]) -> Self { Self { context, devices: devices.to_vec(), } } + pub fn wrap_cl_command_queue(context: cl_context, device: &Device) -> Self { + Self::new(context, &[device.id()]) + } + /// Get the underlying OpenCL cl_context. pub const fn get(&self) -> cl_context { self.context