ash/extensions/khr/
get_surface_capabilities2.rs1use crate::prelude::*;
2use crate::vk;
3use crate::{Entry, Instance};
4use std::ffi::CStr;
5use std::mem;
6
7#[derive(Clone)]
8pub struct GetSurfaceCapabilities2 {
9 fp: vk::KhrGetSurfaceCapabilities2Fn,
10}
11
12impl GetSurfaceCapabilities2 {
13 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 #[inline]
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 #[inline]
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 #[inline]
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]
76 pub const fn name() -> &'static CStr {
77 vk::KhrGetSurfaceCapabilities2Fn::name()
78 }
79
80 #[inline]
81 pub fn fp(&self) -> &vk::KhrGetSurfaceCapabilities2Fn {
82 &self.fp
83 }
84}