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