compositor-fbdev: drop EGL support

EGL code was added to the fbdev backend in
4aa756dc7a8d3cf3b4c6f018c3e2a053fff424b0 in 2013, apparently for running
Weston on libhybris with Android hardware drivers.

This actually had nothing to do with the fbdev backend, really. Fbdev
was just a convenient platform to plug in the EGL init code and load
GL-renderer. Fbdev itself was not used at all in this case.

Fbdev should be forgotten and die, as we have better interfaces for
accelerated rendering and for controlling displays. It may be a bit too
harsh to remove the whole fbdev backend just yet, but let us at least
simplify it this much.

Fbdev+EGL has been the unholy union used by proprietary driver stacks of
hardware vendors in the non-PC world as a quick and dirty way to get
something out on the screen. In these cases it is actually the EGL
implementation that does everything internally, fbdev is not needed.
Fbdev was never meant for the sort anyway.

If anyone still needs this use case, I recommend sticking with a
outdated Weston to match your outdated platform. Or if you really
insist, write a new backend that does not pretend to use fbdev and just
initializes EGL and GL-renderer.

Cc: Adrian Negreanu <groleo@gmail.com>
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Reviewed-by: Quentin Glidic <sardemff7+git@sardemff7.net>
Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
diff --git a/src/compositor-fbdev.c b/src/compositor-fbdev.c
index 3f2347f..e21ceca 100644
--- a/src/compositor-fbdev.c
+++ b/src/compositor-fbdev.c
@@ -48,7 +48,6 @@
 #include "launcher-util.h"
 #include "pixman-renderer.h"
 #include "libinput-seat.h"
-#include "gl-renderer.h"
 #include "presentation-time-server-protocol.h"
 
 struct fbdev_backend {
@@ -58,7 +57,6 @@
 
 	struct udev *udev;
 	struct udev_input input;
-	int use_pixman;
 	uint32_t output_transform;
 	struct wl_listener session_listener;
 };
@@ -95,8 +93,6 @@
 	uint8_t depth;
 };
 
-struct gl_renderer_interface *gl_renderer;
-
 static const char default_seat[] = "seat0";
 
 static inline struct fbdev_output *
@@ -120,8 +116,8 @@
 	weston_output_finish_frame(output, &ts, WP_PRESENTATION_FEEDBACK_INVALID);
 }
 
-static void
-fbdev_output_repaint_pixman(struct weston_output *base, pixman_region32_t *damage)
+static int
+fbdev_output_repaint(struct weston_output *base, pixman_region32_t *damage)
 {
 	struct fbdev_output *output = to_fbdev_output(base);
 	struct weston_compositor *ec = output->base.compositor;
@@ -143,26 +139,6 @@
 	 * refresh rate is given in mHz and the interval in ms. */
 	wl_event_source_timer_update(output->finish_frame_timer,
 	                             1000000 / output->mode.refresh);
-}
-
-static int
-fbdev_output_repaint(struct weston_output *base, pixman_region32_t *damage)
-{
-	struct fbdev_output *output = to_fbdev_output(base);
-	struct fbdev_backend *fbb = output->backend;
-	struct weston_compositor *ec = fbb->compositor;
-
-	if (fbb->use_pixman) {
-		fbdev_output_repaint_pixman(base,damage);
-	} else {
-		ec->renderer->repaint_output(base, damage);
-		/* Update the damage region. */
-		pixman_region32_subtract(&ec->primary_plane.damage,
-	                         &ec->primary_plane.damage, damage);
-
-		wl_event_source_timer_update(output->finish_frame_timer,
-	                             1000000 / output->mode.refresh);
-	}
 
 	return 0;
 }
@@ -471,13 +447,10 @@
 		weston_log("Creating frame buffer failed.\n");
 		goto out_free;
 	}
-	if (backend->use_pixman) {
-		if (fbdev_frame_buffer_map(output, fb_fd) < 0) {
-			weston_log("Mapping frame buffer failed.\n");
-			goto out_free;
-		}
-	} else {
-		close(fb_fd);
+
+	if (fbdev_frame_buffer_map(output, fb_fd) < 0) {
+		weston_log("Mapping frame buffer failed.\n");
+		goto out_free;
 	}
 
 	output->base.start_repaint_loop = fbdev_output_start_repaint_loop;
@@ -505,19 +478,8 @@
 	                   backend->output_transform,
 			   1);
 
-	if (backend->use_pixman) {
-		if (pixman_renderer_output_create(&output->base) < 0)
-			goto out_hw_surface;
-	} else {
-		setenv("HYBRIS_EGLPLATFORM", "wayland", 1);
-		if (gl_renderer->output_create(&output->base,
-					       (EGLNativeWindowType)NULL, NULL,
-					       gl_renderer->opaque_attribs,
-					       NULL, 0) < 0) {
-			weston_log("gl_renderer_output_create failed.\n");
-			goto out_hw_surface;
-		}
-	}
+	if (pixman_renderer_output_create(&output->base) < 0)
+		goto out_hw_surface;
 
 	loop = wl_display_get_event_loop(backend->compositor->wl_display);
 	output->finish_frame_timer =
