Struct vk_mem_erupt::AllocatorCreateFlags [−][src]
pub struct AllocatorCreateFlags { /* fields omitted */ }
Expand description
Flags for configuring Allocator
construction.
Implementations
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.
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.
Enables usage of VK_KHR_bind_memory2 extension.
The flag works only if VmaAllocatorCreateInfo::vulkanApiVersion == VK_API_VERSION_1_0
.
When it’s 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().
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.
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
.
Enables usage of “buffer device address” feature, which allows you to use function
vkGetBufferDeviceAddress*
to get raw GPU pointer to a buffer and pass it for usage inside a shader.
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.
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.
Convert from underlying bit representation, unless that representation contains bits that do not correspond to a flag.
Convert from underlying bit representation, dropping any bits that do not correspond to flags.
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.
Returns true
if there are flags common to both self
and other
.
Returns true
if all of the flags in other
are contained within self
.
Inserts or removes the specified flags depending on the passed value.
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
.
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
.
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
.
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
.
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
Disables all flags disabled in the set.
Returns the union of the two sets of flags.
type Output = Self
type Output = Self
The resulting type after applying the |
operator.
Adds the set of flags.
Toggles the set of flags.
Construct AllocatorCreateFlags
with default values
Extends a collection with the contents of an iterator. Read more
extend_one
)Extends a collection with exactly one element.
extend_one
)Reserves capacity in a collection for the given number of additional elements. Read more
Creates a value from an iterator. Read more
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
This method tests for !=
.
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
Disables all flags enabled in the set.
Auto Trait Implementations
impl RefUnwindSafe for AllocatorCreateFlags
impl Send for AllocatorCreateFlags
impl Sync for AllocatorCreateFlags
impl Unpin for AllocatorCreateFlags
impl UnwindSafe for AllocatorCreateFlags
Blanket Implementations
Mutably borrows from an owned value. Read more