public st_flush()
authorBrian <brian.paul@tungstengraphics.com>
Fri, 2 Nov 2007 17:41:32 +0000 (11:41 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Mon, 5 Nov 2007 15:04:47 +0000 (08:04 -0700)
src/mesa/state_tracker/st_cb_flush.c
src/mesa/state_tracker/st_public.h

index c2c3c80b875d4d846f1008798bc9858608e9b024..fe920a44abee022fbcc9419b21939fbddf7a998e 100644 (file)
 #include "st_context.h"
 #include "st_cb_flush.h"
 #include "st_cb_fbo.h"
+#include "st_public.h"
 #include "pipe/p_context.h"
 #include "pipe/p_defines.h"
 #include "pipe/p_winsys.h"
 
 
-static void st_flush(GLcontext *ctx)
+void st_flush( struct st_context *st )
 {
-   struct st_context *st = ctx->st;
+   GLframebuffer *fb = st->ctx->DrawBuffer;
 
    /* If there has been no rendering to the frontbuffer, consider
     * short-circuiting this, or perhaps pass an "optional" flag down
@@ -55,13 +56,12 @@ static void st_flush(GLcontext *ctx)
    /* XXX: temporary hack.  This flag should only be set if we do any
     * rendering to the front buffer.
     */
-   st->flags.frontbuffer_dirty = (ctx->DrawBuffer->_ColorDrawBufferMask[0] == 
-                                 BUFFER_BIT_FRONT_LEFT);
-
+   st->flags.frontbuffer_dirty
+      = (fb->_ColorDrawBufferMask[0] & BUFFER_BIT_FRONT_LEFT);
 
    if (st->flags.frontbuffer_dirty) {
       struct st_renderbuffer *strb
-         = st_renderbuffer(ctx->DrawBuffer->Attachment[BUFFER_FRONT_LEFT].Renderbuffer);
+         = st_renderbuffer(fb->Attachment[BUFFER_FRONT_LEFT].Renderbuffer);
       struct pipe_surface *front_surf = strb->surface;
 
       /* Hook for copying "fake" frontbuffer if necessary:
@@ -71,17 +71,30 @@ static void st_flush(GLcontext *ctx)
    }
 }
 
-static void st_finish(GLcontext *ctx)
+
+/**
+ * Called via ctx->Driver.Flush()
+ */
+static void st_Flush(GLcontext *ctx)
+{
+   st_flush(ctx->st);
+}
+
+
+/**
+ * Called via ctx->Driver.Finish()
+ */
+static void st_Finish(GLcontext *ctx)
 {
    struct st_context *st = ctx->st;
 
-   st_flush( ctx );
+   st_flush( st );
    st->pipe->winsys->wait_idle( st->pipe->winsys );
 }
 
 
 void st_init_flush_functions(struct dd_function_table *functions)
 {
-   functions->Flush = st_flush;
-   functions->Finish = st_finish;
+   functions->Flush = st_Flush;
+   functions->Finish = st_Finish;
 }
index 3056b5a3e7d100cce200e05434f567480065c367..1cc6e6e40e2c052048bacf635af75dea43e12e79 100644 (file)
@@ -46,4 +46,6 @@ void st_destroy_context2( struct st_context *st );
 
 void st_invalidate_state(GLcontext * ctx, GLuint new_state);
 
+void st_flush( struct st_context *st );
+
 #endif