pub use opencl_sys::cl_egl::*;
pub use opencl_sys::{
cl_command_queue, cl_context, cl_event, cl_int, cl_mem, cl_mem_flags, cl_uint,
CL_INVALID_VALUE, CL_SUCCESS,
};
#[allow(unused_imports)]
use std::ptr;
#[cfg(feature = "cl_khr_egl_image")]
#[inline]
pub unsafe fn create_from_egl_image(
context: cl_context,
display: CLeglDisplayKHR,
image: CLeglImageKHR,
flags: cl_mem_flags,
properties: *const cl_egl_image_properties_khr,
) -> Result<cl_mem, cl_int> {
let mut status: cl_int = CL_INVALID_VALUE;
let mem = clCreateFromEGLImageKHR(context, display, image, flags, properties, &mut status);
if CL_SUCCESS != status {
Err(status)
} else {
Ok(mem)
}
}
#[cfg(feature = "cl_khr_egl_image")]
#[inline]
pub unsafe fn enqueue_acquire_egl_objects(
command_queue: cl_command_queue,
num_objects: cl_uint,
mem_objects: *const cl_mem,
num_events_in_wait_list: cl_uint,
event_wait_list: *const cl_event,
) -> Result<cl_event, cl_int> {
let mut event: cl_event = ptr::null_mut();
let status: cl_int = clEnqueueAcquireEGLObjectsKHR(
command_queue,
num_objects,
mem_objects,
num_events_in_wait_list,
event_wait_list,
&mut event,
);
if CL_SUCCESS != status {
Err(status)
} else {
Ok(event)
}
}
#[cfg(feature = "cl_khr_egl_image")]
#[inline]
pub unsafe fn enqueue_release_egl_objects(
command_queue: cl_command_queue,
num_objects: cl_uint,
mem_objects: *const cl_mem,
num_events_in_wait_list: cl_uint,
event_wait_list: *const cl_event,
) -> Result<cl_event, cl_int> {
let mut event: cl_event = ptr::null_mut();
let status: cl_int = clEnqueueReleaseEGLObjectsKHR(
command_queue,
num_objects,
mem_objects,
num_events_in_wait_list,
event_wait_list,
&mut event,
);
if CL_SUCCESS != status {
Err(status)
} else {
Ok(event)
}
}
#[cfg(feature = "cl_khr_egl_event")]
#[inline]
pub fn create_event_from_egl_sync_khr(
context: cl_context,
sync: CLeglSyncKHR,
display: CLeglDisplayKHR,
) -> Result<cl_event, cl_int> {
let mut status: cl_int = CL_INVALID_VALUE;
let event: cl_event =
unsafe { clCreateEventFromEGLSyncKHR(context, sync, display, &mut status) };
if CL_SUCCESS != status {
Err(status)
} else {
Ok(event)
}
}