Skip to main content

vk/
version.rs

1//! Vulkan's packed API version, including the variant bits.
2
3/// Pack a Vulkan API version using the Khronos bit allocation.
4#[doc(alias = "VK_MAKE_API_VERSION")]
5#[doc = "\n\n[Khronos reference: `VK_MAKE_API_VERSION`](https://docs.vulkan.org/refpages/latest/refpages/source/VK_MAKE_API_VERSION.html)"]
6pub const fn make_api_version(variant: u32, major: u32, minor: u32, patch: u32) -> u32 {
7	(variant << 29) | (major << 22) | (minor << 12) | patch
8}
9
10/// Extract the API variant.
11#[doc(alias = "VK_API_VERSION_VARIANT")]
12#[doc = "\n\n[Khronos reference: `VK_API_VERSION_VARIANT`](https://docs.vulkan.org/refpages/latest/refpages/source/VK_API_VERSION_VARIANT.html)"]
13pub const fn api_version_variant(version: u32) -> u32 {
14	version >> 29
15}
16
17/// Extract the major version, excluding the variant.
18#[doc(alias = "VK_API_VERSION_MAJOR")]
19#[doc = "\n\n[Khronos reference: `VK_API_VERSION_MAJOR`](https://docs.vulkan.org/refpages/latest/refpages/source/VK_API_VERSION_MAJOR.html)"]
20pub const fn api_version_major(version: u32) -> u32 {
21	(version >> 22) & 0x7f
22}
23
24/// Extract the minor version.
25#[doc(alias = "VK_API_VERSION_MINOR")]
26#[doc = "\n\n[Khronos reference: `VK_API_VERSION_MINOR`](https://docs.vulkan.org/refpages/latest/refpages/source/VK_API_VERSION_MINOR.html)"]
27pub const fn api_version_minor(version: u32) -> u32 {
28	(version >> 12) & 0x3ff
29}
30
31/// Extract the patch version.
32#[doc(alias = "VK_API_VERSION_PATCH")]
33#[doc = "\n\n[Khronos reference: `VK_API_VERSION_PATCH`](https://docs.vulkan.org/refpages/latest/refpages/source/VK_API_VERSION_PATCH.html)"]
34pub const fn api_version_patch(version: u32) -> u32 {
35	version & 0xfff
36}