1use baracuda_cuda_sys::types::{CUipcEventHandle, CUipcMemHandle};
16use baracuda_cuda_sys::{driver, CUdeviceptr, CUevent};
17
18use crate::error::{check, Result};
19use crate::event::Event;
20
21pub fn event_get_handle(event: &Event) -> Result<CUipcEventHandle> {
23 let d = driver()?;
24 let cu = d.cu_ipc_get_event_handle()?;
25 let mut h = CUipcEventHandle::default();
26 check(unsafe { cu(&mut h, event.as_raw()) })?;
27 Ok(h)
28}
29
30pub fn event_open_handle(handle: CUipcEventHandle) -> Result<CUevent> {
35 let d = driver()?;
36 let cu = d.cu_ipc_open_event_handle()?;
37 let mut event: CUevent = core::ptr::null_mut();
38 check(unsafe { cu(&mut event, handle) })?;
39 Ok(event)
40}
41
42pub fn mem_get_handle(dptr: CUdeviceptr) -> Result<CUipcMemHandle> {
44 let d = driver()?;
45 let cu = d.cu_ipc_get_mem_handle()?;
46 let mut h = CUipcMemHandle::default();
47 check(unsafe { cu(&mut h, dptr) })?;
48 Ok(h)
49}
50
51pub fn mem_open_handle(handle: CUipcMemHandle, flags: u32) -> Result<CUdeviceptr> {
54 let d = driver()?;
55 let cu = d.cu_ipc_open_mem_handle()?;
56 let mut dptr = CUdeviceptr(0);
57 check(unsafe { cu(&mut dptr, handle, flags) })?;
58 Ok(dptr)
59}
60
61pub fn mem_close_handle(dptr: CUdeviceptr) -> Result<()> {
64 let d = driver()?;
65 let cu = d.cu_ipc_close_mem_handle()?;
66 check(unsafe { cu(dptr) })
67}