rendy_memory/allocator/mod.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
//! This module provides `Allocator` trait and few allocators that implements the trait.
mod dedicated;
mod dynamic;
mod linear;
use crate::block::Block;
pub use self::{
dedicated::{DedicatedAllocator, DedicatedBlock},
dynamic::{DynamicAllocator, DynamicBlock, DynamicConfig},
linear::{LinearAllocator, LinearBlock, LinearConfig},
};
/// Allocator kind.
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
pub enum Kind {
/// Memory object per allocation.
Dedicated,
/// General purpose allocator.
Dynamic,
/// Allocates linearly.
/// Fast and low overhead.
/// Suitable for one-time-use allocations.
Linear,
}
/// Allocator trait implemented for various allocators.
pub trait Allocator<B: gfx_hal::Backend> {
/// Block type returned by allocator.
type Block: Block<B>;
/// Get allocator kind.
fn kind() -> Kind;
/// Allocate block of memory.
/// On success returns allocated block and amount of memory consumed from device.
fn alloc(
&mut self,
device: &B::Device,
size: u64,
align: u64,
) -> Result<(Self::Block, u64), gfx_hal::device::AllocationError>;
/// Free block of memory.
/// Returns amount of memory returned to the device.
fn free(&mut self, device: &B::Device, block: Self::Block) -> u64;
}