ash/extensions/ext/
acquire_drm_display.rs1use crate::prelude::*;
2use crate::vk;
3use crate::{Entry, Instance};
4use std::ffi::CStr;
5use std::mem;
6
7#[derive(Clone)]
9pub struct AcquireDrmDisplay {
10 fp: vk::ExtAcquireDrmDisplayFn,
11}
12
13impl AcquireDrmDisplay {
14 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 #[inline]
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 #[inline]
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]
47 pub const fn name() -> &'static CStr {
48 vk::ExtAcquireDrmDisplayFn::name()
49 }
50
51 #[inline]
52 pub fn fp(&self) -> &vk::ExtAcquireDrmDisplayFn {
53 &self.fp
54 }
55}