1 use crate::prelude::*;
2 use crate::vk;
3 use crate::RawPtr;
4 use crate::{Entry, Instance};
5 use std::ffi::CStr;
6 use std::mem;
7 
8 #[derive(Clone)]
9 pub struct Display {
10     handle: vk::Instance,
11     fp: vk::KhrDisplayFn,
12 }
13 
14 impl Display {
new(entry: &Entry, instance: &Instance) -> Self15     pub fn new(entry: &Entry, instance: &Instance) -> Self {
16         let handle = instance.handle();
17         let fp = vk::KhrDisplayFn::load(|name| unsafe {
18             mem::transmute(entry.get_instance_proc_addr(handle, name.as_ptr()))
19         });
20         Self { handle, fp }
21     }
22 
23     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceDisplayPropertiesKHR.html>"]
get_physical_device_display_properties( &self, physical_device: vk::PhysicalDevice, ) -> VkResult<Vec<vk::DisplayPropertiesKHR>>24     pub unsafe fn get_physical_device_display_properties(
25         &self,
26         physical_device: vk::PhysicalDevice,
27     ) -> VkResult<Vec<vk::DisplayPropertiesKHR>> {
28         read_into_uninitialized_vector(|count, data| {
29             self.fp
30                 .get_physical_device_display_properties_khr(physical_device, count, data)
31         })
32     }
33 
34     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceDisplayPlanePropertiesKHR.html>"]
get_physical_device_display_plane_properties( &self, physical_device: vk::PhysicalDevice, ) -> VkResult<Vec<vk::DisplayPlanePropertiesKHR>>35     pub unsafe fn get_physical_device_display_plane_properties(
36         &self,
37         physical_device: vk::PhysicalDevice,
38     ) -> VkResult<Vec<vk::DisplayPlanePropertiesKHR>> {
39         read_into_uninitialized_vector(|count, data| {
40             self.fp
41                 .get_physical_device_display_plane_properties_khr(physical_device, count, data)
42         })
43     }
44 
45     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetDisplayPlaneSupportedDisplaysKHR.html>"]
get_display_plane_supported_displays( &self, physical_device: vk::PhysicalDevice, plane_index: u32, ) -> VkResult<Vec<vk::DisplayKHR>>46     pub unsafe fn get_display_plane_supported_displays(
47         &self,
48         physical_device: vk::PhysicalDevice,
49         plane_index: u32,
50     ) -> VkResult<Vec<vk::DisplayKHR>> {
51         read_into_uninitialized_vector(|count, data| {
52             self.fp.get_display_plane_supported_displays_khr(
53                 physical_device,
54                 plane_index,
55                 count,
56                 data,
57             )
58         })
59     }
60 
61     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetDisplayModePropertiesKHR.html>"]
get_display_mode_properties( &self, physical_device: vk::PhysicalDevice, display: vk::DisplayKHR, ) -> VkResult<Vec<vk::DisplayModePropertiesKHR>>62     pub unsafe fn get_display_mode_properties(
63         &self,
64         physical_device: vk::PhysicalDevice,
65         display: vk::DisplayKHR,
66     ) -> VkResult<Vec<vk::DisplayModePropertiesKHR>> {
67         read_into_uninitialized_vector(|count, data| {
68             self.fp
69                 .get_display_mode_properties_khr(physical_device, display, count, data)
70         })
71     }
72 
73     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateDisplayModeKHR.html>"]
create_display_mode( &self, physical_device: vk::PhysicalDevice, display: vk::DisplayKHR, create_info: &vk::DisplayModeCreateInfoKHR, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::DisplayModeKHR>74     pub unsafe fn create_display_mode(
75         &self,
76         physical_device: vk::PhysicalDevice,
77         display: vk::DisplayKHR,
78         create_info: &vk::DisplayModeCreateInfoKHR,
79         allocation_callbacks: Option<&vk::AllocationCallbacks>,
80     ) -> VkResult<vk::DisplayModeKHR> {
81         let mut display_mode = mem::MaybeUninit::zeroed();
82         self.fp
83             .create_display_mode_khr(
84                 physical_device,
85                 display,
86                 create_info,
87                 allocation_callbacks.as_raw_ptr(),
88                 display_mode.as_mut_ptr(),
89             )
90             .result_with_success(display_mode.assume_init())
91     }
92 
93     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetDisplayPlaneCapabilitiesKHR.html>"]
get_display_plane_capabilities( &self, physical_device: vk::PhysicalDevice, mode: vk::DisplayModeKHR, plane_index: u32, ) -> VkResult<vk::DisplayPlaneCapabilitiesKHR>94     pub unsafe fn get_display_plane_capabilities(
95         &self,
96         physical_device: vk::PhysicalDevice,
97         mode: vk::DisplayModeKHR,
98         plane_index: u32,
99     ) -> VkResult<vk::DisplayPlaneCapabilitiesKHR> {
100         let mut display_plane_capabilities = mem::MaybeUninit::zeroed();
101         self.fp
102             .get_display_plane_capabilities_khr(
103                 physical_device,
104                 mode,
105                 plane_index,
106                 display_plane_capabilities.as_mut_ptr(),
107             )
108             .result_with_success(display_plane_capabilities.assume_init())
109     }
110 
111     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateDisplayPlaneSurfaceKHR.html>"]
create_display_plane_surface( &self, create_info: &vk::DisplaySurfaceCreateInfoKHR, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::SurfaceKHR>112     pub unsafe fn create_display_plane_surface(
113         &self,
114         create_info: &vk::DisplaySurfaceCreateInfoKHR,
115         allocation_callbacks: Option<&vk::AllocationCallbacks>,
116     ) -> VkResult<vk::SurfaceKHR> {
117         let mut surface = mem::MaybeUninit::zeroed();
118         self.fp
119             .create_display_plane_surface_khr(
120                 self.handle,
121                 create_info,
122                 allocation_callbacks.as_raw_ptr(),
123                 surface.as_mut_ptr(),
124             )
125             .result_with_success(surface.assume_init())
126     }
127 
name() -> &'static CStr128     pub fn name() -> &'static CStr {
129         vk::KhrDisplayFn::name()
130     }
131 
fp(&self) -> &vk::KhrDisplayFn132     pub fn fp(&self) -> &vk::KhrDisplayFn {
133         &self.fp
134     }
135 
instance(&self) -> vk::Instance136     pub fn instance(&self) -> vk::Instance {
137         self.handle
138     }
139 }
140