pub struct ClContext { /* private fields */ }Expand description
OpenCL cl_context borrowed for an OpenCL sync-target
dispatch. The platform/device parentage is rederived inside the
bridge via clGetContextInfo.
Implementations§
Source§impl ClContext
impl ClContext
Sourcepub unsafe fn try_from_raw(ptr: *mut c_void) -> Result<Self, InvalidHandleError>
pub unsafe fn try_from_raw(ptr: *mut c_void) -> Result<Self, InvalidHandleError>
Wrap a raw cl_context in the typed newtype, rejecting null.
This is a borrow, not a transfer of ownership. The
newtype is Copy and stores nothing but the pointer’s
bit-pattern — no Arc, no keep-alive, no Drop. It never
retains, releases, destroys or closes the underlying
object, so its lifetime stays entirely the caller’s (or
the caller’s own producer’s) to manage.
§Safety
ptrmust be a livecl_context— that exact API kind, not merely a non-null pointer. The only check performed is the null rejection below; the value is otherwise stored verbatim and later handed to the bridge dispatcher, which calls into the owning API through it.- The referenced object must stay alive, and must not be
destroyed, for as long as this value or any
Copyof it exists — in particular for the whole of everycrate::ExternalQueue(or sync-target) borrow that names it. BecauseCopyduplicates the pointer with no refcount bump, destroying the object while a copy survives is a use-after-free the borrow checker cannot see. Callers anchor this with theArc<…>(or equivalent) they already hold on the producer side. - The object must tolerate use from a thread other than the
one that created it, and concurrent use from several:
ClContextisSend + Sync, so a copy may be moved to and shared with the interop worker threads. Where the API forbids that — recording into oneid<MTLCommandBuffer>from two threads, or a GL context that is current on exactly one thread — the caller must confine the value itself; nothing here enforces it. ptrmay be null: that is reported asInvalidHandleError::NullPointerrather than being undefined behaviour, so a null check is not part of the caller’s obligation.
pub fn as_raw(&self) -> *mut c_void
Trait Implementations§
impl Copy for ClContext
impl Send for ClContext
impl Sync for ClContext
Auto Trait Implementations§
impl Freeze for ClContext
impl RefUnwindSafe for ClContext
impl Unpin for ClContext
impl UnsafeUnpin for ClContext
impl UnwindSafe for ClContext
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more