Skip to main content

jay_ash/extensions/khr/
get_surface_capabilities2.rs

1//! <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_KHR_get_surface_capabilities2.html>
2
3use crate::prelude::*;
4use crate::vk;
5use core::mem;
6use core::ptr;
7
8impl crate::khr::get_surface_capabilities2::Instance {
9    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceSurfaceCapabilities2KHR.html>
10    #[inline]
11    pub unsafe fn get_physical_device_surface_capabilities2(
12        &self,
13        physical_device: vk::PhysicalDevice,
14        surface_info: &vk::PhysicalDeviceSurfaceInfo2KHR<'_>,
15        surface_capabilities: &mut vk::SurfaceCapabilities2KHR<'_>,
16    ) -> VkResult<()> {
17        unsafe {
18            (self.fp.get_physical_device_surface_capabilities2_khr)(
19                physical_device,
20                surface_info,
21                surface_capabilities,
22            )
23            .result()
24        }
25    }
26
27    /// Retrieve the number of elements to pass to [`get_physical_device_surface_formats2()`][Self::get_physical_device_surface_formats2()]
28    #[inline]
29    pub unsafe fn get_physical_device_surface_formats2_len(
30        &self,
31        physical_device: vk::PhysicalDevice,
32        surface_info: &vk::PhysicalDeviceSurfaceInfo2KHR<'_>,
33    ) -> VkResult<usize> {
34        unsafe {
35            let mut count = mem::MaybeUninit::uninit();
36            let err_code = (self.fp.get_physical_device_surface_formats2_khr)(
37                physical_device,
38                surface_info,
39                count.as_mut_ptr(),
40                ptr::null_mut(),
41            );
42            err_code.assume_init_on_success(count).map(|c| c as usize)
43        }
44    }
45
46    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceSurfaceFormats2KHR.html>
47    ///
48    /// Call [`get_physical_device_surface_formats2_len()`][Self::get_physical_device_surface_formats2_len()] to query the number of elements to pass to `out`.
49    /// Be sure to [`Default::default()`]-initialize these elements and optionally set their `p_next` pointer.
50    #[inline]
51    pub unsafe fn get_physical_device_surface_formats2(
52        &self,
53        physical_device: vk::PhysicalDevice,
54        surface_info: &vk::PhysicalDeviceSurfaceInfo2KHR<'_>,
55        out: &mut [vk::SurfaceFormat2KHR<'_>],
56    ) -> VkResult<()> {
57        unsafe {
58            let mut count = out.len() as u32;
59            let err_code = (self.fp.get_physical_device_surface_formats2_khr)(
60                physical_device,
61                surface_info,
62                &mut count,
63                out.as_mut_ptr(),
64            );
65            assert_eq!(count as usize, out.len());
66            err_code.result()
67        }
68    }
69}