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();
|
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
|
// resume input
|
||||||
if let Err(err) = backend.libinput.resume() {
|
if let Err(err) = backend.libinput.resume() {
|
||||||
error!(?err, "Failed to resume libinput context.");
|
error!(?err, "Failed to resume libinput context.");
|
||||||
|
|
@ -591,6 +599,25 @@ impl KmsState {
|
||||||
Ok(())
|
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<()> {
|
pub fn refresh_used_devices(&mut self) -> Result<()> {
|
||||||
let primary_node = self.primary_node.read().unwrap();
|
let primary_node = self.primary_node.read().unwrap();
|
||||||
let mut used_devices = HashSet::new();
|
let mut used_devices = HashSet::new();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue