add first part of xcb swapchain creation; memory bug somewhere
[kazan.git] / vulkan-driver / src / lib.rs
1 // SPDX-License-Identifier: LGPL-2.1-or-later
2 // Copyright 2018 Jacob Lifshay
3 #[macro_use]
4 extern crate enum_map;
5 #[cfg(unix)]
6 extern crate errno;
7 #[cfg(unix)]
8 extern crate libc;
9 extern crate sys_info;
10 extern crate uuid;
11 #[cfg(unix)]
12 extern crate xcb;
13 mod api;
14 mod api_impl;
15 mod handle;
16 mod image;
17 #[cfg(unix)]
18 mod shm;
19 mod swapchain;
20 #[cfg(unix)]
21 mod xcb_swapchain;
22 use std::ffi::CStr;
23 use std::os::raw::c_char;
24
25 mod constants {
26 pub const KAZAN_DEVICE_NAME: &'static str = "Kazan Software Renderer";
27 pub const MIN_MEMORY_MAP_ALIGNMENT: usize = 128; // must be at least 64 and a power of 2 according to Vulkan spec
28 pub const QUEUE_FAMILY_COUNT: u32 = 1;
29 pub const QUEUE_COUNTS: [u32; QUEUE_FAMILY_COUNT as usize] = [1];
30 pub const TOTAL_QUEUE_COUNT: usize = 1;
31 }
32
33 #[no_mangle]
34 pub unsafe extern "system" fn vk_icdGetInstanceProcAddr(
35 instance: api::VkInstance,
36 name: *const c_char,
37 ) -> api::PFN_vkVoidFunction {
38 api_impl::vkGetInstanceProcAddr(instance, name)
39 }
40
41 // note that if the following fails, then you may be encountering bindgen issue #1402
42 // https://github.com/rust-lang-nursery/rust-bindgen/issues/1402
43 #[allow(dead_code)]
44 const ASSERT_TYPE_VK_ICD_GET_INSTANCE_PROC_ADDR: api::PFN_vkGetInstanceProcAddr =
45 Some(vk_icdGetInstanceProcAddr);
46
47 const ICD_VERSION: u32 = 5;
48
49 #[no_mangle]
50 pub unsafe extern "system" fn vk_icdNegotiateLoaderICDInterfaceVersion(
51 supported_version: *mut u32,
52 ) -> api::VkResult {
53 if *supported_version > ICD_VERSION {
54 *supported_version = ICD_VERSION;
55 }
56 api::VK_SUCCESS
57 }
58
59 #[allow(dead_code)]
60 const ASSERT_TYPE_VK_ICD_NEGOTIATE_LOADER_ICD_INTERFACE_VERSION:
61 api::PFN_vkNegotiateLoaderICDInterfaceVersion = Some(vk_icdNegotiateLoaderICDInterfaceVersion);
62
63 #[no_mangle]
64 pub unsafe extern "system" fn vk_icdGetPhysicalDeviceProcAddr(
65 instance: api::VkInstance,
66 name: *const c_char,
67 ) -> api::PFN_vkVoidFunction {
68 match CStr::from_ptr(name).to_str().ok()? {
69 "vkCreateDevice"
70 | "vkCreateDisplayModeKHR"
71 | "vkEnumerateDeviceExtensionProperties"
72 | "vkEnumerateDeviceLayerProperties"
73 | "vkGetDisplayModeProperties2KHR"
74 | "vkGetDisplayModePropertiesKHR"
75 | "vkGetDisplayPlaneCapabilities2KHR"
76 | "vkGetDisplayPlaneCapabilitiesKHR"
77 | "vkGetDisplayPlaneSupportedDisplaysKHR"
78 | "vkGetPhysicalDeviceDisplayPlaneProperties2KHR"
79 | "vkGetPhysicalDeviceDisplayPlanePropertiesKHR"
80 | "vkGetPhysicalDeviceDisplayProperties2KHR"
81 | "vkGetPhysicalDeviceDisplayPropertiesKHR"
82 | "vkGetPhysicalDeviceExternalBufferProperties"
83 | "vkGetPhysicalDeviceExternalBufferPropertiesKHR"
84 | "vkGetPhysicalDeviceExternalFenceProperties"
85 | "vkGetPhysicalDeviceExternalFencePropertiesKHR"
86 | "vkGetPhysicalDeviceExternalImageFormatPropertiesNV"
87 | "vkGetPhysicalDeviceExternalSemaphoreProperties"
88 | "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR"
89 | "vkGetPhysicalDeviceFeatures"
90 | "vkGetPhysicalDeviceFeatures2"
91 | "vkGetPhysicalDeviceFeatures2KHR"
92 | "vkGetPhysicalDeviceFormatProperties"
93 | "vkGetPhysicalDeviceFormatProperties2"
94 | "vkGetPhysicalDeviceFormatProperties2KHR"
95 | "vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX"
96 | "vkGetPhysicalDeviceImageFormatProperties"
97 | "vkGetPhysicalDeviceImageFormatProperties2"
98 | "vkGetPhysicalDeviceImageFormatProperties2KHR"
99 | "vkGetPhysicalDeviceMemoryProperties"
100 | "vkGetPhysicalDeviceMemoryProperties2"
101 | "vkGetPhysicalDeviceMemoryProperties2KHR"
102 | "vkGetPhysicalDeviceMultisamplePropertiesEXT"
103 | "vkGetPhysicalDevicePresentRectanglesKHR"
104 | "vkGetPhysicalDeviceProperties"
105 | "vkGetPhysicalDeviceProperties2"
106 | "vkGetPhysicalDeviceProperties2KHR"
107 | "vkGetPhysicalDeviceQueueFamilyProperties"
108 | "vkGetPhysicalDeviceQueueFamilyProperties2"
109 | "vkGetPhysicalDeviceQueueFamilyProperties2KHR"
110 | "vkGetPhysicalDeviceSparseImageFormatProperties"
111 | "vkGetPhysicalDeviceSparseImageFormatProperties2"
112 | "vkGetPhysicalDeviceSparseImageFormatProperties2KHR"
113 | "vkGetPhysicalDeviceSurfaceCapabilities2EXT"
114 | "vkGetPhysicalDeviceSurfaceCapabilities2KHR"
115 | "vkGetPhysicalDeviceSurfaceCapabilitiesKHR"
116 | "vkGetPhysicalDeviceSurfaceFormats2KHR"
117 | "vkGetPhysicalDeviceSurfaceFormatsKHR"
118 | "vkGetPhysicalDeviceSurfacePresentModesKHR"
119 | "vkGetPhysicalDeviceSurfaceSupportKHR"
120 | "vkGetPhysicalDeviceXcbPresentationSupportKHR"
121 | "vkReleaseDisplayEXT" => vk_icdGetInstanceProcAddr(instance, name),
122 _ => None,
123 }
124 }
125
126 #[allow(dead_code)]
127 const ASSERT_TYPE_VK_ICD_GET_PHYSICAL_DEVICE_PROC_ADDR: api::PFN_GetPhysicalDeviceProcAddr =
128 Some(vk_icdGetInstanceProcAddr);
129
130 #[cfg(test)]
131 mod tests {}