1 use crate::prelude::*; 2 use crate::vk; 3 use crate::{Entry, Instance}; 4 use std::ffi::CStr; 5 use std::mem; 6 7 #[derive(Clone)] 8 pub struct GetSurfaceCapabilities2 { 9 fp: vk::KhrGetSurfaceCapabilities2Fn, 10 } 11 12 impl GetSurfaceCapabilities2 { new(entry: &Entry, instance: &Instance) -> Self13 pub fn new(entry: &Entry, instance: &Instance) -> Self { 14 let fp = vk::KhrGetSurfaceCapabilities2Fn::load(|name| unsafe { 15 mem::transmute(entry.get_instance_proc_addr(instance.handle(), name.as_ptr())) 16 }); 17 Self { fp } 18 } 19 20 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceSurfaceCapabilities2KHR.html> 21 #[inline] get_physical_device_surface_capabilities2( &self, physical_device: vk::PhysicalDevice, surface_info: &vk::PhysicalDeviceSurfaceInfo2KHR, ) -> VkResult<vk::SurfaceCapabilities2KHR>22 pub unsafe fn get_physical_device_surface_capabilities2( 23 &self, 24 physical_device: vk::PhysicalDevice, 25 surface_info: &vk::PhysicalDeviceSurfaceInfo2KHR, 26 ) -> VkResult<vk::SurfaceCapabilities2KHR> { 27 let mut surface_capabilities = Default::default(); 28 (self.fp.get_physical_device_surface_capabilities2_khr)( 29 physical_device, 30 surface_info, 31 &mut surface_capabilities, 32 ) 33 .result_with_success(surface_capabilities) 34 } 35 36 /// Retrieve the number of elements to pass to [`get_physical_device_surface_formats2()`][Self::get_physical_device_surface_formats2()] 37 #[inline] get_physical_device_surface_formats2_len( &self, physical_device: vk::PhysicalDevice, surface_info: &vk::PhysicalDeviceSurfaceInfo2KHR, ) -> VkResult<usize>38 pub unsafe fn get_physical_device_surface_formats2_len( 39 &self, 40 physical_device: vk::PhysicalDevice, 41 surface_info: &vk::PhysicalDeviceSurfaceInfo2KHR, 42 ) -> VkResult<usize> { 43 let mut count = 0; 44 let err_code = (self.fp.get_physical_device_surface_formats2_khr)( 45 physical_device, 46 surface_info, 47 &mut count, 48 std::ptr::null_mut(), 49 ); 50 err_code.result_with_success(count as usize) 51 } 52 53 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceSurfaceFormats2KHR.html> 54 /// 55 /// Call [`get_physical_device_surface_formats2_len()`][Self::get_physical_device_surface_formats2_len()] to query the number of elements to pass to `out`. 56 /// Be sure to [`Default::default()`]-initialize these elements and optionally set their `p_next` pointer. 57 #[inline] get_physical_device_surface_formats2( &self, physical_device: vk::PhysicalDevice, surface_info: &vk::PhysicalDeviceSurfaceInfo2KHR, out: &mut [vk::SurfaceFormat2KHR], ) -> VkResult<()>58 pub unsafe fn get_physical_device_surface_formats2( 59 &self, 60 physical_device: vk::PhysicalDevice, 61 surface_info: &vk::PhysicalDeviceSurfaceInfo2KHR, 62 out: &mut [vk::SurfaceFormat2KHR], 63 ) -> VkResult<()> { 64 let mut count = out.len() as u32; 65 let err_code = (self.fp.get_physical_device_surface_formats2_khr)( 66 physical_device, 67 surface_info, 68 &mut count, 69 out.as_mut_ptr(), 70 ); 71 assert_eq!(count as usize, out.len()); 72 err_code.result() 73 } 74 75 #[inline] name() -> &'static CStr76 pub const fn name() -> &'static CStr { 77 vk::KhrGetSurfaceCapabilities2Fn::name() 78 } 79 80 #[inline] fp(&self) -> &vk::KhrGetSurfaceCapabilities2Fn81 pub fn fp(&self) -> &vk::KhrGetSurfaceCapabilities2Fn { 82 &self.fp 83 } 84 } 85