Let gbm choose preferred modifier
This commit is contained in:
parent
49ca11ab0c
commit
fb7840d295
1 changed files with 11 additions and 6 deletions
|
|
@ -123,26 +123,30 @@ impl AppData {
|
||||||
return Ok(None);
|
return Ok(None);
|
||||||
};
|
};
|
||||||
let formats = feedback.format_table();
|
let formats = feedback.format_table();
|
||||||
let Some(format_info) = feedback
|
|
||||||
|
let modifiers = feedback
|
||||||
.tranches()
|
.tranches()
|
||||||
.iter()
|
.iter()
|
||||||
.flat_map(|x| &x.formats)
|
.flat_map(|x| &x.formats)
|
||||||
.filter_map(|x| formats.get(*x as usize))
|
.filter_map(|x| formats.get(*x as usize))
|
||||||
.find(|x| {
|
.filter(|x| {
|
||||||
x.format == buffer_info.format
|
x.format == buffer_info.format
|
||||||
&& (!needs_linear || x.modifier == u64::from(gbm::Modifier::Linear))
|
&& (!needs_linear || x.modifier == u64::from(gbm::Modifier::Linear))
|
||||||
})
|
})
|
||||||
else {
|
.filter_map(|x| gbm::Modifier::try_from(x.modifier).ok())
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
if modifiers.is_empty() {
|
||||||
return Ok(None);
|
return Ok(None);
|
||||||
};
|
};
|
||||||
let format = gbm::Format::try_from(buffer_info.format)?;
|
let format = gbm::Format::try_from(buffer_info.format)?;
|
||||||
let modifier = gbm::Modifier::try_from(format_info.modifier)?;
|
//dbg!(format, modifiers);
|
||||||
let bo = if modifier != gbm::Modifier::Invalid {
|
let bo = if !modifiers.iter().all(|x| *x == gbm::Modifier::Invalid) {
|
||||||
gbm.create_buffer_object_with_modifiers::<()>(
|
gbm.create_buffer_object_with_modifiers::<()>(
|
||||||
buffer_info.width,
|
buffer_info.width,
|
||||||
buffer_info.height,
|
buffer_info.height,
|
||||||
format,
|
format,
|
||||||
[modifier].into_iter(),
|
modifiers.iter().copied(),
|
||||||
)?
|
)?
|
||||||
} else {
|
} else {
|
||||||
// TODO make sure this isn't used across different GPUs
|
// TODO make sure this isn't used across different GPUs
|
||||||
|
|
@ -157,6 +161,7 @@ impl AppData {
|
||||||
let fd = bo.fd()?;
|
let fd = bo.fd()?;
|
||||||
let stride = bo.stride()?;
|
let stride = bo.stride()?;
|
||||||
let params = self.dmabuf_state.create_params(&self.qh)?;
|
let params = self.dmabuf_state.create_params(&self.qh)?;
|
||||||
|
let modifier = bo.modifier()?;
|
||||||
for i in 0..bo.plane_count()? as i32 {
|
for i in 0..bo.plane_count()? as i32 {
|
||||||
let plane_fd = bo.fd_for_plane(i)?;
|
let plane_fd = bo.fd_for_plane(i)?;
|
||||||
let plane_offset = bo.offset(i)?;
|
let plane_offset = bo.offset(i)?;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue