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.
dev
Kristian Høgsberg 11 years ago
parent d8e9833017
commit 8e6f376ef0
  1. 7
      man/weston.ini.man
  2. 20
      src/compositor-drm.c
  3. 1
      weston.ini

@ -104,6 +104,13 @@ directory are:
.BR xwayland.so .BR xwayland.so
.fi .fi
.RE .RE
.TP 7
.BI "gbm-format="format
sets the GBM format used for the framebuffer for the GBM backend. Can be
.B xrgb8888,
.B xrgb2101010,
.B rgb565.
By default, xrgb8888 is used.
.RS .RS
.PP .PP

@ -2581,9 +2581,11 @@ drm_compositor_create(struct wl_display *display,
struct weston_config *config) struct weston_config *config)
{ {
struct drm_compositor *ec; struct drm_compositor *ec;
struct weston_config_section *section;
struct udev_device *drm_device; struct udev_device *drm_device;
struct wl_event_loop *loop; struct wl_event_loop *loop;
const char *path; const char *path;
char *s;
uint32_t key; uint32_t key;
weston_log("initializing drm backend\n"); weston_log("initializing drm backend\n");
@ -2595,7 +2597,23 @@ drm_compositor_create(struct wl_display *display,
/* KMS support for sprites is not complete yet, so disable the /* KMS support for sprites is not complete yet, so disable the
* functionality for now. */ * functionality for now. */
ec->sprites_are_broken = 1; 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; ec->use_pixman = param->use_pixman;
if (weston_compositor_init(&ec->base, display, argc, argv, if (weston_compositor_init(&ec->base, display, argc, argv,

@ -1,6 +1,7 @@
[core] [core]
#modules=xwayland.so,cms-colord.so #modules=xwayland.so,cms-colord.so
#shell=desktop-shell.so #shell=desktop-shell.so
#gbm-format=xrgb2101010
[shell] [shell]
background-image=/usr/share/backgrounds/gnome/Aqua.jpg background-image=/usr/share/backgrounds/gnome/Aqua.jpg

Loading…
Cancel
Save