pub struct Entry {
static_fn: StaticFn,
entry_fn_1_0: EntryFnV1_0,
entry_fn_1_1: EntryFnV1_1,
_lib_guard: Option<Arc<Library>>,
}
Expand description
Holds the Vulkan functions independent of a particular instance
Fields§
§static_fn: StaticFn
§entry_fn_1_0: EntryFnV1_0
§entry_fn_1_1: EntryFnV1_1
§_lib_guard: Option<Arc<Library>>
Implementations§
source§impl Entry
impl Entry
Vulkan core 1.0
sourcepub unsafe fn load() -> Result<Self, LoadingError>
pub unsafe fn load() -> Result<Self, LoadingError>
Load default Vulkan library for the current platform
Prefer this over [linked()
][Self::linked()] when your application can gracefully handle
environments that lack Vulkan support, and when the build environment might not have Vulkan
development packages installed (e.g. the Vulkan SDK, or Ubuntu’s libvulkan-dev
).
§Safety
dlopen
ing native libraries is inherently unsafe. The safety guidelines
for Library::new()
and Library::get()
apply here.
No Vulkan functions loaded directly or indirectly from this Entry
may be called after it is dropped.
§Example
use ash::{vk, Entry};
let entry = unsafe { Entry::load()? };
let app_info = vk::ApplicationInfo {
api_version: vk::make_api_version(0, 1, 0, 0),
..Default::default()
};
let create_info = vk::InstanceCreateInfo {
p_application_info: &app_info,
..Default::default()
};
let instance = unsafe { entry.create_instance(&create_info, None)? };
sourcepub unsafe fn load_from(path: impl AsRef<OsStr>) -> Result<Self, LoadingError>
pub unsafe fn load_from(path: impl AsRef<OsStr>) -> Result<Self, LoadingError>
Load Vulkan library at path
§Safety
dlopen
ing native libraries is inherently unsafe. The safety guidelines
for Library::new()
and Library::get()
apply here.
No Vulkan functions loaded directly or indirectly from this Entry
may be called after it is dropped.
sourcepub unsafe fn from_static_fn(static_fn: StaticFn) -> Self
pub unsafe fn from_static_fn(static_fn: StaticFn) -> Self
Load entry points based on an already-loaded crate::StaticFn
§Safety
static_fn
must contain valid function pointers that comply with the semantics specified
by Vulkan 1.0, which must remain valid for at least the lifetime of the returned Entry
.
pub fn from_parts_1_1( static_fn: StaticFn, entry_fn_1_0: EntryFnV1_0, entry_fn_1_1: EntryFnV1_1, ) -> Self
pub fn fp_v1_0(&self) -> &EntryFnV1_0
pub fn static_fn(&self) -> &StaticFn
sourcepub unsafe fn try_enumerate_instance_version(&self) -> VkResult<Option<u32>>
pub unsafe fn try_enumerate_instance_version(&self) -> VkResult<Option<u32>>
https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkEnumerateInstanceVersion.html
§Example
let entry = Entry::linked();
match unsafe { entry.try_enumerate_instance_version() }? {
// Vulkan 1.1+
Some(version) => {
let major = vk::version_major(version);
let minor = vk::version_minor(version);
let patch = vk::version_patch(version);
},
// Vulkan 1.0
None => {},
}
sourcepub unsafe fn create_instance(
&self,
create_info: &InstanceCreateInfo<'_>,
allocation_callbacks: Option<&AllocationCallbacks<'_>>,
) -> VkResult<Instance>
pub unsafe fn create_instance( &self, create_info: &InstanceCreateInfo<'_>, allocation_callbacks: Option<&AllocationCallbacks<'_>>, ) -> VkResult<Instance>
https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkCreateInstance.html
§Safety
The resulting Instance
and any function-pointer objects (e.g. Device
and extensions like khr::swapchain::Device
) loaded from it may not be used after
this Entry
object is dropped, unless it was crated using [Entry::linked()
] or
Entry::from_parts_1_1()
.
Instance
does not implement drop semantics and can only be destroyed via
destroy_instance()
.
sourcepub unsafe fn enumerate_instance_layer_properties(
&self,
) -> VkResult<Vec<LayerProperties>>
pub unsafe fn enumerate_instance_layer_properties( &self, ) -> VkResult<Vec<LayerProperties>>
sourcepub unsafe fn enumerate_instance_extension_properties(
&self,
layer_name: Option<&CStr>,
) -> VkResult<Vec<ExtensionProperties>>
pub unsafe fn enumerate_instance_extension_properties( &self, layer_name: Option<&CStr>, ) -> VkResult<Vec<ExtensionProperties>>
sourcepub unsafe fn get_instance_proc_addr(
&self,
instance: Instance,
p_name: *const c_char,
) -> PFN_vkVoidFunction
pub unsafe fn get_instance_proc_addr( &self, instance: Instance, p_name: *const c_char, ) -> PFN_vkVoidFunction
source§impl Entry
impl Entry
Vulkan core 1.1
pub fn fp_v1_1(&self) -> &EntryFnV1_1
sourcepub unsafe fn enumerate_instance_version(&self) -> VkResult<u32>
👎Deprecated: This function is unavailable and therefore panics on Vulkan 1.0, please use try_enumerate_instance_version()
instead
pub unsafe fn enumerate_instance_version(&self) -> VkResult<u32>
try_enumerate_instance_version()
insteadTrait Implementations§
Auto Trait Implementations§
impl Freeze for Entry
impl RefUnwindSafe for Entry
impl Send for Entry
impl Sync for Entry
impl Unpin for Entry
impl UnwindSafe for Entry
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
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)