summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mesa/state_tracker/st_manager.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/mesa/state_tracker/st_manager.c b/src/mesa/state_tracker/st_manager.c
index bee1f6b1366..35d41f0a2c1 100644
--- a/src/mesa/state_tracker/st_manager.c
+++ b/src/mesa/state_tracker/st_manager.c
@@ -1105,10 +1105,17 @@ st_api_make_current(struct st_api *stapi, struct st_context_iface *stctxi,
else {
GET_CURRENT_CONTEXT(ctx);
- ret = _mesa_make_current(NULL, NULL, NULL);
-
- if (ctx)
+ if (ctx) {
+ /* Before releasing the context, release its associated
+ * winsys buffers first. Then purge the context's winsys buffers list
+ * to free the resources of any winsys buffers that no longer have
+ * an existing drawable.
+ */
+ ret = _mesa_make_current(ctx, NULL, NULL);
st_framebuffers_purge(ctx->st);
+ }
+
+ ret = _mesa_make_current(NULL, NULL, NULL);
}
return ret;