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