]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
[drm] bail if not in 24bpp color mode
authorRay Strode <rstrode@redhat.com>
Wed, 18 Aug 2010 20:16:35 +0000 (16:16 -0400)
committerRay Strode <rstrode@redhat.com>
Wed, 18 Aug 2010 20:18:16 +0000 (16:18 -0400)
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.

src/plugins/renderers/drm/plugin.c

index 34a7a3899b7f7538e01e0e5200ad29aa73d75108..bf70f97cca7463efba7257b499a213d6d11de0cd 100644 (file)
@@ -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);