ash/extensions/ext/
acquire_drm_display.rs

1use crate::prelude::*;
2use crate::vk;
3use crate::{Entry, Instance};
4use std::ffi::CStr;
5use 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)]
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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkAcquireDrmDisplayEXT.html>
23    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDrmDisplayEXT.html>
34    #[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}