mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-22 13:08:09 +02:00
55 lines
1.4 KiB
Rust
55 lines
1.4 KiB
Rust
|
|
// Copyright 2025 Google
|
||
|
|
// SPDX-License-Identifier: MIT
|
||
|
|
|
||
|
|
use crate::defines::MappedRegion;
|
||
|
|
use crate::sys::platform::MemoryMapping as PlatformMapping;
|
||
|
|
use crate::MesaMapping;
|
||
|
|
use crate::MesaResult;
|
||
|
|
use crate::OwnedDescriptor;
|
||
|
|
|
||
|
|
pub struct MemoryMapping {
|
||
|
|
mapping: PlatformMapping,
|
||
|
|
}
|
||
|
|
|
||
|
|
impl MemoryMapping {
|
||
|
|
pub fn from_safe_descriptor(
|
||
|
|
descriptor: OwnedDescriptor,
|
||
|
|
size: usize,
|
||
|
|
map_info: u32,
|
||
|
|
) -> MesaResult<MemoryMapping> {
|
||
|
|
let mapping = PlatformMapping::from_safe_descriptor(descriptor, size, map_info)?;
|
||
|
|
Ok(MemoryMapping { mapping })
|
||
|
|
}
|
||
|
|
|
||
|
|
pub fn from_offset(
|
||
|
|
descriptor: &OwnedDescriptor,
|
||
|
|
offset: usize,
|
||
|
|
size: usize,
|
||
|
|
) -> MesaResult<MemoryMapping> {
|
||
|
|
let mapping = PlatformMapping::from_offset(descriptor, offset, size)?;
|
||
|
|
Ok(MemoryMapping { mapping })
|
||
|
|
}
|
||
|
|
|
||
|
|
pub fn as_mesa_mapping(&self) -> MesaMapping {
|
||
|
|
MesaMapping {
|
||
|
|
ptr: self.mapping.addr as u64,
|
||
|
|
size: self.mapping.size as u64,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// SAFETY: Safe since these functions just access the MemoryMapping structure.
|
||
|
|
unsafe impl MappedRegion for MemoryMapping {
|
||
|
|
fn as_ptr(&self) -> *mut u8 {
|
||
|
|
self.mapping.addr as *mut u8
|
||
|
|
}
|
||
|
|
|
||
|
|
fn size(&self) -> usize {
|
||
|
|
self.mapping.size
|
||
|
|
}
|
||
|
|
|
||
|
|
fn as_mesa_mapping(&self) -> MesaMapping {
|
||
|
|
self.as_mesa_mapping()
|
||
|
|
}
|
||
|
|
}
|