summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2009-09-28 17:27:56 -0400
committerRay Strode <rstrode@redhat.com>2009-09-28 17:55:34 -0400
commit0b763c61b4a4d92539724bd83ab37efc2c7feeca (patch)
treebf137a68b1d4b0b91cf0b995fba9f8c50ddedfb0
parentfe6ee7723abe5d0706e3f2563f99cb8b96ac5ccf (diff)
[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.
-rw-r--r--src/plugins/renderers/drm/plugin.c18
1 files changed, 18 insertions, 0 deletions
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;
}