• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use crate::prelude::*;
2 use crate::vk;
3 use crate::RawPtr;
4 use crate::{Entry, Instance};
5 use std::ffi::CStr;
6 use std::mem;
7 
8 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_headless_surface.html>
9 #[derive(Clone)]
10 pub struct HeadlessSurface {
11     handle: vk::Instance,
12     fp: vk::ExtHeadlessSurfaceFn,
13 }
14 
15 impl HeadlessSurface {
new(entry: &Entry, instance: &Instance) -> Self16     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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateHeadlessSurfaceEXT.html>
25     #[inline]
create_headless_surface( &self, create_info: &vk::HeadlessSurfaceCreateInfoEXT, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::SurfaceKHR>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]
name() -> &'static CStr42     pub const fn name() -> &'static CStr {
43         vk::ExtHeadlessSurfaceFn::name()
44     }
45 
46     #[inline]
fp(&self) -> &vk::ExtHeadlessSurfaceFn47     pub fn fp(&self) -> &vk::ExtHeadlessSurfaceFn {
48         &self.fp
49     }
50 
51     #[inline]
instance(&self) -> vk::Instance52     pub fn instance(&self) -> vk::Instance {
53         self.handle
54     }
55 }
56