ash/extensions/khr/
display.rs
1use 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 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.get_physical_device_display_properties_khr)(physical_device, count, data)
30 })
31 }
32
33 pub unsafe fn get_physical_device_display_plane_properties(
35 &self,
36 physical_device: vk::PhysicalDevice,
37 ) -> VkResult<Vec<vk::DisplayPlanePropertiesKHR>> {
38 read_into_uninitialized_vector(|count, data| {
39 (self.fp.get_physical_device_display_plane_properties_khr)(physical_device, count, data)
40 })
41 }
42
43 pub unsafe fn get_display_plane_supported_displays(
45 &self,
46 physical_device: vk::PhysicalDevice,
47 plane_index: u32,
48 ) -> VkResult<Vec<vk::DisplayKHR>> {
49 read_into_uninitialized_vector(|count, data| {
50 (self.fp.get_display_plane_supported_displays_khr)(
51 physical_device,
52 plane_index,
53 count,
54 data,
55 )
56 })
57 }
58
59 pub unsafe fn get_display_mode_properties(
61 &self,
62 physical_device: vk::PhysicalDevice,
63 display: vk::DisplayKHR,
64 ) -> VkResult<Vec<vk::DisplayModePropertiesKHR>> {
65 read_into_uninitialized_vector(|count, data| {
66 (self.fp.get_display_mode_properties_khr)(physical_device, display, count, data)
67 })
68 }
69
70 pub unsafe fn create_display_mode(
72 &self,
73 physical_device: vk::PhysicalDevice,
74 display: vk::DisplayKHR,
75 create_info: &vk::DisplayModeCreateInfoKHR,
76 allocation_callbacks: Option<&vk::AllocationCallbacks>,
77 ) -> VkResult<vk::DisplayModeKHR> {
78 let mut display_mode = mem::MaybeUninit::zeroed();
79 (self.fp.create_display_mode_khr)(
80 physical_device,
81 display,
82 create_info,
83 allocation_callbacks.as_raw_ptr(),
84 display_mode.as_mut_ptr(),
85 )
86 .result_with_success(display_mode.assume_init())
87 }
88
89 pub unsafe fn get_display_plane_capabilities(
91 &self,
92 physical_device: vk::PhysicalDevice,
93 mode: vk::DisplayModeKHR,
94 plane_index: u32,
95 ) -> VkResult<vk::DisplayPlaneCapabilitiesKHR> {
96 let mut display_plane_capabilities = mem::MaybeUninit::zeroed();
97 (self.fp.get_display_plane_capabilities_khr)(
98 physical_device,
99 mode,
100 plane_index,
101 display_plane_capabilities.as_mut_ptr(),
102 )
103 .result_with_success(display_plane_capabilities.assume_init())
104 }
105
106 pub unsafe fn create_display_plane_surface(
108 &self,
109 create_info: &vk::DisplaySurfaceCreateInfoKHR,
110 allocation_callbacks: Option<&vk::AllocationCallbacks>,
111 ) -> VkResult<vk::SurfaceKHR> {
112 let mut surface = mem::MaybeUninit::zeroed();
113 (self.fp.create_display_plane_surface_khr)(
114 self.handle,
115 create_info,
116 allocation_callbacks.as_raw_ptr(),
117 surface.as_mut_ptr(),
118 )
119 .result_with_success(surface.assume_init())
120 }
121
122 pub const fn name() -> &'static CStr {
123 vk::KhrDisplayFn::name()
124 }
125
126 pub fn fp(&self) -> &vk::KhrDisplayFn {
127 &self.fp
128 }
129
130 pub fn instance(&self) -> vk::Instance {
131 self.handle
132 }
133}