lava/vulkan/vk/
vk_external_semaphore_feature_flags.rs

1// Generated by `scripts/generate.js`
2
3use utils::vk_traits::*;
4
5/// Wrapper for [VkExternalSemaphoreFeatureFlags](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkExternalSemaphoreFeatureFlags.html).
6///
7/// Use the macro `VkExternalSemaphoreFeatureFlags!` as an alternative method to create a structure. For example, these two snippets return the same value:
8/// ```
9/// VkExternalSemaphoreFeatureFlags!(exportable, importable)
10/// ```
11/// ```
12/// VkExternalSemaphoreFeatureFlags {
13///     exportable: true,
14///     importable: true,
15/// }
16/// ```
17#[derive(Debug, Clone)]
18pub struct VkExternalSemaphoreFeatureFlags {
19    pub exportable: bool,
20    pub importable: bool,
21}
22
23#[doc(hidden)]
24pub type RawVkExternalSemaphoreFeatureFlags = u32;
25
26impl VkWrappedType<RawVkExternalSemaphoreFeatureFlags> for VkExternalSemaphoreFeatureFlags {
27    fn vk_to_raw(src: &VkExternalSemaphoreFeatureFlags, dst: &mut RawVkExternalSemaphoreFeatureFlags) {
28        *dst = 0;
29        if src.exportable { *dst |= 0x00000001; }
30        if src.importable { *dst |= 0x00000002; }
31    }
32}
33
34impl VkRawType<VkExternalSemaphoreFeatureFlags> for RawVkExternalSemaphoreFeatureFlags {
35    fn vk_to_wrapped(src: &RawVkExternalSemaphoreFeatureFlags) -> VkExternalSemaphoreFeatureFlags {
36        VkExternalSemaphoreFeatureFlags {
37            exportable: (src & 0x00000001) != 0,
38            importable: (src & 0x00000002) != 0,
39        }
40    }
41}
42
43impl Default for VkExternalSemaphoreFeatureFlags {
44    fn default() -> VkExternalSemaphoreFeatureFlags {
45        VkExternalSemaphoreFeatureFlags {
46            exportable: false,
47            importable: false,
48        }
49    }
50}
51
52impl VkExternalSemaphoreFeatureFlags {
53    
54    /// Return a structure with all flags to `false`.
55    pub fn none() -> Self {
56        VkExternalSemaphoreFeatureFlags {
57            exportable: false,
58            importable: false,
59        }
60    }
61    
62    /// Return a structure with all flags to `true`.
63    pub fn all() -> Self {
64        VkExternalSemaphoreFeatureFlags {
65            exportable: true,
66            importable: true,
67        }
68    }
69    
70    /// Return the numerical bit flags corresponding to the structure (as described in the Vulkan specs).
71    pub fn to_u32(&self) -> u32 {
72        0
73        + if self.exportable { 0x00000001 } else { 0 }
74        + if self.importable { 0x00000002 } else { 0 }
75    }
76    
77    /// Create a structure corresponding to the specified numerical bit flags.
78    pub fn from_u32(value: u32) -> Self {
79        VkExternalSemaphoreFeatureFlags {
80            exportable: value & 0x00000001 > 0,
81            importable: value & 0x00000002 > 0,
82        }
83    }
84}
85
86#[doc(hidden)]
87#[macro_export]
88macro_rules! VkExternalSemaphoreFeatureFlags {
89    ( $( $x:ident ),* ) => {
90        VkExternalSemaphoreFeatureFlags {
91            $($x: true,)*
92            ..VkExternalSemaphoreFeatureFlags::none()
93        }
94    }
95}