Simplify buffer creation code
This commit is contained in:
parent
d869a29be7
commit
a90a3a16b2
1 changed files with 17 additions and 25 deletions
|
|
@ -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(),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue