From 2cdb646531d949e08b8a0538b05bd38af3157408 Mon Sep 17 00:00:00 2001
From: Markus Ongyerth <ongy@ongy.net>
Date: Mon, 29 Jan 2018 11:29:54 +0100
Subject: relases gbm buffers on init

The wlr_drm_surface_init function is called (upon others) when the drm
mode is changed.
When the surface was used previously this replaced the gbm_surface, but
did not replace the gbm buffers (front/back).
With this, wlr_drm_surface_get_from never set up the new buffers with
the new glViewport because surf->front existed.

This frees the buffers to get new buffers on the new surface with the
new viewport.
---
 backend/drm/renderer.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

(limited to 'backend/drm')

diff --git a/backend/drm/renderer.c b/backend/drm/renderer.c
index 00182c59..d28164aa 100644
--- a/backend/drm/renderer.c
+++ b/backend/drm/renderer.c
@@ -66,6 +66,17 @@ bool wlr_drm_surface_init(struct wlr_drm_surface *surf,
 	surf->width = width;
 	surf->height = height;
 
+	if (surf->gbm) {
+		if (surf->front) {
+			gbm_surface_release_buffer(surf->gbm, surf->front);
+			surf->front = NULL;
+		}
+		if (surf->back) {
+			gbm_surface_release_buffer(surf->gbm, surf->back);
+			surf->back = NULL;
+		}
+	}
+
 	surf->gbm = gbm_surface_create(renderer->gbm, width, height,
 		format, GBM_BO_USE_RENDERING | flags);
 	if (!surf->gbm) {
-- 
cgit v1.2.3


From cde0f454b376703e68662f9552b38fc10e97b74a Mon Sep 17 00:00:00 2001
From: Markus Ongyerth <ongy@ongy.net>
Date: Mon, 29 Jan 2018 11:49:31 +0100
Subject: Clean up the gbm/egl as well

---
 backend/drm/renderer.c | 4 ++++
 1 file changed, 4 insertions(+)

(limited to 'backend/drm')

diff --git a/backend/drm/renderer.c b/backend/drm/renderer.c
index d28164aa..350bfce4 100644
--- a/backend/drm/renderer.c
+++ b/backend/drm/renderer.c
@@ -75,6 +75,10 @@ bool wlr_drm_surface_init(struct wlr_drm_surface *surf,
 			gbm_surface_release_buffer(surf->gbm, surf->back);
 			surf->back = NULL;
 		}
+		gbm_surface_destroy(surf->gbm);
+	}
+	if (surf->egl) {
+		eglDestroySurface(surf->renderer->egl.display, surf->egl);
 	}
 
 	surf->gbm = gbm_surface_create(renderer->gbm, width, height,
-- 
cgit v1.2.3


From c5aac776929cd5abed96463b635f0382d3047fbf Mon Sep 17 00:00:00 2001
From: Guido Günther <agx@sigxcpu.org>
Date: Tue, 30 Jan 2018 16:06:45 +0100
Subject: Fix some typos

Prefer initialize over initialise since used more often in the sources.
---
 backend/drm/backend.c | 2 +-
 backend/drm/drm.c     | 6 +++---
 meson.build           | 2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

(limited to 'backend/drm')

diff --git a/backend/drm/backend.c b/backend/drm/backend.c
index de69dad5..4ca5718a 100644
--- a/backend/drm/backend.c
+++ b/backend/drm/backend.c
@@ -119,7 +119,7 @@ struct wlr_backend *wlr_drm_backend_create(struct wl_display *display,
 
 	char *name = drmGetDeviceNameFromFd2(gpu_fd);
 	drmVersion *version = drmGetVersion(gpu_fd);
-	wlr_log(L_INFO, "Initalizing DRM backend for %s (%s)", name, version->name);
+	wlr_log(L_INFO, "Initializing DRM backend for %s (%s)", name, version->name);
 	free(name);
 	drmFreeVersion(version);
 
diff --git a/backend/drm/drm.c b/backend/drm/drm.c
index 63a6e2da..cdd2f57e 100644
--- a/backend/drm/drm.c
+++ b/backend/drm/drm.c
@@ -469,7 +469,7 @@ static bool wlr_drm_connector_set_mode(struct wlr_output *output,
 	wlr_output_update_mode(&conn->output, mode);
 
 	// Since realloc_crtcs can deallocate planes on OTHER outputs,
-	// we actually need to reinitalise any than has changed
+	// we actually need to reinitialize any than has changed
 	ssize_t output_index = -1;
 	wl_list_for_each(conn, &drm->outputs, link) {
 		output_index += 1;
@@ -483,7 +483,7 @@ static bool wlr_drm_connector_set_mode(struct wlr_output *output,
 
 		if (!wlr_drm_plane_surfaces_init(crtc->primary, drm,
 				mode->width, mode->height, GBM_FORMAT_XRGB8888)) {
-			wlr_log(L_ERROR, "Failed to initalise renderer for plane");
+			wlr_log(L_ERROR, "Failed to initialize renderer for plane");
 			goto error_conn;
 		}
 
@@ -949,7 +949,7 @@ void wlr_drm_connector_cleanup(struct wlr_drm_connector *conn) {
 		conn->possible_crtc = 0;
 		/* Fallthrough */
 	case WLR_DRM_CONN_NEEDS_MODESET:
-		wlr_log(L_INFO, "Emmiting destruction signal for '%s'",
+		wlr_log(L_INFO, "Emitting destruction signal for '%s'",
 				conn->output.name);
 		wl_signal_emit(&drm->backend.events.output_remove, &conn->output);
 		break;
diff --git a/meson.build b/meson.build
index 55b07efa..236abd6b 100644
--- a/meson.build
+++ b/meson.build
@@ -36,7 +36,7 @@ wlr_inc = include_directories('include')
 
 cc = meson.get_compiler('c')
 
-# Clang complains about some zeroed initialiser lists (= {0}), even though they
+# Clang complains about some zeroed initializer lists (= {0}), even though they
 # are valid
 if cc.get_id() == 'clang'
 	add_project_arguments('-Wno-missing-field-initializers', language: 'c')
-- 
cgit v1.2.3


From bb39277e9772b0943e8e292e2a7eed9c5aac59e2 Mon Sep 17 00:00:00 2001
From: emersion <contact@emersion.fr>
Date: Fri, 2 Feb 2018 22:27:18 +0100
Subject: backend/drm: update output enabled property on modeset

---
 backend/drm/drm.c | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'backend/drm')

diff --git a/backend/drm/drm.c b/backend/drm/drm.c
index cdd2f57e..f6cc084e 100644
--- a/backend/drm/drm.c
+++ b/backend/drm/drm.c
@@ -207,6 +207,7 @@ static void wlr_drm_connector_swap_buffers(struct wlr_output *output) {
 
 	if (drm->iface->crtc_pageflip(drm, conn, crtc, fb_id, NULL)) {
 		conn->pageflip_pending = true;
+		wlr_output_update_enabled(output, true);
 	} else {
 		wl_event_source_timer_update(conn->retry_pageflip,
 			1000.0f / conn->output.current_mode->refresh);
@@ -245,6 +246,7 @@ void wlr_drm_connector_start_renderer(struct wlr_drm_connector *conn) {
 	struct wlr_drm_mode *mode = (struct wlr_drm_mode *)conn->output.current_mode;
 	if (drm->iface->crtc_pageflip(drm, conn, crtc, fb_id, &mode->drm_mode)) {
 		conn->pageflip_pending = true;
+		wlr_output_update_enabled(&conn->output, true);
 	} else {
 		wl_event_source_timer_update(conn->retry_pageflip,
 			1000.0f / conn->output.current_mode->refresh);
-- 
cgit v1.2.3