@@ -548,19 +510,14 @@
 fbdev_output_destroy(struct weston_output *base)
 {
 	struct fbdev_output *output = to_fbdev_output(base);
-	struct fbdev_backend *backend = output->backend;
 
 	weston_log("Destroying fbdev output.\n");
 
 	/* Close the frame buffer. */
 	fbdev_output_disable(base);
 
-	if (backend->use_pixman) {
-		if (base->renderer_state != NULL)
-			pixman_renderer_output_destroy(base);
-	} else {
-		gl_renderer->output_destroy(base);
-	}
+	if (base->renderer_state != NULL)
+		pixman_renderer_output_destroy(base);
 
 	/* Remove the output. */
 	weston_output_destroy(&output->base);
@@ -629,11 +586,9 @@
 	}
 
 	/* Map the device if it has the same details as before. */
-	if (backend->use_pixman) {
-		if (fbdev_frame_buffer_map(output, fb_fd) < 0) {
-			weston_log("Mapping frame buffer failed.\n");
-			goto err;
-		}
+	if (fbdev_frame_buffer_map(output, fb_fd) < 0) {
+		weston_log("Mapping frame buffer failed.\n");
+		goto err;
 	}
 
 	return 0;
@@ -649,12 +604,9 @@
 fbdev_output_disable(struct weston_output *base)
 {
 	struct fbdev_output *output = to_fbdev_output(base);
-	struct fbdev_backend *backend = output->backend;
 
 	weston_log("Disabling fbdev output.\n");
 
-	if ( ! backend->use_pixman) return;
-
 	if (output->hw_surface != NULL) {
 		pixman_image_unref(output->hw_surface);
 		output->hw_surface = NULL;
@@ -768,30 +720,12 @@
 	backend->base.restore = fbdev_restore;
 
 	backend->prev_state = WESTON_COMPOSITOR_ACTIVE;
-	backend->use_pixman = !param->use_gl;
 	backend->output_transform = param->output_transform;
 
 	weston_setup_vt_switch_bindings(compositor);
 
-	if (backend->use_pixman) {
-		if (pixman_renderer_init(compositor) < 0)
-			goto out_launcher;
-	} else {
-		gl_renderer = weston_load_module("gl-renderer.so",
-						 "gl_renderer_interface");
-		if (!gl_renderer) {
-			weston_log("could not load gl renderer\n");
-			goto out_launcher;
-		}
-
-		if (gl_renderer->create(compositor, NO_EGL_PLATFORM,
-					EGL_DEFAULT_DISPLAY,
-					gl_renderer->opaque_attribs,
-					NULL, 0) < 0) {
-			weston_log("gl_renderer_create failed.\n");
-			goto out_launcher;
-		}
-	}
+	if (pixman_renderer_init(compositor) < 0)
+		goto out_launcher;
 
 	if (fbdev_output_create(backend, param->device) < 0)
 		goto out_launcher;
@@ -822,7 +756,6 @@
 	 * udev, rather than passing a device node in as a parameter. */
 	config->tty = 0; /* default to current tty */
 	config->device = "/dev/fb0"; /* default frame buffer */
-	config->use_gl = 0;
 	config->output_transform = WL_OUTPUT_TRANSFORM_NORMAL;
 }
 
diff --git a/src/compositor-fbdev.h b/src/compositor-fbdev.h
index 450be5d..9b5bf8e 100644
--- a/src/compositor-fbdev.h
+++ b/src/compositor-fbdev.h
@@ -41,7 +41,6 @@
 
 	int tty;
 	char *device;
-	int use_gl;
 
 	uint32_t output_transform;
 
diff --git a/src/main.c b/src/main.c
index 193a845..d022615 100644
--- a/src/main.c
+++ b/src/main.c
@@ -516,7 +516,7 @@
 		"Options for fbdev-backend.so:\n\n"
 		"  --tty=TTY\t\tThe tty to use\n"
 		"  --device=DEVICE\tThe framebuffer device to use\n"
-		"  --use-gl\t\tUse the GL renderer\n\n");
+		"\n");
 #endif
 
 #if defined(BUILD_HEADLESS_COMPOSITOR)
@@ -1111,7 +1111,6 @@
 	const struct weston_option fbdev_options[] = {
 		{ WESTON_OPTION_INTEGER, "tty", 0, &config.tty },
 		{ WESTON_OPTION_STRING, "device", 0, &config.device },
-		{ WESTON_OPTION_BOOLEAN, "use-gl", 0, &config.use_gl },
 	};
 
 	parse_options(fbdev_options, ARRAY_LENGTH(fbdev_options), argc, argv);