ash/extensions/khr/
display.rs

1//! <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_KHR_display.html>
2
3use crate::prelude::*;
4use crate::vk;
5use crate::RawPtr;
6use alloc::vec::Vec;
7use core::mem;
8
9impl crate::khr::display::Instance {
10    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceDisplayPropertiesKHR.html>
11    #[inline]
12    pub unsafe fn get_physical_device_display_properties(
13        &self,
14        physical_device: vk::PhysicalDevice,
15    ) -> VkResult<Vec<vk::DisplayPropertiesKHR<'_>>> {
16        read_into_uninitialized_vector(|count, data| {
17            (self.fp.get_physical_device_display_properties_khr)(physical_device, count, data)
18        })
19    }
20
21    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceDisplayPlanePropertiesKHR.html>
22    #[inline]
23    pub unsafe fn get_physical_device_display_plane_properties(
24        &self,
25        physical_device: vk::PhysicalDevice,
26    ) -> VkResult<Vec<vk::DisplayPlanePropertiesKHR>> {
27        read_into_uninitialized_vector(|count, data| {
28            (self.fp.get_physical_device_display_plane_properties_khr)(physical_device, count, data)
29        })
30    }
31
32    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetDisplayPlaneSupportedDisplaysKHR.html>
33    #[inline]
34    pub unsafe fn get_display_plane_supported_displays(
35        &self,
36        physical_device: vk::PhysicalDevice,
37        plane_index: u32,
38    ) -> VkResult<Vec<vk::DisplayKHR>> {
39        read_into_uninitialized_vector(|count, data| {
40            (self.fp.get_display_plane_supported_displays_khr)(
41                physical_device,
42                plane_index,
43                count,
44                data,
45            )
46        })
47    }
48
49    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetDisplayModePropertiesKHR.html>
50    #[inline]
51    pub unsafe fn get_display_mode_properties(
52        &self,
53        physical_device: vk::PhysicalDevice,
54        display: vk::DisplayKHR,
55    ) -> VkResult<Vec<vk::DisplayModePropertiesKHR>> {
56        read_into_uninitialized_vector(|count, data| {
57            (self.fp.get_display_mode_properties_khr)(physical_device, display, count, data)
58        })
59    }
60
61    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkCreateDisplayModeKHR.html>
62    #[inline]
63    pub unsafe fn create_display_mode(
64        &self,
65        physical_device: vk::PhysicalDevice,
66        display: vk::DisplayKHR,
67        create_info: &vk::DisplayModeCreateInfoKHR<'_>,
68        allocation_callbacks: Option<&vk::AllocationCallbacks<'_>>,
69    ) -> VkResult<vk::DisplayModeKHR> {
70        let mut display_mode = mem::MaybeUninit::uninit();
71        (self.fp.create_display_mode_khr)(
72            physical_device,
73            display,
74            create_info,
75            allocation_callbacks.as_raw_ptr(),
76            display_mode.as_mut_ptr(),
77        )
78        .assume_init_on_success(display_mode)
79    }
80
81    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetDisplayPlaneCapabilitiesKHR.html>
82    #[inline]
83    pub unsafe fn get_display_plane_capabilities(
84        &self,
85        physical_device: vk::PhysicalDevice,
86        mode: vk::DisplayModeKHR,
87        plane_index: u32,
88    ) -> VkResult<vk::DisplayPlaneCapabilitiesKHR> {
89        let mut display_plane_capabilities = mem::MaybeUninit::uninit();
90        (self.fp.get_display_plane_capabilities_khr)(
91            physical_device,
92            mode,
93            plane_index,
94            display_plane_capabilities.as_mut_ptr(),
95        )
96        .assume_init_on_success(display_plane_capabilities)
97    }
98
99    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkCreateDisplayPlaneSurfaceKHR.html>
100    #[inline]
101    pub unsafe fn create_display_plane_surface(
102        &self,
103        create_info: &vk::DisplaySurfaceCreateInfoKHR<'_>,
104        allocation_callbacks: Option<&vk::AllocationCallbacks<'_>>,
105    ) -> VkResult<vk::SurfaceKHR> {
106        let mut surface = mem::MaybeUninit::uninit();
107        (self.fp.create_display_plane_surface_khr)(
108            self.handle,
109            create_info,
110            allocation_callbacks.as_raw_ptr(),
111            surface.as_mut_ptr(),
112        )
113        .assume_init_on_success(surface)
114    }
115}