lava/vulkan/vk/
vk_external_semaphore_feature_flags.rs1use utils::vk_traits::*;
4
5#[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 pub fn none() -> Self {
56 VkExternalSemaphoreFeatureFlags {
57 exportable: false,
58 importable: false,
59 }
60 }
61
62 pub fn all() -> Self {
64 VkExternalSemaphoreFeatureFlags {
65 exportable: true,
66 importable: true,
67 }
68 }
69
70 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 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}