ash/extensions/ext/
full_screen_exclusive.rs
1use crate::prelude::*;
2use crate::vk;
3use crate::{Device, Instance};
4use std::ffi::CStr;
5use std::mem;
6
7#[derive(Clone)]
8pub struct FullScreenExclusive {
9 handle: vk::Device,
10 fp: vk::ExtFullScreenExclusiveFn,
11}
12
13impl FullScreenExclusive {
14 pub fn new(instance: &Instance, device: &Device) -> Self {
15 let handle = device.handle();
16 let fp = vk::ExtFullScreenExclusiveFn::load(|name| unsafe {
17 mem::transmute(instance.get_device_proc_addr(handle, name.as_ptr()))
18 });
19 Self { handle, fp }
20 }
21
22 pub unsafe fn acquire_full_screen_exclusive_mode(
24 &self,
25 swapchain: vk::SwapchainKHR,
26 ) -> VkResult<()> {
27 (self.fp.acquire_full_screen_exclusive_mode_ext)(self.handle, swapchain).result()
28 }
29
30 pub unsafe fn get_physical_device_surface_present_modes2(
32 &self,
33 physical_device: vk::PhysicalDevice,
34 surface_info: &vk::PhysicalDeviceSurfaceInfo2KHR,
35 ) -> VkResult<Vec<vk::PresentModeKHR>> {
36 read_into_uninitialized_vector(|count, data| {
37 (self.fp.get_physical_device_surface_present_modes2_ext)(
38 physical_device,
39 surface_info,
40 count,
41 data,
42 )
43 })
44 }
45
46 pub unsafe fn release_full_screen_exclusive_mode(
48 &self,
49 swapchain: vk::SwapchainKHR,
50 ) -> VkResult<()> {
51 (self.fp.release_full_screen_exclusive_mode_ext)(self.handle, swapchain).result()
52 }
53
54 pub unsafe fn get_device_group_surface_present_modes2(
56 &self,
57 surface_info: &vk::PhysicalDeviceSurfaceInfo2KHR,
58 ) -> VkResult<vk::DeviceGroupPresentModeFlagsKHR> {
59 let mut present_modes = mem::zeroed();
60 (self.fp.get_device_group_surface_present_modes2_ext)(
61 self.handle,
62 surface_info,
63 &mut present_modes,
64 )
65 .result_with_success(present_modes)
66 }
67
68 pub const fn name() -> &'static CStr {
69 vk::ExtFullScreenExclusiveFn::name()
70 }
71
72 pub fn fp(&self) -> &vk::ExtFullScreenExclusiveFn {
73 &self.fp
74 }
75
76 pub fn device(&self) -> vk::Device {
77 self.handle
78 }
79}