pub struct VkInstance { /* private fields */ }Expand description
VkInstance borrowed for a Vulkan sync-target dispatch.
Required even for device-level work because ash resolves device
fn pointers through vkGetDeviceProcAddr, which is itself an
instance-level command (vkGetInstanceProcAddr(NULL, ...)
returns NULL).
Implementations§
Source§impl VkInstance
impl VkInstance
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 VkInstance 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 liveVkInstance— 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:
VkInstanceisSend + 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 VkInstance
impl Clone for VkInstance
impl Copy for VkInstance
Source§impl Debug for VkInstance
impl Debug for VkInstance
impl Send for VkInstance
impl Sync for VkInstance
Auto Trait Implementations§
impl Freeze for VkInstance
impl RefUnwindSafe for VkInstance
impl Unpin for VkInstance
impl UnsafeUnpin for VkInstance
impl UnwindSafe for VkInstance
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