compositor-drm: Support configuring the framebuffer format from weston.ini

This patch adds a new weston.ini key, gbm-format, to the [core] section.
This new key can be rgb565, xrgb8888 or xrgb2101010, and makes the
compositor use the corresponding GBM format for the framebuffer.
diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index 71cbcfa..4454599 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -2581,9 +2581,11 @@
 		      struct weston_config *config)
 {
 	struct drm_compositor *ec;
+	struct weston_config_section *section;
 	struct udev_device *drm_device;
 	struct wl_event_loop *loop;
 	const char *path;
+	char *s;
 	uint32_t key;
 
 	weston_log("initializing drm backend\n");
@@ -2595,7 +2597,23 @@
 	/* KMS support for sprites is not complete yet, so disable the
 	 * functionality for now. */
 	ec->sprites_are_broken = 1;
-	ec->format = GBM_FORMAT_XRGB8888;
+
+	section = weston_config_get_section(config, "core", NULL, NULL);
+	weston_config_section_get_string(section,
+					 "gbm-format", &s, "xrgb8888");
+	if (strcmp(s, "xrgb8888") == 0)
+		ec->format = GBM_FORMAT_XRGB8888;
+	else if (strcmp(s, "rgb565") == 0)
+		ec->format = GBM_FORMAT_RGB565;
+	else if (strcmp(s, "xrgb2101010") == 0)
+		ec->format = GBM_FORMAT_XRGB2101010;
+	else {
+		weston_log("fatal: unrecognized pixel format: %s\n", s);
+		free(s);
+		goto err_base;
+	}
+	free(s);
+
 	ec->use_pixman = param->use_pixman;
 
 	if (weston_compositor_init(&ec->base, display, argc, argv,