kms: Recreate graphics contexts on resume
This commit is contained in:
parent
9b89a1cc77
commit
b5a1a6d317
1 changed files with 27 additions and 0 deletions
|
|
@ -358,6 +358,14 @@ impl State {
|
|||
) {
|
||||
let backend = self.backend.kms();
|
||||
|
||||
// recreate all graphics contexts
|
||||
backend
|
||||
.clear_used_devices()
|
||||
.expect("This should never fail");
|
||||
if let Err(err) = backend.refresh_used_devices() {
|
||||
warn!(?err, "Failed to re-create graphics contexts");
|
||||
}
|
||||
|
||||
// resume input
|
||||
if let Err(err) = backend.libinput.resume() {
|
||||
error!(?err, "Failed to resume libinput context.");
|
||||
|
|
@ -591,6 +599,25 @@ impl KmsState {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn clear_used_devices(&mut self) -> Result<()> {
|
||||
let primary_node = self.primary_node.read().unwrap();
|
||||
let empty_devices = HashSet::new();
|
||||
|
||||
for device in self.drm_devices.values_mut() {
|
||||
if device.inner.egl.take().is_some() {
|
||||
self.api.as_mut().remove_node(&device.inner.render_node);
|
||||
device.inner.update_surface_nodes(&empty_devices, &[])?;
|
||||
}
|
||||
}
|
||||
|
||||
// trigger re-evaluation... urgh
|
||||
if let Some(primary_node) = primary_node.as_ref() {
|
||||
let _ = self.api.single_renderer(primary_node);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn refresh_used_devices(&mut self) -> Result<()> {
|
||||
let primary_node = self.primary_node.read().unwrap();
|
||||
let mut used_devices = HashSet::new();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue