drivers/graphics: Use set_crtc+dirtyfb in V2DisplayMap
This commit is contained in:
@@ -6,7 +6,7 @@ use std::{cmp, io, mem, ptr};
|
||||
|
||||
use drm::buffer::{Buffer, DrmFourcc};
|
||||
use drm::control::dumbbuffer::{DumbBuffer, DumbMapping};
|
||||
use drm::control::{framebuffer, Device};
|
||||
use drm::control::{framebuffer, ClipRect, Device};
|
||||
use graphics_ipc::v2::{Damage, V2GraphicsHandle};
|
||||
use orbclient::FONT;
|
||||
|
||||
@@ -25,6 +25,14 @@ impl V2DisplayMap {
|
||||
let mode = connector_info.modes()[0];
|
||||
let (width, height) = mode.size();
|
||||
|
||||
// FIXME do something smarter that avoids conflicts
|
||||
let crtc = display_handle.resource_handles().unwrap().filter_crtcs(
|
||||
display_handle
|
||||
.get_encoder(connector_info.encoders()[0])
|
||||
.unwrap()
|
||||
.possible_crtcs(),
|
||||
)[0];
|
||||
|
||||
let mut buffer = display_handle.create_dumb_buffer(
|
||||
(width.into(), height.into()),
|
||||
DrmFourcc::Argb8888,
|
||||
@@ -32,6 +40,8 @@ impl V2DisplayMap {
|
||||
)?;
|
||||
let fb = display_handle.add_framebuffer(&buffer, 32, 32)?;
|
||||
|
||||
display_handle.set_crtc(crtc, Some(fb), (0, 0), &[connector], Some(mode))?;
|
||||
|
||||
let map = display_handle.map_dumb_buffer(&mut buffer)?;
|
||||
let map = unsafe { mem::transmute::<DumbMapping<'_>, DumbMapping<'static>>(map) };
|
||||
|
||||
@@ -55,8 +65,15 @@ impl V2DisplayMap {
|
||||
}
|
||||
|
||||
pub fn dirty_fb(&self, damage: Damage) -> io::Result<()> {
|
||||
self.display_handle
|
||||
.update_plane(0, u32::from(self.fb), damage)
|
||||
self.display_handle.dirty_framebuffer(
|
||||
self.fb,
|
||||
&[ClipRect::new(
|
||||
damage.x as u16,
|
||||
damage.y as u16,
|
||||
(damage.x + damage.width) as u16,
|
||||
(damage.y + damage.height) as u16,
|
||||
)],
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user