st/mesa: Invalidate drawables on context switch
authorBenjamin Franzke <benjaminfranzke@googlemail.com>
Tue, 21 Jun 2011 11:25:56 +0000 (13:25 +0200)
committerBenjamin Franzke <benjaminfranzke@googlemail.com>
Tue, 21 Jun 2011 13:09:55 +0000 (15:09 +0200)
src/mesa/state_tracker/st_manager.c

index a68544ddac759f270c2d2d5ed31a6b9f723b299d..46be55318a26b0a1ecff0f52b95c49cea5c6099a 100644 (file)
@@ -707,6 +707,15 @@ st_api_create_context(struct st_api *stapi, struct st_manager *smapi,
    return &st->iface;
 }
 
+static struct st_context_iface *
+st_api_get_current(struct st_api *stapi)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   struct st_context *st = (ctx) ? ctx->st : NULL;
+
+   return (st) ? &st->iface : NULL;
+}
+
 static boolean
 st_api_make_current(struct st_api *stapi, struct st_context_iface *stctxi,
                     struct st_framebuffer_iface *stdrawi,
@@ -742,6 +751,10 @@ st_api_make_current(struct st_api *stapi, struct st_context_iface *stctxi,
       }
 
       if (stdraw && stread) {
+         if (stctxi != st_api_get_current(stapi)) {
+            p_atomic_set(&stdraw->revalidate, TRUE);
+            p_atomic_set(&stread->revalidate, TRUE);
+         }
          st_framebuffer_validate(stdraw, st);
          if (stread != stdraw)
             st_framebuffer_validate(stread, st);
@@ -773,15 +786,6 @@ st_api_make_current(struct st_api *stapi, struct st_context_iface *stctxi,
    return ret;
 }
 
-static struct st_context_iface *
-st_api_get_current(struct st_api *stapi)
-{
-   GET_CURRENT_CONTEXT(ctx);
-   struct st_context *st = (ctx) ? ctx->st : NULL;
-
-   return (st) ? &st->iface : NULL;
-}
-
 static st_proc_t
 st_api_get_proc_address(struct st_api *stapi, const char *procname)
 {