ash/extensions/khr/
display_swapchain.rs
1use crate::prelude::*;
2use crate::vk;
3use crate::RawPtr;
4use crate::{Device, Instance};
5use std::ffi::CStr;
6use std::mem;
7
8#[derive(Clone)]
9pub struct DisplaySwapchain {
10 handle: vk::Device,
11 fp: vk::KhrDisplaySwapchainFn,
12}
13
14impl DisplaySwapchain {
15 pub fn new(instance: &Instance, device: &Device) -> Self {
16 let handle = device.handle();
17 let fp = vk::KhrDisplaySwapchainFn::load(|name| unsafe {
18 mem::transmute(instance.get_device_proc_addr(handle, name.as_ptr()))
19 });
20 Self { handle, fp }
21 }
22
23 pub unsafe fn create_shared_swapchains(
25 &self,
26 create_infos: &[vk::SwapchainCreateInfoKHR],
27 allocation_callbacks: Option<&vk::AllocationCallbacks>,
28 ) -> VkResult<Vec<vk::SwapchainKHR>> {
29 let mut swapchains = Vec::with_capacity(create_infos.len());
30 let err_code = (self.fp.create_shared_swapchains_khr)(
31 self.handle,
32 create_infos.len() as u32,
33 create_infos.as_ptr(),
34 allocation_callbacks.as_raw_ptr(),
35 swapchains.as_mut_ptr(),
36 );
37 swapchains.set_len(create_infos.len());
38 err_code.result_with_success(swapchains)
39 }
40
41 pub const fn name() -> &'static CStr {
42 vk::KhrDisplaySwapchainFn::name()
43 }
44
45 pub fn fp(&self) -> &vk::KhrDisplaySwapchainFn {
46 &self.fp
47 }
48
49 pub fn device(&self) -> vk::Device {
50 self.handle
51 }
52}