gallium: add notify_swapbuffers_complete, use it to set surfaces to undefined state
authorKeith Whitwell <keith@tungstengraphics.com>
Mon, 21 Jan 2008 20:23:32 +0000 (20:23 +0000)
committerJosé Fonseca <jrfonseca@tungstengraphics.com>
Sat, 26 Jan 2008 01:30:35 +0000 (10:30 +0900)
src/mesa/state_tracker/st_framebuffer.c
src/mesa/state_tracker/st_public.h

index 42e8e24896c72cde0182fa2a97f0b018fe5b8a8f..bca3fa5c3833a8ffa9d4f68623f26645e718a9a6 100644 (file)
@@ -177,6 +177,26 @@ st_notify_swapbuffers(struct st_framebuffer *stfb)
    }
 }
 
+
+/** 
+ * Quick hack - allows the winsys to inform the driver that surface
+ * states are now undefined after a glXSwapBuffers or similar.
+ */
+void
+st_notify_swapbuffers_complete(struct st_framebuffer *stfb)
+{
+   GET_CURRENT_CONTEXT(ctx);
+
+   if (ctx && ctx->DrawBuffer == &stfb->Base) {
+      struct st_renderbuffer *strb;
+      int i;
+
+      for (i = 0; i < BUFFER_COUNT; i++) {
+        if (stfb->Base.Attachment[i].Renderbuffer) {
+           strb = st_renderbuffer(stfb->Base.Attachment[i].Renderbuffer);
+           strb->surface->status = PIPE_SURFACE_STATUS_UNDEFINED;
+        }
+      }
    }
 }
 
index 78a8fde82b589e9629b19696198a3d0f2b6b7b2c..3c397b126a9b77bc562d81cfed515e62b9c821b8 100644 (file)
@@ -81,5 +81,6 @@ void st_make_current(struct st_context *st,
 void st_flush( struct st_context *st, uint pipeFlushFlags );
 
 void st_notify_swapbuffers(struct st_framebuffer *stfb);
+void st_notify_swapbuffers_complete(struct st_framebuffer *stfb);
 
 #endif