Now that more and more hardware is getting kms support,
we need to be more careful about what hardware we try to
run on. Cirrus cards can't make 32bpp framebuffers, which
is all we support in the drm renderer.
This commit tries to create a small buffer up front, just
to see if the driver will allow it. If the driver chokes,
then we bail and fall back to the /dev/fb renderer, which
is more tolerant of aging hardware.
return ply_list_get_length (backend->heads) > 0;
}
+static bool
+has_32bpp_support (ply_renderer_backend_t *backend)
+{
+ uint32_t buffer_id;
+ unsigned long row_stride;
+
+ buffer_id = backend->driver_interface->create_buffer (backend->driver,
+ 1, 1,
+ &row_stride);
+
+ if (buffer_id == 0)
+ {
+ ply_trace ("Could not create 1x1 32bpp dummy buffer");
+ return false;
+ }
+
+ backend->driver_interface->destroy_buffer (backend->driver,
+ buffer_id);
+
+ return true;
+}
+
static bool
query_device (ply_renderer_backend_t *backend)
{
return false;
}
+ if (!has_32bpp_support (backend))
+ {
+ ply_trace ("Device doesn't support 32bpp framebuffer");
+ return false;
+ }
+
return true;
}