gioser

tawasuyu/brahman

Rust 226TOML 67JSON 14HTML 12860 Definiciones

fix(mirada-compositor): backend DRM — modo de mayor área + log de modos

El borde negro seguía: la marca PREFERRED del panel no es fiable (a
veces apunta a un modo menor). Ahora se elige el modo de mayor área
(a igualdad, mayor refresco), y se registran todos los modos del
conector para diagnóstico.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

30669f970b2144089b1b192e2d53cb6826555237 · por sergio · (hace 5 meses) · padre 97a725b87 · ver el árbol en este commit

Delta semántico · 1

crates/apps/mirada-compositor/src/drm_backend.rs

  • cambió por dentro fn run pub

1 archivos · +16 −8

diff --git a/crates/apps/mirada-compositor/src/drm_backend.rs b/crates/apps/mirada-compositor/src/drm_backend.rs
index 014efdd..6baec05 100644
--- a/crates/apps/mirada-compositor/src/drm_backend.rs
+++ b/crates/apps/mirada-compositor/src/drm_backend.rs
@@ -263,17 +263,25 @@ pub fn run() -> Result<(), Box<dyn Error>> {
             continue;
         }
         let name = format!("{:?}-{}", conn.interface(), conn.interface_id());
-        // El modo: el marcado PREFERRED (el nativo del panel) y, si no
-        // hay ninguno marcado, el de mayor área. `modes()[0]` no sirve —
-        // suele ser un modo menor (p. ej. 1920×1080 en un panel 16:10).
+        // Registra todos los modos del panel — diagnóstico.
+        for m in conn.modes() {
+            let (mw, mh) = m.size();
+            let pref = if m.mode_type().contains(ModeTypeFlags::PREFERRED) {
+                " [PREFERRED]"
+            } else {
+                ""
+            };
+            eprintln!("      modo de «{name}»: {mw}×{mh} @ {} Hz{pref}", m.vrefresh());
+        }
+        // Elige el modo de mayor área (a igualdad, mayor refresco) — el
+        // nativo del panel. La marca PREFERRED no es fiable: a veces
+        // señala un modo menor.
         let mode = conn
             .modes()
             .iter()
-            .find(|m| m.mode_type().contains(ModeTypeFlags::PREFERRED))
-            .or_else(|| {
-                conn.modes()
-                    .iter()
-                    .max_by_key(|m| m.size().0 as u32 * m.size().1 as u32)
+            .max_by_key(|m| {
+                let (mw, mh) = m.size();
+                (mw as u32 * mh as u32, m.vrefresh())
             })
             .copied();
         let Some(mode) = mode else {