]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
[drm] Force fb backend if 1 head and ttm driver
authorRay Strode <rstrode@redhat.com>
Mon, 28 Sep 2009 21:27:56 +0000 (17:27 -0400)
committerRay Strode <rstrode@redhat.com>
Mon, 28 Sep 2009 21:55:34 +0000 (17:55 -0400)
Drivers backed by TTM memory manager don't support mapping the
kernel backed framebuffer console, so can't be used for doing
a smooth transition (unless you use /dev/fb).  In single head
configurations, there isn't a big advantage to using libdrm
anyway, so we bail for TTM drivers.

src/plugins/renderers/drm/plugin.c

index 239f8aee3f02a6cbcd97ba077a10d84edc9276b5..9047d79e74ebd84218066124c94d950bd682f14c 100644 (file)
@@ -98,6 +98,7 @@ struct _ply_renderer_backend
 
   ply_renderer_driver_interface_t *driver_interface;
   ply_renderer_driver_t *driver;
+  uint32_t driver_supports_mapping_console;
 
   int device_fd;
   char *device_name;
@@ -409,14 +410,17 @@ load_driver (ply_renderer_backend_t *backend)
   if (strcmp (driver_name, "i915") == 0)
     {
       backend->driver_interface = ply_renderer_i915_driver_get_interface ();
+      backend->driver_supports_mapping_console = true;
     }
   else if (strcmp (driver_name, "radeon") == 0)
     {
       backend->driver_interface = ply_renderer_radeon_driver_get_interface ();
+      backend->driver_supports_mapping_console = false;
     }
   else if (strcmp (driver_name, "nouveau") == 0)
     {
       backend->driver_interface = ply_renderer_nouveau_driver_get_interface ();
+      backend->driver_supports_mapping_console = false;
     }
   free (driver_name);
 
@@ -717,6 +721,20 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend)
       ply_list_append_data (backend->heads, head);
     }
 
+  /* If the driver doesn't support mapping the fb console
+   * then we can't get a smooth crossfade transition to
+   * the display manager unless we use the /dev/fb interface.
+   *
+   * In multihead configurations, we'd rather have working
+   * multihead, but otherwise bail now.
+   */
+  if (!backend->driver_supports_mapping_console &&
+      ply_list_get_length (backend->heads) == 1)
+    {
+      free_heads (backend);
+      return false;
+    }
+
   return ply_list_get_length (backend->heads) > 0;
 }