[PATCH weston v2 12/17] libweston: expose the drm backend's API

Giulio Camuffo giuliocamuffo at gmail.com
Thu Dec 4 13:01:18 PST 2014


---
 Makefile.am          |  1 +
 src/compositor-drm.c | 62 +++++++++++++---------------------------------------
 src/compositor-drm.h | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 76 insertions(+), 47 deletions(-)
 create mode 100644 src/compositor-drm.h

diff --git a/Makefile.am b/Makefile.am
index e35b33e..8f2ba15 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -167,6 +167,7 @@ westoninclude_HEADERS =				\
 	src/version.h				\
 	src/compositor.h			\
 	src/compositor-x11.h			\
+	src/compositor-drm.h			\
 	shared/matrix.h				\
 	shared/config-parser.h			\
 	shared/zalloc.h
diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index f94c1b7..c7d3253 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -45,6 +45,7 @@
 
 #include "libbacklight.h"
 #include "compositor.h"
+#include "compositor-drm.h"
 #include "gl-renderer.h"
 #include "pixman-renderer.h"
 #include "libinput-seat.h"
@@ -69,28 +70,6 @@
 
 static int option_current_mode = 0;
 
-enum output_config {
-	OUTPUT_CONFIG_INVALID = 0,
-	OUTPUT_CONFIG_OFF,
-	OUTPUT_CONFIG_PREFERRED,
-	OUTPUT_CONFIG_CURRENT,
-	OUTPUT_CONFIG_MODE,
-	OUTPUT_CONFIG_MODELINE
-};
-
-struct drm_output_parameters {
-	uint32_t format;
-	char *seat;
-	int scale;
-	uint32_t transform;
-	struct {
-		enum output_config config;
-		int width;
-		int height;
-		drmModeModeInfo modeline;
-	} mode;
-};
-
 struct drm_backend {
 	struct weston_backend base;
 	struct weston_compositor *compositor;
@@ -227,18 +206,6 @@ struct drm_sprite {
 	uint32_t formats[];
 };
 
-struct drm_parameters {
-	int connector;
-	int tty;
-	int use_pixman;
-	const char *seat_id;
-	uint32_t format;
-	void (*get_output_parameters)(const char *name,
-				      struct drm_output_parameters *parameters);
-	void (*configure_device)(struct weston_compositor *compositor,
-				 struct libinput_device *device);
-};
-
 static struct gl_renderer_interface *gl_renderer;
 
 static const char default_seat[] = "seat0";
@@ -1901,6 +1868,7 @@ create_output_for_connector(struct drm_backend *b,
 	output->base.name = strdup(name);
 
 	params.format = b->format;
+	params.seat = strdup("");
 
 	b->get_output_parameters(output->base.name, &params);
 	output->format = params.format;
@@ -1937,7 +1905,7 @@ create_output_for_connector(struct drm_backend *b,
 			goto err_free;
 	}
 
-	if (params.mode.config == OUTPUT_CONFIG_OFF) {
+	if (params.mode.config == DRM_OUTPUT_CONFIG_OFF) {
 		weston_log("Disabling output %s\n", output->base.name);
 		drmModeSetCrtc(b->drm.fd, output->crtc_id,
 			       0, 0, 0, 0, 0, NULL);
@@ -1950,7 +1918,7 @@ create_output_for_connector(struct drm_backend *b,
 	best = NULL;
 
 	wl_list_for_each_reverse(drm_mode, &output->base.mode_list, base.link) {
-		if (params.mode.config == OUTPUT_CONFIG_MODE &&
+		if (params.mode.config == DRM_OUTPUT_CONFIG_MODE &&
 		    params.mode.width == drm_mode->base.width &&
 		    params.mode.height == drm_mode->base.height)
 			configured = drm_mode;
@@ -1961,7 +1929,7 @@ create_output_for_connector(struct drm_backend *b,
 		best = drm_mode;
 	}
 
-	if (params.mode.config == OUTPUT_CONFIG_MODELINE) {
+	if (params.mode.config == DRM_OUTPUT_CONFIG_MODELINE) {
 		configured = drm_output_add_mode(output, &params.mode.modeline);
 		if (!configured)
 			goto err_free;
@@ -1973,7 +1941,7 @@ create_output_for_connector(struct drm_backend *b,
 			goto err_free;
 	}
 
-	if (params.mode.config == OUTPUT_CONFIG_CURRENT)
+	if (params.mode.config == DRM_OUTPUT_CONFIG_CURRENT)
 		configured = current;
 
 	if (option_current_mode && current)
@@ -2654,9 +2622,9 @@ renderer_switch_binding(struct weston_seat *seat, uint32_t time, uint32_t key,
 	switch_to_gl_renderer(b);
 }
 
-static struct drm_backend *
+WL_EXPORT struct drm_backend *
 drm_backend_create(struct weston_compositor *compositor,
-		      struct drm_parameters *param)
+		      struct drm_backend_parameters *param)
 {
 	struct drm_backend *b;
 	struct udev_device *drm_device;
@@ -2890,20 +2858,20 @@ output_parameters(const char *name, struct drm_output_parameters *params)
 	section = weston_config_get_section(wconfig, "output", "name", name);
 	weston_config_section_get_string(section, "mode", &s, "preferred");
 	if (strcmp(s, "off") == 0)
-		params->mode.config = OUTPUT_CONFIG_OFF;
+		params->mode.config = DRM_OUTPUT_CONFIG_OFF;
 	else if (strcmp(s, "preferred") == 0)
-		params->mode.config = OUTPUT_CONFIG_PREFERRED;
+		params->mode.config = DRM_OUTPUT_CONFIG_PREFERRED;
 	else if (strcmp(s, "current") == 0)
-		params->mode.config = OUTPUT_CONFIG_CURRENT;
+		params->mode.config = DRM_OUTPUT_CONFIG_CURRENT;
 	else if (sscanf(s, "%dx%d", &params->mode.width,
 				    &params->mode.height) == 2)
-		params->mode.config = OUTPUT_CONFIG_MODE;
+		params->mode.config = DRM_OUTPUT_CONFIG_MODE;
 	else if (parse_modeline(s, &params->mode.modeline) == 0)
-		params->mode.config = OUTPUT_CONFIG_MODELINE;
+		params->mode.config = DRM_OUTPUT_CONFIG_MODELINE;
 	else {
 		weston_log("Invalid mode \"%s\" for output %s\n",
 			   s, name);
-		params->mode.config = OUTPUT_CONFIG_PREFERRED;
+		params->mode.config = DRM_OUTPUT_CONFIG_PREFERRED;
 	}
 	free(s);
 
@@ -2934,7 +2902,7 @@ backend_init(struct weston_compositor *compositor, int *argc, char *argv[],
 	     struct weston_config *config)
 {
 	struct drm_backend *b;
-	struct drm_parameters param = { 0, };
+	struct drm_backend_parameters param = { 0, };
 	struct weston_config_section *section;
 	char *s;
 	int ret;
diff --git a/src/compositor-drm.h b/src/compositor-drm.h
new file mode 100644
index 0000000..1c565a0
--- /dev/null
+++ b/src/compositor-drm.h
@@ -0,0 +1,60 @@
+
+#ifndef WESTON_COMPOSITOR_DRM_H
+#define WESTON_COMPOSITOR_DRM_H
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+#include <xf86drm.h>
+#include <xf86drmMode.h>
+
+#include "compositor.h"
+
+struct libinput_device;
+
+enum drm_output_config {
+	DRM_OUTPUT_CONFIG_INVALID = 0,
+	DRM_OUTPUT_CONFIG_OFF,
+	DRM_OUTPUT_CONFIG_PREFERRED,
+	DRM_OUTPUT_CONFIG_CURRENT,
+	DRM_OUTPUT_CONFIG_MODE,
+	DRM_OUTPUT_CONFIG_MODELINE
+};
+
+struct drm_output_parameters {
+	uint32_t format;
+	char *seat;
+	int scale;
+	uint32_t transform;
+	struct {
+		enum drm_output_config config;
+		int width;
+		int height;
+		drmModeModeInfo modeline;
+	} mode;
+};
+
+struct drm_backend_parameters {
+	int connector;
+	int tty;
+	int use_pixman;
+	const char *seat_id;
+	uint32_t format;
+	void (*get_output_parameters)(const char *name,
+				      struct drm_output_parameters *parameters);
+	void (*configure_device)(struct weston_compositor *compositor,
+				 struct libinput_device *device);
+};
+
+struct drm_backend;
+
+struct drm_backend *
+drm_backend_create(struct weston_compositor *c,
+		   struct drm_backend_parameters *param);
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif
\ No newline at end of file
-- 
2.1.3



More information about the wayland-devel mailing list