diff options
-rw-r--r-- | src/mesa/state_tracker/st_cb_flush.c | 33 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_public.h | 2 |
2 files changed, 25 insertions, 10 deletions
diff --git a/src/mesa/state_tracker/st_cb_flush.c b/src/mesa/state_tracker/st_cb_flush.c index c2c3c80b875..fe920a44abe 100644 --- a/src/mesa/state_tracker/st_cb_flush.c +++ b/src/mesa/state_tracker/st_cb_flush.c @@ -36,14 +36,15 @@ #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; } diff --git a/src/mesa/state_tracker/st_public.h b/src/mesa/state_tracker/st_public.h index 3056b5a3e7d..1cc6e6e40e2 100644 --- a/src/mesa/state_tracker/st_public.h +++ b/src/mesa/state_tracker/st_public.h @@ -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 |