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