pub struct D3D11Device { /* private fields */ }Expand description
ID3D11Device* borrowed for a D3D11 sync-target dispatch.
Caller has set D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX or the
multithread-protect flag — that’s the cross-thread contract.
Implementations§
Source§impl D3D11Device
impl D3D11Device
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 ID3D11Device* 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 liveID3D11Device*— 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:
D3D11DeviceisSend + 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§
Source§impl Clone for D3D11Device
impl Clone for D3D11Device
impl Copy for D3D11Device
Source§impl Debug for D3D11Device
impl Debug for D3D11Device
impl Send for D3D11Device
impl Sync for D3D11Device
Auto Trait Implementations§
impl Freeze for D3D11Device
impl RefUnwindSafe for D3D11Device
impl Unpin for D3D11Device
impl UnsafeUnpin for D3D11Device
impl UnwindSafe for D3D11Device
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