From: Ray Strode Date: Mon, 28 Sep 2009 21:27:56 +0000 (-0400) Subject: [drm] Force fb backend if 1 head and ttm driver X-Git-Tag: 0.8.0~188^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0b763c61b4a4d92539724bd83ab37efc2c7feeca;p=thirdparty%2Fplymouth.git [drm] Force fb backend if 1 head and ttm driver 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. --- diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index 239f8aee..9047d79e 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -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; }