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