1 use crate::prelude::*; 2 use crate::vk; 3 use crate::{Entry, Instance}; 4 use std::ffi::CStr; 5 use std::mem; 6 7 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_acquire_drm_display.html> 8 #[derive(Clone)] 9 pub struct AcquireDrmDisplay { 10 fp: vk::ExtAcquireDrmDisplayFn, 11 } 12 13 impl AcquireDrmDisplay { new(entry: &Entry, instance: &Instance) -> Self14 pub fn new(entry: &Entry, instance: &Instance) -> Self { 15 let handle = instance.handle(); 16 let fp = vk::ExtAcquireDrmDisplayFn::load(|name| unsafe { 17 mem::transmute(entry.get_instance_proc_addr(handle, name.as_ptr())) 18 }); 19 Self { fp } 20 } 21 22 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkAcquireDrmDisplayEXT.html> 23 #[inline] acquire_drm_display( &self, physical_device: vk::PhysicalDevice, drm_fd: i32, display: vk::DisplayKHR, ) -> VkResult<()>24 pub unsafe fn acquire_drm_display( 25 &self, 26 physical_device: vk::PhysicalDevice, 27 drm_fd: i32, 28 display: vk::DisplayKHR, 29 ) -> VkResult<()> { 30 (self.fp.acquire_drm_display_ext)(physical_device, drm_fd, display).result() 31 } 32 33 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDrmDisplayEXT.html> 34 #[inline] get_drm_display( &self, physical_device: vk::PhysicalDevice, drm_fd: i32, connector_id: u32, ) -> VkResult<vk::DisplayKHR>35 pub unsafe fn get_drm_display( 36 &self, 37 physical_device: vk::PhysicalDevice, 38 drm_fd: i32, 39 connector_id: u32, 40 ) -> VkResult<vk::DisplayKHR> { 41 let mut display = mem::MaybeUninit::uninit(); 42 (self.fp.get_drm_display_ext)(physical_device, drm_fd, connector_id, display.as_mut_ptr()) 43 .assume_init_on_success(display) 44 } 45 46 #[inline] name() -> &'static CStr47 pub const fn name() -> &'static CStr { 48 vk::ExtAcquireDrmDisplayFn::name() 49 } 50 51 #[inline] fp(&self) -> &vk::ExtAcquireDrmDisplayFn52 pub fn fp(&self) -> &vk::ExtAcquireDrmDisplayFn { 53 &self.fp 54 } 55 } 56