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::deviceCoherentMemory
is 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 fn from_bits(bits: u32) -> Option<Self>
pub const fn from_bits(bits: u32) -> Option<Self>
Convert from underlying bit representation, unless that representation contains bits that do not correspond to a flag.
Sourcepub const fn from_bits_truncate(bits: u32) -> Self
pub const fn from_bits_truncate(bits: u32) -> Self
Convert from underlying bit representation, dropping any bits that do not correspond to flags.
Sourcepub const unsafe fn from_bits_unchecked(bits: u32) -> Self
pub const unsafe fn from_bits_unchecked(bits: u32) -> Self
Convert from underlying bit representation, preserving all bits (even those not corresponding to a defined flag).
§Safety
The caller of the bitflags!
macro can chose to allow or
disallow extra bits for their bitflags type.
The caller of from_bits_unchecked()
has to ensure that
all bits correspond to a defined flag or that extra bits
are valid for this bitflags type.
Sourcepub const fn intersects(&self, other: Self) -> bool
pub const fn intersects(&self, other: Self) -> bool
Returns true
if there are flags common to both self
and other
.
Sourcepub const fn contains(&self, other: Self) -> bool
pub const fn contains(&self, other: Self) -> bool
Returns true
if all of the flags in other
are contained within self
.
Sourcepub fn set(&mut self, other: Self, value: bool)
pub fn set(&mut self, other: Self, value: bool)
Inserts or removes the specified flags depending on the passed value.
Sourcepub const fn intersection(self, other: Self) -> Self
pub const fn intersection(self, other: Self) -> Self
Returns the intersection between the flags in self
and
other
.
Specifically, the returned set contains only the flags which are
present in both self
and other
.
This is equivalent to using the &
operator (e.g.
ops::BitAnd
), as in flags & other
.
Sourcepub const fn union(self, other: Self) -> Self
pub const fn union(self, other: Self) -> Self
Returns the union of between the flags in self
and other
.
Specifically, the returned set contains all flags which are
present in either self
or other
, including any which are
present in both (see Self::symmetric_difference
if that
is undesirable).
This is equivalent to using the |
operator (e.g.
ops::BitOr
), as in flags | other
.
Sourcepub const fn difference(self, other: Self) -> Self
pub const fn difference(self, other: Self) -> Self
Returns the difference between the flags in self
and other
.
Specifically, the returned set contains all flags present in
self
, except for the ones present in other
.
It is also conceptually equivalent to the “bit-clear” operation:
flags & !other
(and this syntax is also supported).
This is equivalent to using the -
operator (e.g.
ops::Sub
), as in flags - other
.
Sourcepub const fn symmetric_difference(self, other: Self) -> Self
pub const fn symmetric_difference(self, other: Self) -> Self
Returns the symmetric difference between the flags
in self
and other
.
Specifically, the returned set contains the flags present which
are present in self
or other
, but that are not present in
both. Equivalently, it contains the flags present in exactly
one of the sets self
and other
.
This is equivalent to using the ^
operator (e.g.
ops::BitXor
), as in flags ^ other
.
Sourcepub const fn complement(self) -> Self
pub const fn complement(self) -> Self
Returns the complement of this set of flags.
Specifically, the returned set contains all the flags which are
not set in self
, but which are allowed for this type.
Alternatively, it can be thought of as the set difference
between Self::all()
and self
(e.g. Self::all() - self
)
This is equivalent to using the !
operator (e.g.
ops::Not
), as in !flags
.
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)
Disables all flags disabled in the set.
Source§impl BitOr for AllocatorCreateFlags
impl BitOr for AllocatorCreateFlags
Source§fn bitor(self, other: AllocatorCreateFlags) -> Self
fn bitor(self, other: AllocatorCreateFlags) -> Self
Returns the union of the two sets of flags.
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)
Adds the set of flags.
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)
Toggles the set of flags.
Source§impl Clone for AllocatorCreateFlags
impl Clone for AllocatorCreateFlags
Source§fn clone(&self) -> AllocatorCreateFlags
fn clone(&self) -> AllocatorCreateFlags
1.0.0 · Source§const fn clone_from(&mut self, source: &Self)
const fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for AllocatorCreateFlags
impl Debug for AllocatorCreateFlags
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)
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 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
Source§impl Hash for AllocatorCreateFlags
impl Hash 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 Ord for AllocatorCreateFlags
impl Ord for AllocatorCreateFlags
Source§fn cmp(&self, other: &AllocatorCreateFlags) -> Ordering
fn cmp(&self, other: &AllocatorCreateFlags) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for AllocatorCreateFlags
impl PartialEq for AllocatorCreateFlags
Source§impl PartialOrd for AllocatorCreateFlags
impl PartialOrd for AllocatorCreateFlags
Source§impl Sub for AllocatorCreateFlags
impl Sub for AllocatorCreateFlags
Source§impl SubAssign for AllocatorCreateFlags
impl SubAssign for AllocatorCreateFlags
Source§fn sub_assign(&mut self, other: Self)
fn sub_assign(&mut self, other: Self)
Disables all flags enabled in the set.