diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
index 707ef7ab104e85d015f29af3b98af653f35315a6..10adb463fc01ebe2a1b8d0f33a71ef8e084dcc36 100644
--- a/libweston/compositor-drm.c
+++ b/libweston/compositor-drm.c
@@ -865,6 +865,16 @@ drm_output_repaint(struct weston_output *output_base,
 
 	assert(!output->fb_last);
 
+	/* If disable_planes is set then assign_planes() wasn't
+	 * called for this render, so we could still have a stale
+	 * cursor plane set up.
+	 */
+	if (output->base.disable_planes) {
+		output->cursor_view = NULL;
+		output->cursor_plane.x = INT32_MIN;
+		output->cursor_plane.y = INT32_MIN;
+	}
+
 	drm_output_render(output, damage);
 	if (!output->fb_pending)
 		return -1;