1 #![allow(dead_code)]
2 use crate::prelude::*;
3 use crate::version::{EntryV1_0, InstanceV1_0};
4 use crate::vk;
5 use crate::RawPtr;
6 use std::ffi::CStr;
7 use std::mem;
8 
9 #[derive(Clone)]
10 pub struct XcbSurface {
11     handle: vk::Instance,
12     xcb_surface_fn: vk::KhrXcbSurfaceFn,
13 }
14 
15 impl XcbSurface {
new<E: EntryV1_0, I: InstanceV1_0>(entry: &E, instance: &I) -> XcbSurface16     pub fn new<E: EntryV1_0, I: InstanceV1_0>(entry: &E, instance: &I) -> XcbSurface {
17         let surface_fn = vk::KhrXcbSurfaceFn::load(|name| unsafe {
18             mem::transmute(entry.get_instance_proc_addr(instance.handle(), name.as_ptr()))
19         });
20         XcbSurface {
21             handle: instance.handle(),
22             xcb_surface_fn: surface_fn,
23         }
24     }
25 
name() -> &'static CStr26     pub fn name() -> &'static CStr {
27         vk::KhrXcbSurfaceFn::name()
28     }
29 
30     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateXcbSurfaceKHR.html>"]
create_xcb_surface( &self, create_info: &vk::XcbSurfaceCreateInfoKHR, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::SurfaceKHR>31     pub unsafe fn create_xcb_surface(
32         &self,
33         create_info: &vk::XcbSurfaceCreateInfoKHR,
34         allocation_callbacks: Option<&vk::AllocationCallbacks>,
35     ) -> VkResult<vk::SurfaceKHR> {
36         let mut surface = mem::zeroed();
37         self.xcb_surface_fn
38             .create_xcb_surface_khr(
39                 self.handle,
40                 create_info,
41                 allocation_callbacks.as_raw_ptr(),
42                 &mut surface,
43             )
44             .result_with_success(surface)
45     }
46 
47     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceXcbPresentationSupportKHR.html"]
get_physical_device_xcb_presentation_support( &self, physical_device: vk::PhysicalDevice, queue_family_index: u32, connection: &mut vk::xcb_connection_t, visual_id: vk::xcb_visualid_t, ) -> bool48     pub unsafe fn get_physical_device_xcb_presentation_support(
49         &self,
50         physical_device: vk::PhysicalDevice,
51         queue_family_index: u32,
52         connection: &mut vk::xcb_connection_t,
53         visual_id: vk::xcb_visualid_t,
54     ) -> bool {
55         let b = self
56             .xcb_surface_fn
57             .get_physical_device_xcb_presentation_support_khr(
58                 physical_device,
59                 queue_family_index,
60                 connection,
61                 visual_id,
62             );
63 
64         b > 0
65     }
66 
fp(&self) -> &vk::KhrXcbSurfaceFn67     pub fn fp(&self) -> &vk::KhrXcbSurfaceFn {
68         &self.xcb_surface_fn
69     }
70 
instance(&self) -> vk::Instance71     pub fn instance(&self) -> vk::Instance {
72         self.handle
73     }
74 }
75