compositor: Create outputs before initializing GLES2 state

This way we can just use the first weston_output EGLSurface to make a
context current.
diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index cbb3253..d310194 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -88,9 +88,6 @@
 	uint32_t connector_allocator;
 	struct tty *tty;
 
-	struct gbm_surface *dummy_surface;
-	EGLSurface dummy_egl_surface;
-
 	/* we need these parameters in order to not fail drmModeAddFB2()
 	 * due to out of bounds dimensions, and then mistakenly set
 	 * sprites_are_broken:
@@ -1112,30 +1109,6 @@
 		return -1;
 	}
 
-	ec->dummy_surface = gbm_surface_create(ec->gbm, 10, 10,
-					       GBM_FORMAT_XRGB8888,
-					       GBM_BO_USE_RENDERING);
-	if (!ec->dummy_surface) {
-		weston_log("failed to create dummy gbm surface\n");
-		return -1;
-	}
-
-	ec->dummy_egl_surface =
-		eglCreateWindowSurface(ec->base.egl_display,
-				       ec->base.egl_config,
-				       ec->dummy_surface,
-				       NULL);
-	if (ec->dummy_egl_surface == EGL_NO_SURFACE) {
-		weston_log("failed to create egl surface\n");
-		return -1;
-	}
-
-	if (!eglMakeCurrent(ec->base.egl_display, ec->dummy_egl_surface,
-			    ec->dummy_egl_surface, ec->base.egl_context)) {
-		weston_log("failed to make context current\n");
-		return -1;
-	}
-
 	return 0;
 }
 
@@ -2265,9 +2238,6 @@
 
 	ec->prev_state = WESTON_COMPOSITOR_ACTIVE;
 
-	if (gles2_renderer_init(&ec->base) < 0)
-		goto err_egl;
-
 	for (key = KEY_F1; key < KEY_F9; key++)
 		weston_compositor_add_key_binding(&ec->base, key,
 						  MODIFIER_CTRL | MODIFIER_ALT,
@@ -2281,6 +2251,9 @@
 		goto err_sprite;
 	}
 
+	if (gles2_renderer_init(&ec->base) < 0)
+		goto err_egl;
+
 	path = NULL;
 
 	evdev_input_create(&ec->base, ec->udev, seat);
@@ -2319,14 +2292,14 @@
 	wl_event_source_remove(ec->drm_source);
 	wl_list_for_each_safe(weston_seat, next, &ec->base.seat_list, link)
 		evdev_input_destroy(weston_seat);
-err_sprite:
-	destroy_sprites(ec);
 err_egl:
 	eglMakeCurrent(ec->base.egl_display, EGL_NO_SURFACE, EGL_NO_SURFACE,
 		       EGL_NO_CONTEXT);
 	eglTerminate(ec->base.egl_display);
 	eglReleaseThread();
 	gbm_device_destroy(ec->gbm);
+err_sprite:
+	destroy_sprites(ec);
 err_udev_dev:
 	udev_device_unref(drm_device);
 err_udev_enum:
diff --git a/src/compositor-wayland.c b/src/compositor-wayland.c
index 4908798..8136bff 100644
--- a/src/compositor-wayland.c
+++ b/src/compositor-wayland.c
@@ -46,9 +46,6 @@
 struct wayland_compositor {
 	struct weston_compositor	 base;
 
-	struct wl_egl_pixmap		*dummy_pixmap;
-	EGLSurface			 dummy_egl_surface;
-
 	struct {
 		struct wl_display *wl_display;
 		struct wl_compositor *compositor;
@@ -296,21 +293,6 @@
 		return -1;
 	}
 
-	c->dummy_pixmap = wl_egl_pixmap_create(10, 10, 0);
-	if (!c->dummy_pixmap) {
-		weston_log("failure to create dummy_pixmap\n");
-		return -1;
-	}
-
-	c->dummy_egl_surface =
-		eglCreatePixmapSurface(c->base.egl_display, c->base.egl_config,
-				       c->dummy_pixmap, NULL);
-	if (!eglMakeCurrent(c->base.egl_display, c->dummy_egl_surface,
-			    c->dummy_egl_surface, c->base.egl_context)) {
-		weston_log("failed to make context current\n");
-		return -1;
-	}
-
 	return 0;
 }
 
@@ -884,13 +866,13 @@
 	c->base.destroy = wayland_destroy;
 	c->base.restore = wayland_restore;
 
-	if (gles2_renderer_init(&c->base) < 0)
-		goto err_display;
-
 	create_border(c);
 	if (wayland_compositor_create_output(c, width, height) < 0)
 		goto err_display;
 
+	if (gles2_renderer_init(&c->base) < 0)
+		goto err_display;
+
 	loop = wl_display_get_event_loop(c->base.wl_display);
 
 	fd = wl_display_get_fd(c->parent.wl_display, update_event_mask, c);
diff --git a/src/compositor-x11.c b/src/compositor-x11.c
index 22f228e..3b161d4 100644
--- a/src/compositor-x11.c
+++ b/src/compositor-x11.c
@@ -68,8 +68,6 @@
 struct x11_compositor {
 	struct weston_compositor	 base;
 
-	EGLSurface		 dummy_pbuffer;
-
 	Display			*dpy;
 	xcb_connection_t	*conn;
 	xcb_screen_t		*screen;
@@ -256,12 +254,6 @@
 		EGL_NONE
 	};
 
-	static const EGLint pbuffer_attribs[] = {
-		EGL_WIDTH, 10,
-		EGL_HEIGHT, 10,
-		EGL_NONE
-	};
-
 	c->base.egl_display = eglGetDisplay(c->dpy);
 	if (c->base.egl_display == NULL) {
 		weston_log("failed to create display\n");
@@ -291,20 +283,6 @@
 		return -1;
 	}
 
-	c->dummy_pbuffer = eglCreatePbufferSurface(c->base.egl_display,
-						   c->base.egl_config,
-						   pbuffer_attribs);
-	if (c->dummy_pbuffer == NULL) {
-		weston_log("failed to create dummy pbuffer\n");
-		return -1;
-	}
-
-	if (!eglMakeCurrent(c->base.egl_display, c->dummy_pbuffer,
-			    c->dummy_pbuffer, c->base.egl_context)) {
-		weston_log("failed to make context current\n");
-		return -1;
-	}
-
 	return 0;
 }
 
@@ -1175,9 +1153,6 @@
 	c->base.destroy = x11_destroy;
 	c->base.restore = x11_restore;
 
-	if (gles2_renderer_init(&c->base) < 0)
-		goto err_egl;
-
 	if (x11_input_create(c, no_input) < 0)
 		goto err_egl;
 
@@ -1212,6 +1187,9 @@
 		x = pixman_region32_extents(&output->base.region)->x2;
 	}
 
+	if (gles2_renderer_init(&c->base) < 0)
+		goto err_egl;
+
 	c->xcb_source =
 		wl_event_loop_add_fd(c->base.input_loop,
 				     xcb_get_file_descriptor(c->conn),
diff --git a/src/gles2-renderer.c b/src/gles2-renderer.c
index 241b5bb..ff099d6 100644
--- a/src/gles2-renderer.c
+++ b/src/gles2-renderer.c
@@ -1045,11 +1045,23 @@
 	struct gles2_renderer *renderer;
 	const char *extensions;
 	int has_egl_image_external = 0;
+	struct weston_output *output;
+	EGLBoolean ret;
 
 	renderer = malloc(sizeof *renderer);
 	if (renderer == NULL)
 		return -1;
 
+	output = container_of(ec->output_list.next,
+			      struct weston_output, link);
+	ret = eglMakeCurrent(ec->egl_display, output->egl_surface,
+			     output->egl_surface, ec->egl_context);
+	if (ret == EGL_FALSE) {
+		weston_log("Failed to make EGL context current.\n");
+		print_egl_error_state();
+		return -1;
+	}
+
 	log_egl_gl_info(ec->egl_display);
 
 	ec->image_target_texture_2d =