Enum vma::MemoryUsage
source · pub enum MemoryUsage {
Unknown,
GpuOnly,
CpuOnly,
CpuToGpu,
GpuToCpu,
CpuCopy,
GpuLazy,
Auto,
AutoPreferDevice,
AutoPreferHost,
}
Expand description
Intended usage of memory.
Variants§
Unknown
No intended memory usage specified.
Use other members of AllocationCreateInfo
to specify your requirements.
GpuOnly
Memory will be used on device only, so fast access from the device is preferred.
It usually means device-local GPU (video) memory.
No need to be mappable on host.
It is roughly equivalent of D3D12_HEAP_TYPE_DEFAULT
.
Usage:
- Resources written and read by device, e.g. images used as attachments.
- Resources transferred from host once (immutable) or infrequently and read by device multiple times, e.g. textures to be sampled, vertex buffers, uniform (constant) buffers, and majority of other types of resources used on GPU.
Allocation may still end up in ash::vk::MemoryPropertyFlags::HOST_VISIBLE
memory on some implementations.
In such case, you are free to map it.
You can use AllocationCreateFlags::MAPPED
with this usage type.
CpuOnly
Memory will be mappable on host.
It usually means CPU (system) memory.
Guarantees to be ash::vk::MemoryPropertyFlags::HOST_VISIBLE
and ash::vk::MemoryPropertyFlags::HOST_COHERENT
.
CPU access is typically uncached. Writes may be write-combined.
Resources created in this pool may still be accessible to the device, but access to them can be slow.
It is roughly equivalent of D3D12_HEAP_TYPE_UPLOAD
.
Usage: Staging copy of resources used as transfer source.
CpuToGpu
Memory that is both mappable on host (guarantees to be ash::vk::MemoryPropertyFlags::HOST_VISIBLE
) and preferably fast to access by GPU.
CPU access is typically uncached. Writes may be write-combined.
Usage: Resources written frequently by host (dynamic), read by device. E.g. textures, vertex buffers, uniform buffers updated every frame or every draw call.
GpuToCpu
Memory mappable on host (guarantees to be ash::vk::MemoryPropertFlags::HOST_VISIBLE
) and cached.
It is roughly equivalent of D3D12_HEAP_TYPE_READBACK
.
Usage:
- Resources written by device, read by host - results of some computations, e.g. screen capture, average scene luminance for HDR tone mapping.
- Any resources read or accessed randomly on host, e.g. CPU-side copy of vertex buffer used as source of transfer, but also used for collision detection.
CpuCopy
Prefers not VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
.
GpuLazy
Lazily allocated GPU memory having (guarantees to be ash::vk::MemoryPropertFlags::LAZILY_ALLOCATED
).
Exists mostly on mobile platforms. Using it on desktop PC or other GPUs with no such memory type present will fail the allocation.
Usage:
- Memory for transient attachment images (color attachments, depth attachments etc.), created with
VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT
. Allocations with this usage are always created as dedicated - it implies #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT.
Auto
Selects best memory type automatically. This flag is recommended for most common use cases.
When using this flag, if you want to map the allocation (using vmaMapMemory() or #VMA_ALLOCATION_CREATE_MAPPED_BIT), you must pass one of the flags: #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT in VmaAllocationCreateInfo::flags.
It can be used only with functions that let the library know VkBufferCreateInfo
or VkImageCreateInfo
, e.g.
vmaCreateBuffer(), vmaCreateImage(), vmaFindMemoryTypeIndexForBufferInfo(), vmaFindMemoryTypeIndexForImageInfo()
and not with generic memory allocation functions.
AutoPreferDevice
Selects best memory type automatically with preference for GPU (device) memory.
When using this flag, if you want to map the allocation (using vmaMapMemory() or #VMA_ALLOCATION_CREATE_MAPPED_BIT), you must pass one of the flags: #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT in VmaAllocationCreateInfo::flags.
It can be used only with functions that let the library know VkBufferCreateInfo
or VkImageCreateInfo
, e.g.
vmaCreateBuffer(), vmaCreateImage(), vmaFindMemoryTypeIndexForBufferInfo(), vmaFindMemoryTypeIndexForImageInfo()
and not with generic memory allocation functions.
AutoPreferHost
Selects best memory type automatically with preference for CPU (host) memory.
When using this flag, if you want to map the allocation (using vmaMapMemory() or #VMA_ALLOCATION_CREATE_MAPPED_BIT), you must pass one of the flags: #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT in VmaAllocationCreateInfo::flags.
It can be used only with functions that let the library know VkBufferCreateInfo
or VkImageCreateInfo
, e.g.
vmaCreateBuffer(), vmaCreateImage(), vmaFindMemoryTypeIndexForBufferInfo(), vmaFindMemoryTypeIndexForImageInfo()
and not with generic memory allocation functions.
Trait Implementations§
source§impl Clone for MemoryUsage
impl Clone for MemoryUsage
source§fn clone(&self) -> MemoryUsage
fn clone(&self) -> MemoryUsage
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for MemoryUsage
impl Debug for MemoryUsage
source§impl Hash for MemoryUsage
impl Hash for MemoryUsage
source§impl Ord for MemoryUsage
impl Ord for MemoryUsage
source§fn cmp(&self, other: &MemoryUsage) -> Ordering
fn cmp(&self, other: &MemoryUsage) -> Ordering
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere Self: Sized,
source§impl PartialEq<MemoryUsage> for MemoryUsage
impl PartialEq<MemoryUsage> for MemoryUsage
source§fn eq(&self, other: &MemoryUsage) -> bool
fn eq(&self, other: &MemoryUsage) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl PartialOrd<MemoryUsage> for MemoryUsage
impl PartialOrd<MemoryUsage> for MemoryUsage
source§fn partial_cmp(&self, other: &MemoryUsage) -> Option<Ordering>
fn partial_cmp(&self, other: &MemoryUsage) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more