1use 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}