vulkanalia_vma/
flags.rs

1// SPDX-License-Identifier: Apache-2.0
2
3use bitflags::bitflags;
4use vulkanalia::vk::Flags;
5
6use crate::vma::*;
7
8macro_rules! vmaflags {
9    (
10        $(#[$outer:meta])*
11        pub struct $name:ident($source:ident) {
12            $($(#[$inner:meta])* $variant:ident = $value:ident), *,
13        }
14    ) => {
15        bitflags! {
16            #[repr(transparent)]
17            #[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
18            pub struct $name: Flags {
19                $($(#[$inner])* const $variant = <$source>::$value as Flags;)*
20            }
21        }
22    }
23}
24
25vmaflags! {
26    pub struct AllocatorCreateFlags(VmaAllocatorCreateFlagBits) {
27        EXTERNALLY_SYNCHRONIZED = EXTERNALLY_SYNCHRONIZED_BIT,
28        KHR_DEDICATED_ALLOCATION = KHR_DEDICATED_ALLOCATION_BIT,
29        KHR_BIND_MEMORY2 = KHR_BIND_MEMORY2_BIT,
30        EXT_MEMORY_BUDGET = EXT_MEMORY_BUDGET_BIT,
31        AMD_DEVICE_COHERENT_MEMORY = AMD_DEVICE_COHERENT_MEMORY_BIT,
32        BUFFER_DEVICE_ADDRESS = BUFFER_DEVICE_ADDRESS_BIT,
33        EXT_MEMORY_PRIORITY = EXT_MEMORY_PRIORITY_BIT,
34        KHR_MAINTENANCE4 = KHR_MAINTENANCE4_BIT,
35        KHR_MAINTENANCE5 = KHR_MAINTENANCE5_BIT,
36    }
37}
38
39vmaflags! {
40    pub struct AllocationCreateFlags(VmaAllocationCreateFlagBits) {
41        DEDICATED_MEMORY = DEDICATED_MEMORY_BIT,
42        NEVER_ALLOCATE = NEVER_ALLOCATE_BIT,
43        MAPPED = MAPPED_BIT,
44        USER_DATA_COPY_STRING = USER_DATA_COPY_STRING_BIT,
45        UPPER_ADDRESS = UPPER_ADDRESS_BIT,
46        DONT_BIND = DONT_BIND_BIT,
47        WITHIN_BUDGET = WITHIN_BUDGET_BIT,
48        CAN_ALIAS = CAN_ALIAS_BIT,
49        HOST_ACCESS_SEQUENTIAL_WRITE = HOST_ACCESS_SEQUENTIAL_WRITE_BIT,
50        HOST_ACCESS_RANDOM = HOST_ACCESS_RANDOM_BIT,
51        HOST_ACCESS_ALLOW_TRANSFER_INSTEAD = HOST_ACCESS_ALLOW_TRANSFER_INSTEAD_BIT,
52        STRATEGY_MIN_MEMORY = STRATEGY_MIN_MEMORY_BIT,
53        STRATEGY_MIN_TIME = STRATEGY_MIN_TIME_BIT,
54        STRATEGY_MIN_OFFSET = STRATEGY_MIN_OFFSET_BIT,
55    }
56}
57
58impl AllocationCreateFlags {
59    #[inline]
60    pub fn strategy() -> Self {
61        Self::from_bits_truncate(VmaAllocationCreateFlagBits::STRATEGY_MASK as Flags)
62    }
63}
64
65vmaflags! {
66    pub struct PoolCreateFlags(VmaPoolCreateFlagBits) {
67        IGNORE_BUFFER_IMAGE_GRANULARITY = IGNORE_BUFFER_IMAGE_GRANULARITY_BIT,
68        LINEAR_ALGORITHM = LINEAR_ALGORITHM_BIT,
69    }
70}
71
72impl PoolCreateFlags {
73    #[inline]
74    pub fn algorithm() -> Self {
75        Self::from_bits_truncate(VmaPoolCreateFlagBits::ALGORITHM_MASK as Flags)
76    }
77}
78
79vmaflags! {
80    pub struct VirtualAllocationCreateFlags(VmaVirtualAllocationCreateFlagBits) {
81        UPPER_ADDRESS = UPPER_ADDRESS_BIT,
82        STRATEGY_MIN_MEMORY = STRATEGY_MIN_MEMORY_BIT,
83        STRATEGY_MIN_TIME = STRATEGY_MIN_TIME_BIT,
84        STRATEGY_MIN_OFFSET = STRATEGY_MIN_OFFSET_BIT,
85    }
86}
87
88impl VirtualAllocationCreateFlags {
89    #[inline]
90    pub fn strategy() -> Self {
91        Self::from_bits_truncate(VmaVirtualAllocationCreateFlagBits::STRATEGY_MASK as Flags)
92    }
93}
94
95vmaflags! {
96    pub struct VirtualBlockCreateFlags(VmaVirtualBlockCreateFlagBits) {
97        LINEAR_ALGORITHM = LINEAR_ALGORITHM_BIT,
98    }
99}
100
101impl VirtualBlockCreateFlags {
102    #[inline]
103    pub fn algorithm() -> Self {
104        Self::from_bits_truncate(VmaVirtualBlockCreateFlagBits::ALGORITHM_MASK as Flags)
105    }
106}
107
108vmaflags! {
109    pub struct DefragmentationFlags(VmaDefragmentationFlagBits) {
110        ALGORITHM_FAST = ALGORITHM_FAST_BIT,
111        ALGORITHM_BALANCED = ALGORITHM_BALANCED_BIT,
112        ALGORITHM_FULL = ALGORITHM_FULL_BIT,
113        ALGORITHM_EXTENSIVE = ALGORITHM_EXTENSIVE_BIT,
114    }
115}
116
117impl DefragmentationFlags {
118    #[inline]
119    pub fn algorithm() -> Self {
120        Self::from_bits_truncate(VmaDefragmentationFlagBits::ALGORITHM_MASK as Flags)
121    }
122}