use mesa3d_util::MesaHandle;
use mesa3d_util::SharedMemory;
use mesa3d_util::MESA_HANDLE_TYPE_MEM_SHM;
use crate::rutabaga_gralloc::formats::canonical_image_requirements;
use crate::rutabaga_gralloc::gralloc::Gralloc;
use crate::rutabaga_gralloc::gralloc::ImageAllocationInfo;
use crate::rutabaga_gralloc::gralloc::ImageMemoryRequirements;
use crate::rutabaga_utils::*;
pub struct SystemGralloc(());
impl SystemGralloc {
fn new() -> Self {
SystemGralloc(())
}
pub fn init() -> RutabagaResult<Box<dyn Gralloc>> {
Ok(Box::new(SystemGralloc::new()))
}
}
impl Gralloc for SystemGralloc {
fn supports_external_gpu_memory(&self) -> bool {
false
}
fn supports_dmabuf(&self) -> bool {
false
}
fn get_image_memory_requirements(
&mut self,
info: ImageAllocationInfo,
) -> RutabagaResult<ImageMemoryRequirements> {
let mut reqs = canonical_image_requirements(info)?;
reqs.map_info = RUTABAGA_MAP_CACHE_CACHED;
Ok(reqs)
}
fn allocate_memory(&mut self, reqs: ImageMemoryRequirements) -> RutabagaResult<MesaHandle> {
let shm = SharedMemory::new("rutabaga_gralloc", reqs.size)?;
Ok(MesaHandle {
os_handle: shm.into(),
handle_type: MESA_HANDLE_TYPE_MEM_SHM,
})
}
}