Created
September 28, 2023 07:53
-
-
Save tronical/66a0baa7818e48c082788b32c01099cc to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/internal/backends/linuxkms/display/egldisplay.rs b/internal/backends/linuxkms/display/egldisplay.rs | |
index 2dd96746f..0f66aa499 100644 | |
--- a/internal/backends/linuxkms/display/egldisplay.rs | |
+++ b/internal/backends/linuxkms/display/egldisplay.rs | |
@@ -204,19 +204,32 @@ pub fn try_create_egl_display( | |
}) | |
.ok_or_else(|| format!("No preferred or non-zero size display mode found"))?; | |
- let encoder = connector | |
- .encoders() | |
- .iter() | |
- .find_map(|handle| { | |
- if connector.current_encoder() == Some(*handle) { | |
- drm_device.get_encoder(*handle).ok() | |
- } else { | |
- None | |
- } | |
- }) | |
- .ok_or_else(|| format!("Not encoder found for connector"))?; | |
+ let encoder = connector.encoders().iter().find_map(|handle| { | |
+ if connector.current_encoder() == Some(*handle) { | |
+ drm_device.get_encoder(*handle).ok() | |
+ } else { | |
+ None | |
+ } | |
+ }); | |
- let crtc = encoder.crtc().ok_or_else(|| format!("no crtc for encoder"))?; | |
+ let crtc = if let Some(encoder) = encoder { | |
+ encoder.crtc().ok_or_else(|| format!("no crtc for encoder"))? | |
+ } else { | |
+ // No crtc found for current encoder? Pick the first possible ctrc. | |
+ connector | |
+ .encoders() | |
+ .iter() | |
+ .filter_map(|handle| drm_device.get_encoder(*handle).ok()) | |
+ .flat_map(|encoder| resources.filter_crtcs(encoder.possible_crtcs())) | |
+ .find(|crtc_handle| drm_device.get_crtc(*crtc_handle).is_ok()) | |
+ .ok_or_else(|| { | |
+ format!( | |
+ "Could not find any crtc for any encoder connected to output {}-{}", | |
+ connector.interface().as_str(), | |
+ connector.interface_id() | |
+ ) | |
+ })? | |
+ }; | |
let (width, height) = mode.size(); | |
let width = std::num::NonZeroU32::new(width as _) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment