From: Ray Strode Date: Wed, 18 Aug 2010 20:16:35 +0000 (-0400) Subject: [drm] bail if not in 24bpp color mode X-Git-Tag: 0.8.4~172 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=625b82f2c3a4f7aa1ea90133fbbda854bd3c2f8d;p=thirdparty%2Fplymouth.git [drm] bail if not in 24bpp color mode Some server hardware gets initialized into 8bpp mode to conserve memory. We can't work in that mode, so we now check for it and back early. --- diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index 34a7a389..bf70f97c 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -766,6 +766,29 @@ get_index_of_active_mode (ply_renderer_backend_t *backend, return find_index_of_mode (backend, connector, &controller->mode); } +static bool +buffer_has_reasonable_color_depth (ply_renderer_backend_t *backend, + uint32_t buffer_id) +{ + + unsigned int color_depth; + bool has_reasonable_color_depth; + + if (!backend->driver_interface->fetch_buffer (backend->driver, + buffer_id, + NULL, NULL, NULL, &color_depth)) + return false; + + if (color_depth == 24 || color_depth == 32) + has_reasonable_color_depth = true; + else + has_reasonable_color_depth = false; + + backend->driver_interface->destroy_buffer (backend->driver, buffer_id); + + return has_reasonable_color_depth; +} + static bool create_heads_for_active_connectors (ply_renderer_backend_t *backend) { @@ -833,6 +856,13 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) console_buffer_id = controller->buffer_id; drmModeFreeCrtc (controller); + if (!buffer_has_reasonable_color_depth (backend, console_buffer_id)) + { + ply_trace ("frame buffer console doesn't have usable color depth"); + free_heads (backend); + return false; + } + head = ply_renderer_head_new (backend, connector, connector_mode_index, encoder_id, controller_id, console_buffer_id);