Simplify buffer creation code

This commit is contained in:
Ian Douglas Scott 2024-01-26 14:30:23 -08:00
parent d869a29be7
commit a90a3a16b2

View file

@ -84,10 +84,7 @@ pub struct Buffer {
} }
impl AppData { impl AppData {
fn create_shm_backing( fn create_shm_buffer(&self, buffer_info: &BufferInfo) -> Buffer {
&self,
buffer_info: &BufferInfo,
) -> (BufferBacking, Mmap, wl_buffer::WlBuffer) {
let fd = create_memfile().unwrap(); // XXX? let fd = create_memfile().unwrap(); // XXX?
rustix::fs::ftruncate(&fd, buffer_info.stride as u64 * buffer_info.height as u64); rustix::fs::ftruncate(&fd, buffer_info.stride as u64 * buffer_info.height as u64);
@ -111,15 +108,20 @@ impl AppData {
let mmap = unsafe { Mmap::map(&fd).unwrap() }; let mmap = unsafe { Mmap::map(&fd).unwrap() };
(BufferBacking::Shm { fd }, mmap, buffer) Buffer {
backing: BufferBacking::Shm { fd },
mmap,
buffer,
buffer_info: buffer_info.clone(),
}
} }
#[allow(dead_code)] #[allow(dead_code)]
fn create_gbm_backing( fn create_gbm_buffer(
&self, &self,
buffer_info: &BufferInfo, buffer_info: &BufferInfo,
needs_linear: bool, needs_linear: bool,
) -> anyhow::Result<Option<(BufferBacking, Mmap, wl_buffer::WlBuffer)>> { ) -> anyhow::Result<Option<Buffer>> {
let (Some((node, gbm)), Some(feedback)) = let (Some((node, gbm)), Some(feedback)) =
(self.gbm.as_ref(), self.dmabuf_feedback.as_ref()) (self.gbm.as_ref(), self.dmabuf_feedback.as_ref())
else { else {
@ -185,15 +187,16 @@ impl AppData {
// Is there any cost to mmapping dma memory if it isn't accessed? // Is there any cost to mmapping dma memory if it isn't accessed?
let mmap = unsafe { Mmap::map(&fd).unwrap() }; let mmap = unsafe { Mmap::map(&fd).unwrap() };
Ok(Some(( Ok(Some(Buffer {
BufferBacking::Dmabuf { backing: BufferBacking::Dmabuf {
fd, fd,
node: node.clone(), node: node.clone(),
stride, stride,
}, },
mmap, mmap,
buffer, buffer,
))) buffer_info: buffer_info.clone(),
}))
} }
pub fn create_buffer(&self, buffer_infos: &[BufferInfo]) -> Buffer { pub fn create_buffer(&self, buffer_infos: &[BufferInfo]) -> Buffer {
@ -205,14 +208,9 @@ impl AppData {
.iter() .iter()
.find(|x| x.type_ == WEnum::Value(BufferType::Dmabuf) && x.format == format) .find(|x| x.type_ == WEnum::Value(BufferType::Dmabuf) && x.format == format)
{ {
match self.create_gbm_backing(buffer_info, true) { match self.create_gbm_buffer(buffer_info, true) {
Ok(Some((backing, mmap, buffer))) => { Ok(Some(buffer)) => {
return Buffer { return buffer;
backing,
mmap,
buffer,
buffer_info: buffer_info.clone(),
};
} }
Ok(None) => {} Ok(None) => {}
Err(err) => eprintln!("Failed to create gbm buffer: {}", err), Err(err) => eprintln!("Failed to create gbm buffer: {}", err),
@ -226,13 +224,7 @@ impl AppData {
.iter() .iter()
.find(|x| x.type_ == WEnum::Value(BufferType::WlShm) && x.format == format) .find(|x| x.type_ == WEnum::Value(BufferType::WlShm) && x.format == format)
.unwrap(); .unwrap();
let (backing, mmap, buffer) = self.create_shm_backing(buffer_info); self.create_shm_buffer(buffer_info)
Buffer {
backing,
mmap,
buffer,
buffer_info: buffer_info.clone(),
}
} }
} }