[PATCH weston v6 09/12] drm: Move drm's output configuration into the drm backend
Bryce Harrington
bryce at osg.samsung.com
Sat Apr 16 03:28:34 UTC 2016
Signed-off-by: Bryce Harrington <bryce at osg.samsung.com>
---
src/compositor-drm.c | 93 ++++++++++++++++++++++++++++++++++++++++++++--------
src/compositor-drm.h | 41 -----------------------
src/main.c | 43 ------------------------
3 files changed, 80 insertions(+), 97 deletions(-)
diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index 6ef706a..d129adc 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -75,6 +75,41 @@
#define GBM_BO_USE_CURSOR GBM_BO_USE_CURSOR_64X64
#endif
+enum weston_drm_backend_output_mode {
+ /** The output is disabled */
+ WESTON_DRM_BACKEND_OUTPUT_OFF,
+
+ /** The output will use the current active mode */
+ WESTON_DRM_BACKEND_OUTPUT_CURRENT,
+
+ /** The output will use the preferred mode. A modeline can be provided
+ * by setting weston_backend_output_config::modeline in the form of
+ * "WIDTHxHEIGHT" or in the form of an explicit modeline calculated
+ * using e.g. the cvt tool. If a valid modeline is supplied it will be
+ * used, if invalid or NULL the preferred available mode will be used. */
+ WESTON_DRM_BACKEND_OUTPUT_PREFERRED,
+};
+
+struct weston_drm_backend_output_config {
+ struct weston_backend_output_config base;
+
+ /** The pixel format to be used by the output. Valid values are:
+ * - NULL - The format set at backend creation time will be used
+ * - "xrgb8888"
+ * - "rgb565"
+ * - "xrgb2101010"
+ */
+ char *gbm_format;
+
+ /** The seat to be used by the output. Set to NULL to use the
+ * default seat. */
+ char *seat;
+
+ /** The modeline to be used by the output. Refer to the documentation
+ * of WESTON_DRM_BACKEND_OUTPUT_PREFERRED for details. */
+ char *modeline;
+};
+
struct drm_backend {
struct weston_backend base;
struct weston_compositor *compositor;
@@ -121,16 +156,6 @@ struct drm_backend {
int32_t cursor_width;
int32_t cursor_height;
- /** Callback used to configure the outputs.
- *
- * This function will be called by the backend when a new DRM
- * output needs to be configured.
- */
- enum weston_drm_backend_output_mode
- (*configure_output)(struct weston_compositor *compositor,
- bool use_current_mode,
- const char *name,
- struct weston_drm_backend_output_config *output_config);
bool use_current_mode;
};
@@ -2275,6 +2300,49 @@ connector_get_current_mode(drmModeConnector *connector, int drm_fd,
return 0;
}
+static enum weston_drm_backend_output_mode
+drm_configure_output(struct weston_compositor *c,
+ bool use_current_mode,
+ const char *name,
+ struct weston_drm_backend_output_config *config)
+{
+ struct weston_config *wc = weston_compositor_get_user_data(c);
+ struct weston_config_section *section;
+ char *s;
+ int scale;
+ enum weston_drm_backend_output_mode mode =
+ WESTON_DRM_BACKEND_OUTPUT_PREFERRED;
+
+ section = weston_config_get_section(wc, "output", "name", name);
+ weston_config_section_get_string(section, "mode", &s, "preferred");
+ if (strcmp(s, "off") == 0) {
+ free(s);
+ return WESTON_DRM_BACKEND_OUTPUT_OFF;
+ }
+
+ if (use_current_mode || strcmp(s, "current") == 0) {
+ mode = WESTON_DRM_BACKEND_OUTPUT_CURRENT;
+ } else if (strcmp(s, "preferred") != 0) {
+ config->modeline = s;
+ s = NULL;
+ }
+ free(s);
+
+ weston_config_section_get_int(section, "scale", &scale, 1);
+ config->base.scale = scale >= 1 ? scale : 1;
+ weston_config_section_get_string(section, "transform", &s, "normal");
+ if (weston_parse_transform(s, &config->base.transform) < 0)
+ weston_log("Invalid transform \"%s\" for output %s\n",
+ s, name);
+ free(s);
+
+ weston_config_section_get_string(section,
+ "gbm-format", &config->gbm_format, NULL);
+ weston_config_section_get_string(section, "seat", &config->seat, "");
+ return mode;
+}
+
+
/**
* Create and configure a Weston output structure
*
@@ -2321,8 +2389,8 @@ create_output_for_connector(struct drm_backend *b,
output->base.serial_number = "unknown";
wl_list_init(&output->base.mode_list);
- mode = b->configure_output(b->compositor, b->use_current_mode,
- output->base.name, &config);
+ mode = drm_configure_output(b->compositor, b->use_current_mode,
+ output->base.name, &config);
if (parse_gbm_format(config.gbm_format, b->gbm_format, &output->gbm_format) == -1)
output->gbm_format = b->gbm_format;
@@ -3059,7 +3127,6 @@ drm_backend_create(struct weston_compositor *compositor,
b->sprites_are_broken = 1;
b->compositor = compositor;
b->use_pixman = config->use_pixman;
- b->configure_output = config->configure_output;
b->use_current_mode = config->use_current_mode;
if (parse_gbm_format(config->gbm_format, GBM_FORMAT_XRGB8888, &b->gbm_format) < 0)
diff --git a/src/compositor-drm.h b/src/compositor-drm.h
index 3b2dc17..e57b742 100644
--- a/src/compositor-drm.h
+++ b/src/compositor-drm.h
@@ -36,37 +36,6 @@ extern "C" {
#define WESTON_DRM_BACKEND_CONFIG_VERSION 1
-enum weston_drm_backend_output_mode {
- /** The output is disabled */
- WESTON_DRM_BACKEND_OUTPUT_OFF,
- /** The output will use the current active mode */
- WESTON_DRM_BACKEND_OUTPUT_CURRENT,
- /** The output will use the preferred mode. A modeline can be provided
- * by setting weston_backend_output_config::modeline in the form of
- * "WIDTHxHEIGHT" or in the form of an explicit modeline calculated
- * using e.g. the cvt tool. If a valid modeline is supplied it will be
- * used, if invalid or NULL the preferred available mode will be used. */
- WESTON_DRM_BACKEND_OUTPUT_PREFERRED,
-};
-
-struct weston_drm_backend_output_config {
- struct weston_backend_output_config base;
-
- /** The pixel format to be used by the output. Valid values are:
- * - NULL - The format set at backend creation time will be used;
- * - "xrgb8888";
- * - "rgb565"
- * - "xrgb2101010"
- */
- char *gbm_format;
- /** The seat to be used by the output. Set to NULL to use the
- * default seat. */
- char *seat;
- /** The modeline to be used by the output. Refer to the documentation
- * of WESTON_DRM_BACKEND_OUTPUT_PREFERRED for details. */
- char *modeline;
-};
-
/** The backend configuration struct.
*
* weston_drm_backend_config contains the configuration used by a DRM
@@ -107,16 +76,6 @@ struct weston_drm_backend_config {
*/
char *gbm_format;
- /** Callback used to configure the outputs.
- *
- * This function will be called by the backend when a new DRM
- * output needs to be configured.
- */
- enum weston_drm_backend_output_mode
- (*configure_output)(struct weston_compositor *compositor,
- bool use_current_mode,
- const char *name,
- struct weston_drm_backend_output_config *output_config);
bool use_current_mode;
};
diff --git a/src/main.c b/src/main.c
index 21b7f5c..dcd5ee6 100644
--- a/src/main.c
+++ b/src/main.c
@@ -674,48 +674,6 @@ load_backend_new(struct weston_compositor *compositor, const char *backend,
return backend_init(compositor, NULL, NULL, NULL, config_base);
}
-static enum weston_drm_backend_output_mode
-drm_configure_output(struct weston_compositor *c,
- bool use_current_mode,
- const char *name,
- struct weston_drm_backend_output_config *config)
-{
- struct weston_config *wc = weston_compositor_get_user_data(c);
- struct weston_config_section *section;
- char *s;
- int scale;
- enum weston_drm_backend_output_mode mode =
- WESTON_DRM_BACKEND_OUTPUT_PREFERRED;
-
- section = weston_config_get_section(wc, "output", "name", name);
- weston_config_section_get_string(section, "mode", &s, "preferred");
- if (strcmp(s, "off") == 0) {
- free(s);
- return WESTON_DRM_BACKEND_OUTPUT_OFF;
- }
-
- if (use_current_mode || strcmp(s, "current") == 0) {
- mode = WESTON_DRM_BACKEND_OUTPUT_CURRENT;
- } else if (strcmp(s, "preferred") != 0) {
- config->modeline = s;
- s = NULL;
- }
- free(s);
-
- weston_config_section_get_int(section, "scale", &scale, 1);
- config->base.scale = scale >= 1 ? scale : 1;
- weston_config_section_get_string(section, "transform", &s, "normal");
- if (weston_parse_transform(s, &config->base.transform) < 0)
- weston_log("Invalid transform \"%s\" for output %s\n",
- s, name);
- free(s);
-
- weston_config_section_get_string(section,
- "gbm-format", &config->gbm_format, NULL);
- weston_config_section_get_string(section, "seat", &config->seat, "");
- return mode;
-}
-
static int
load_drm_backend(struct weston_compositor *c, const char *backend,
int *argc, char **argv, struct weston_config *wc)
@@ -745,7 +703,6 @@ load_drm_backend(struct weston_compositor *c, const char *backend,
config->base.struct_version = WESTON_DRM_BACKEND_CONFIG_VERSION;
config->base.struct_size = sizeof(struct weston_drm_backend_config);
- config->configure_output = drm_configure_output;
ret = load_backend_new(c, backend,
(struct weston_backend_config *)config);
--
1.9.1
More information about the wayland-devel
mailing list