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