pub struct AllocatorCreateFlags(/* private fields */);Expand description
Flags for configuring Allocator construction.
Implementations§
Source§impl AllocatorCreateFlags
impl AllocatorCreateFlags
Sourcepub const EXTERNALLY_SYNCHRONIZED: Self
pub const EXTERNALLY_SYNCHRONIZED: Self
Allocator and all objects created from it will not be synchronized internally, so you must guarantee they are used from only one thread at a time or synchronized externally by you. Using this flag may increase performance because internal mutexes are not used.
Sourcepub const KHR_DEDICATED_ALLOCATION: Self
pub const KHR_DEDICATED_ALLOCATION: Self
Enables usage of VK_KHR_dedicated_allocation extension.
Using this extenion will automatically allocate dedicated blocks of memory for
some buffers and images instead of suballocating place for them out of bigger
memory blocks (as if you explicitly used AllocationCreateFlags::DEDICATED_MEMORY flag) when it is
recommended by the driver. It may improve performance on some GPUs.
You may set this flag only if you found out that following device extensions are
supported, you enabled them while creating Vulkan device passed as
AllocatorCreateInfo::device, and you want them to be used internally by this
library:
- VK_KHR_get_memory_requirements2
- VK_KHR_dedicated_allocation
When this flag is set, you can experience following warnings reported by Vulkan
validation layer. You can ignore them.
> vkBindBufferMemory(): Binding memory to buffer 0x2d but vkGetBufferMemoryRequirements() has not been called on that buffer.
Sourcepub const KHR_BIND_MEMORY2: Self
pub const KHR_BIND_MEMORY2: Self
Enables usage of VK_KHR_bind_memory2 extension.
The flag works only if VmaAllocatorCreateInfo::vulkanApiVersion == VK_API_VERSION_1_0.
When it is VK_API_VERSION_1_1, the flag is ignored because the extension has been promoted to Vulkan 1.1.
You may set this flag only if you found out that this device extension is supported, you enabled it while creating Vulkan device passed as VmaAllocatorCreateInfo::device, and you want it to be used internally by this library.
The extension provides functions vkBindBufferMemory2KHR and vkBindImageMemory2KHR,
which allow to pass a chain of pNext structures while binding.
This flag is required if you use pNext parameter in vmaBindBufferMemory2() or vmaBindImageMemory2().
Sourcepub const EXT_MEMORY_BUDGET: Self
pub const EXT_MEMORY_BUDGET: Self
Enables usage of VK_EXT_memory_budget extension.
You may set this flag only if you found out that this device extension is supported, you enabled it while creating Vulkan device passed as VmaAllocatorCreateInfo::device, and you want it to be used internally by this library, along with another instance extension VK_KHR_get_physical_device_properties2, which is required by it (or Vulkan 1.1, where this extension is promoted).
The extension provides query for current memory usage and budget, which will probably be more accurate than an estimation used by the library otherwise.
Sourcepub const AMD_DEVICE_COHERENT_MEMORY: Self
pub const AMD_DEVICE_COHERENT_MEMORY: Self
Enables usage of VK_AMD_device_coherent_memory extension.
You may set this flag only if you:
- found out that this device extension is supported and enabled it while creating Vulkan device passed as VmaAllocatorCreateInfo::device,
- checked that
VkPhysicalDeviceCoherentMemoryFeaturesAMD::deviceCoherentMemoryis true and set it while creating the Vulkan device, - want it to be used internally by this library.
The extension and accompanying device feature provide access to memory types with
VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD and VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD flags.
They are useful mostly for writing breadcrumb markers - a common method for debugging GPU crash/hang/TDR.
When the extension is not enabled, such memory types are still enumerated, but their usage is illegal.
To protect from this error, if you don’t create the allocator with this flag, it will refuse to allocate any memory or create a custom pool in such memory type,
returning VK_ERROR_FEATURE_NOT_PRESENT.
Sourcepub const BUFFER_DEVICE_ADDRESS: Self
pub const BUFFER_DEVICE_ADDRESS: Self
You may set this flag only if you:
- (For Vulkan version < 1.2) Found as available and enabled device extension VK_KHR_buffer_device_address. This extension is promoted to core Vulkan 1.2.
- Found as available and enabled device feature
VkPhysicalDeviceBufferDeviceAddressFeatures::bufferDeviceAddress.
When this flag is set, you can create buffers with VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT using VMA.
The library automatically adds VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT to
allocated memory blocks wherever it might be needed.
For more information, see documentation chapter \ref enabling_buffer_device_address.
Sourcepub const EXT_MEMORY_PRIORITY: Self
pub const EXT_MEMORY_PRIORITY: Self
Enables usage of VK_EXT_memory_priority extension in the library.
You may set this flag only if you found available and enabled this device extension,
along with VkPhysicalDeviceMemoryPriorityFeaturesEXT::memoryPriority == VK_TRUE,
while creating Vulkan device passed as VmaAllocatorCreateInfo::device.
When this flag is used, VmaAllocationCreateInfo::priority and VmaPoolCreateInfo::priority are used to set priorities of allocated Vulkan memory. Without it, these variables are ignored.
A priority must be a floating-point value between 0 and 1, indicating the priority of the allocation relative to other memory allocations.
Larger values are higher priority. The granularity of the priorities is implementation-dependent.
It is automatically passed to every call to vkAllocateMemory done by the library using structure VkMemoryPriorityAllocateInfoEXT.
The value to be used for default priority is 0.5.
For more details, see the documentation of the VK_EXT_memory_priority extension.
Sourcepub const KHR_MAINTENANCE4: Self
pub const KHR_MAINTENANCE4: Self
Enables usage of VK_KHR_maintenance4 extension in the library.
You may set this flag only if you found available and enabled this device extension, while creating Vulkan device passed as VmaAllocatorCreateInfo::device.
Sourcepub const KHR_MAINTENANCE5: Self
pub const KHR_MAINTENANCE5: Self
Enables usage of VK_KHR_maintenance5 extension in the library.
You may set this flag only if you found available and enabled this device extension, while creating Vulkan device passed as VmaAllocatorCreateInfo::device.
Source§impl AllocatorCreateFlags
impl AllocatorCreateFlags
Sourcepub const fn bits(&self) -> u32
pub const fn bits(&self) -> u32
Get the underlying bits value.
The returned value is exactly the bits set in this flags value.
Sourcepub const fn from_bits(bits: u32) -> Option<Self>
pub const fn from_bits(bits: u32) -> Option<Self>
Convert from a bits value.
This method will return None if any unknown bits are set.
Sourcepub const fn from_bits_truncate(bits: u32) -> Self
pub const fn from_bits_truncate(bits: u32) -> Self
Convert from a bits value, unsetting any unknown bits.
Sourcepub const fn from_bits_retain(bits: u32) -> Self
pub const fn from_bits_retain(bits: u32) -> Self
Convert from a bits value exactly.
Sourcepub fn from_name(name: &str) -> Option<Self>
pub fn from_name(name: &str) -> Option<Self>
Get a flags value with the bits of a flag with the given name set.
This method will return None if name is empty or doesn’t
correspond to any named flag.
Sourcepub const fn intersects(&self, other: Self) -> bool
pub const fn intersects(&self, other: Self) -> bool
Whether any set bits in a source flags value are also set in a target flags value.
Sourcepub const fn contains(&self, other: Self) -> bool
pub const fn contains(&self, other: Self) -> bool
Whether all set bits in a source flags value are also set in a target flags value.
Sourcepub fn remove(&mut self, other: Self)
pub fn remove(&mut self, other: Self)
The intersection of a source flags value with the complement of a target flags value (&!).
This method is not equivalent to self & !other when other has unknown bits set.
remove won’t truncate other, but the ! operator will.
Sourcepub fn toggle(&mut self, other: Self)
pub fn toggle(&mut self, other: Self)
The bitwise exclusive-or (^) of the bits in two flags values.
Sourcepub fn set(&mut self, other: Self, value: bool)
pub fn set(&mut self, other: Self, value: bool)
Call insert when value is true or remove when value is false.
Sourcepub const fn intersection(self, other: Self) -> Self
pub const fn intersection(self, other: Self) -> Self
The bitwise and (&) of the bits in two flags values.
Sourcepub const fn union(self, other: Self) -> Self
pub const fn union(self, other: Self) -> Self
The bitwise or (|) of the bits in two flags values.
Sourcepub const fn difference(self, other: Self) -> Self
pub const fn difference(self, other: Self) -> Self
The intersection of a source flags value with the complement of a target flags value (&!).
This method is not equivalent to self & !other when other has unknown bits set.
difference won’t truncate other, but the ! operator will.
Sourcepub const fn symmetric_difference(self, other: Self) -> Self
pub const fn symmetric_difference(self, other: Self) -> Self
The bitwise exclusive-or (^) of the bits in two flags values.
Sourcepub const fn complement(self) -> Self
pub const fn complement(self) -> Self
The bitwise negation (!) of the bits in a flags value, truncating the result.
Source§impl AllocatorCreateFlags
impl AllocatorCreateFlags
Sourcepub const fn iter(&self) -> Iter<AllocatorCreateFlags>
pub const fn iter(&self) -> Iter<AllocatorCreateFlags>
Yield a set of contained flags values.
Each yielded flags value will correspond to a defined named flag. Any unknown bits will be yielded together as a final flags value.
Sourcepub const fn iter_names(&self) -> IterNames<AllocatorCreateFlags>
pub const fn iter_names(&self) -> IterNames<AllocatorCreateFlags>
Yield a set of contained named flags values.
This method is like iter, except only yields bits in contained named flags.
Any unknown bits, or bits not corresponding to a contained flag will not be yielded.
Trait Implementations§
Source§impl Binary for AllocatorCreateFlags
impl Binary for AllocatorCreateFlags
Source§impl BitAnd for AllocatorCreateFlags
impl BitAnd for AllocatorCreateFlags
Source§impl BitAndAssign for AllocatorCreateFlags
impl BitAndAssign for AllocatorCreateFlags
Source§fn bitand_assign(&mut self, other: Self)
fn bitand_assign(&mut self, other: Self)
The bitwise and (&) of the bits in two flags values.
Source§impl BitOr for AllocatorCreateFlags
impl BitOr for AllocatorCreateFlags
Source§fn bitor(self, other: AllocatorCreateFlags) -> Self
fn bitor(self, other: AllocatorCreateFlags) -> Self
The bitwise or (|) of the bits in two flags values.
Source§type Output = AllocatorCreateFlags
type Output = AllocatorCreateFlags
| operator.Source§impl BitOrAssign for AllocatorCreateFlags
impl BitOrAssign for AllocatorCreateFlags
Source§fn bitor_assign(&mut self, other: Self)
fn bitor_assign(&mut self, other: Self)
The bitwise or (|) of the bits in two flags values.
Source§impl BitXor for AllocatorCreateFlags
impl BitXor for AllocatorCreateFlags
Source§impl BitXorAssign for AllocatorCreateFlags
impl BitXorAssign for AllocatorCreateFlags
Source§fn bitxor_assign(&mut self, other: Self)
fn bitxor_assign(&mut self, other: Self)
The bitwise exclusive-or (^) of the bits in two flags values.
Source§impl Extend<AllocatorCreateFlags> for AllocatorCreateFlags
impl Extend<AllocatorCreateFlags> for AllocatorCreateFlags
Source§fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)
fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)
The bitwise or (|) of the bits in each flags value.
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)Source§impl Flags for AllocatorCreateFlags
impl Flags for AllocatorCreateFlags
Source§const FLAGS: &'static [Flag<AllocatorCreateFlags>]
const FLAGS: &'static [Flag<AllocatorCreateFlags>]
Source§fn from_bits_retain(bits: u32) -> AllocatorCreateFlags
fn from_bits_retain(bits: u32) -> AllocatorCreateFlags
Source§fn contains_unknown_bits(&self) -> bool
fn contains_unknown_bits(&self) -> bool
true if any unknown bits are set.Source§fn from_bits_truncate(bits: Self::Bits) -> Self
fn from_bits_truncate(bits: Self::Bits) -> Self
Source§fn from_name(name: &str) -> Option<Self>
fn from_name(name: &str) -> Option<Self>
Source§fn iter_names(&self) -> IterNames<Self>
fn iter_names(&self) -> IterNames<Self>
Source§fn intersects(&self, other: Self) -> boolwhere
Self: Sized,
fn intersects(&self, other: Self) -> boolwhere
Self: Sized,
Source§fn contains(&self, other: Self) -> boolwhere
Self: Sized,
fn contains(&self, other: Self) -> boolwhere
Self: Sized,
Source§fn insert(&mut self, other: Self)where
Self: Sized,
fn insert(&mut self, other: Self)where
Self: Sized,
|) of the bits in two flags values.Source§fn remove(&mut self, other: Self)where
Self: Sized,
fn remove(&mut self, other: Self)where
Self: Sized,
&!). Read moreSource§fn toggle(&mut self, other: Self)where
Self: Sized,
fn toggle(&mut self, other: Self)where
Self: Sized,
^) of the bits in two flags values.Source§fn intersection(self, other: Self) -> Self
fn intersection(self, other: Self) -> Self
&) of the bits in two flags values.Source§fn difference(self, other: Self) -> Self
fn difference(self, other: Self) -> Self
&!). Read moreSource§fn symmetric_difference(self, other: Self) -> Self
fn symmetric_difference(self, other: Self) -> Self
^) of the bits in two flags values.Source§fn complement(self) -> Self
fn complement(self) -> Self
!) of the bits in a flags value, truncating the result.Source§impl FromIterator<AllocatorCreateFlags> for AllocatorCreateFlags
impl FromIterator<AllocatorCreateFlags> for AllocatorCreateFlags
Source§fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self
fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self
The bitwise or (|) of the bits in each flags value.
Source§impl IntoIterator for AllocatorCreateFlags
impl IntoIterator for AllocatorCreateFlags
Source§impl LowerHex for AllocatorCreateFlags
impl LowerHex for AllocatorCreateFlags
Source§impl Not for AllocatorCreateFlags
impl Not for AllocatorCreateFlags
Source§impl Octal for AllocatorCreateFlags
impl Octal for AllocatorCreateFlags
Source§impl PublicFlags for AllocatorCreateFlags
impl PublicFlags for AllocatorCreateFlags
Source§impl Sub for AllocatorCreateFlags
impl Sub for AllocatorCreateFlags
Source§fn sub(self, other: Self) -> Self
fn sub(self, other: Self) -> Self
The intersection of a source flags value with the complement of a target flags value (&!).
This method is not equivalent to self & !other when other has unknown bits set.
difference won’t truncate other, but the ! operator will.
Source§type Output = AllocatorCreateFlags
type Output = AllocatorCreateFlags
- operator.Source§impl SubAssign for AllocatorCreateFlags
impl SubAssign for AllocatorCreateFlags
Source§fn sub_assign(&mut self, other: Self)
fn sub_assign(&mut self, other: Self)
The intersection of a source flags value with the complement of a target flags value (&!).
This method is not equivalent to self & !other when other has unknown bits set.
difference won’t truncate other, but the ! operator will.