ash/extensions/ext/
headless_surface.rs1use crate::prelude::*;
2use crate::vk;
3use crate::RawPtr;
4use crate::{Entry, Instance};
5use std::ffi::CStr;
6use std::mem;
7
8#[derive(Clone)]
10pub struct HeadlessSurface {
11 handle: vk::Instance,
12 fp: vk::ExtHeadlessSurfaceFn,
13}
14
15impl HeadlessSurface {
16 pub fn new(entry: &Entry, instance: &Instance) -> Self {
17 let handle = instance.handle();
18 let fp = vk::ExtHeadlessSurfaceFn::load(|name| unsafe {
19 mem::transmute(entry.get_instance_proc_addr(handle, name.as_ptr()))
20 });
21 Self { handle, fp }
22 }
23
24 #[inline]
26 pub unsafe fn create_headless_surface(
27 &self,
28 create_info: &vk::HeadlessSurfaceCreateInfoEXT,
29 allocation_callbacks: Option<&vk::AllocationCallbacks>,
30 ) -> VkResult<vk::SurfaceKHR> {
31 let mut surface = mem::zeroed();
32 (self.fp.create_headless_surface_ext)(
33 self.handle,
34 create_info,
35 allocation_callbacks.as_raw_ptr(),
36 &mut surface,
37 )
38 .result_with_success(surface)
39 }
40
41 #[inline]
42 pub const fn name() -> &'static CStr {
43 vk::ExtHeadlessSurfaceFn::name()
44 }
45
46 #[inline]
47 pub fn fp(&self) -> &vk::ExtHeadlessSurfaceFn {
48 &self.fp
49 }
50
51 #[inline]
52 pub fn instance(&self) -> vk::Instance {
53 self.handle
54 }
55}