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