1 use crate::prelude::*; 2 use crate::vk; 3 use crate::{Entry, Instance}; 4 use std::ffi::CStr; 5 use std::mem; 6 7 #[derive(Clone)] 8 pub struct ToolingInfo { 9 fp: vk::ExtToolingInfoFn, 10 } 11 12 impl ToolingInfo { new(entry: &Entry, instance: &Instance) -> Self13 pub fn new(entry: &Entry, instance: &Instance) -> Self { 14 let fp = vk::ExtToolingInfoFn::load(|name| unsafe { 15 mem::transmute(entry.get_instance_proc_addr(instance.handle(), name.as_ptr())) 16 }); 17 Self { fp } 18 } 19 20 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceToolPropertiesEXT.html> 21 #[inline] get_physical_device_tool_properties( &self, physical_device: vk::PhysicalDevice, ) -> VkResult<Vec<vk::PhysicalDeviceToolPropertiesEXT>>22 pub unsafe fn get_physical_device_tool_properties( 23 &self, 24 physical_device: vk::PhysicalDevice, 25 ) -> VkResult<Vec<vk::PhysicalDeviceToolPropertiesEXT>> { 26 read_into_defaulted_vector(|count, data| { 27 (self.fp.get_physical_device_tool_properties_ext)(physical_device, count, data) 28 }) 29 } 30 31 #[inline] name() -> &'static CStr32 pub const fn name() -> &'static CStr { 33 vk::ExtToolingInfoFn::name() 34 } 35 36 #[inline] fp(&self) -> &vk::ExtToolingInfoFn37 pub fn fp(&self) -> &vk::ExtToolingInfoFn { 38 &self.fp 39 } 40 } 41