Skip to main content

ferroui_vulkan/
vulkan_bindings.rs

1use crate::Version;
2
3/// Values of the Vulkan headers that are computed and not enumerated.
4pub struct VulkanHelpers;
5
6impl VulkanHelpers {
7    /// `VK_QUEUE_FAMILY_IGNORED`.
8    pub const QUEUE_FAMILY_IGNORED: u32 = 4294967295;
9
10    /// The packed form of a version (`VK_MAKE_VERSION`).
11    pub fn make_version(major: i32, minor: i32, patch: i32) -> u32 {
12        ((major << 22) | (minor << 12) | patch) as u32
13    }
14
15    /// The packed form of `v`.
16    pub fn make_version_of(v: Version) -> u32 {
17        Self::make_version(v.major, v.minor, v.build)
18    }
19}
20
21#[cfg(test)]
22mod tests {
23    use super::*;
24    use ash::vk;
25
26    #[test]
27    fn make_version_packs_like_the_headers() {
28        assert_eq!(VulkanHelpers::make_version(1, 0, 0), vk::make_api_version(0, 1, 0, 0));
29        assert_eq!(VulkanHelpers::make_version(1, 1, 0), vk::API_VERSION_1_1);
30        assert_eq!(VulkanHelpers::make_version(1, 3, 281), vk::make_api_version(0, 1, 3, 281));
31        assert_eq!(VulkanHelpers::make_version_of(Version::new(1, 2, 7)), (1 << 22) | (2 << 12) | 7);
32    }
33
34    #[test]
35    fn queue_family_ignored_is_the_constant_of_the_headers() {
36        assert_eq!(VulkanHelpers::QUEUE_FAMILY_IGNORED, vk::QUEUE_FAMILY_IGNORED);
37    }
38}