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