diff options
author | Ray Strode <rstrode@redhat.com> | 2009-09-28 17:27:56 -0400 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2009-09-28 17:55:34 -0400 |
commit | 0b763c61b4a4d92539724bd83ab37efc2c7feeca (patch) | |
tree | bf137a68b1d4b0b91cf0b995fba9f8c50ddedfb0 | |
parent | fe6ee7723abe5d0706e3f2563f99cb8b96ac5ccf (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.c | 18 |
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; } |