Mesa (master): mesa: Flush vertices before updating drawbuffer computed state.

Eric Anholt anholt at kemper.freedesktop.org
Thu May 26 15:55:26 UTC 2011


Module: Mesa
Branch: master
Commit: 6d4b974e89ca8c803e2a0033005ad95eab537fe6
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6d4b974e89ca8c803e2a0033005ad95eab537fe6

Author: Eric Anholt <eric at anholt.net>
Date:   Wed May 25 13:46:47 2011 -0700

mesa: Flush vertices before updating drawbuffer computed state.

Otherwise, the driver is likely to draw the flushed vertices to the
new drawbuffer instead of the old one, missing the point of the flush.

Reviewed-by: Brian Paul <brianp at vmware.com>

---

 src/mesa/main/buffers.c |   14 +++++++-------
 1 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c
index ef6ca9f..63f53e2 100644
--- a/src/mesa/main/buffers.c
+++ b/src/mesa/main/buffers.c
@@ -350,7 +350,7 @@ updated_drawbuffers(struct gl_context *ctx)
    FLUSH_VERTICES(ctx, _NEW_BUFFERS);
 
 #if FEATURE_GL
-   if (ctx->API == API_OPENGL) {
+   if (ctx->API == API_OPENGL && !ctx->Extensions.ARB_ES2_compatibility) {
       struct gl_framebuffer *fb = ctx->DrawBuffer;
 
       /* Flag the FBO as requiring validation. */
@@ -403,16 +403,16 @@ _mesa_drawbuffers(struct gl_context *ctx, GLuint n, const GLenum *buffers,
       while (destMask0) {
          GLint bufIndex = _mesa_ffs(destMask0) - 1;
          if (fb->_ColorDrawBufferIndexes[count] != bufIndex) {
-            fb->_ColorDrawBufferIndexes[count] = bufIndex;
             updated_drawbuffers(ctx);
+            fb->_ColorDrawBufferIndexes[count] = bufIndex;
          }
          count++;
          destMask0 &= ~(1 << bufIndex);
       }
       fb->ColorDrawBuffer[0] = buffers[0];
       if (fb->_NumColorDrawBuffers != count) {
-         fb->_NumColorDrawBuffers = count;
 	 updated_drawbuffers(ctx);
+         fb->_NumColorDrawBuffers = count;
       }
    }
    else {
@@ -423,15 +423,15 @@ _mesa_drawbuffers(struct gl_context *ctx, GLuint n, const GLenum *buffers,
             /* only one bit should be set in the destMask[buf] field */
             ASSERT(_mesa_bitcount(destMask[buf]) == 1);
             if (fb->_ColorDrawBufferIndexes[buf] != bufIndex) {
-               fb->_ColorDrawBufferIndexes[buf] = bufIndex;
 	       updated_drawbuffers(ctx);
+               fb->_ColorDrawBufferIndexes[buf] = bufIndex;
             }
             count = buf + 1;
          }
          else {
             if (fb->_ColorDrawBufferIndexes[buf] != -1) {
-               fb->_ColorDrawBufferIndexes[buf] = -1;
 	       updated_drawbuffers(ctx);
+               fb->_ColorDrawBufferIndexes[buf] = -1;
             }
          }
          fb->ColorDrawBuffer[buf] = buffers[buf];
@@ -439,8 +439,8 @@ _mesa_drawbuffers(struct gl_context *ctx, GLuint n, const GLenum *buffers,
       /* set remaining outputs to -1 (GL_NONE) */
       while (buf < ctx->Const.MaxDrawBuffers) {
          if (fb->_ColorDrawBufferIndexes[buf] != -1) {
-            fb->_ColorDrawBufferIndexes[buf] = -1;
 	    updated_drawbuffers(ctx);
+            fb->_ColorDrawBufferIndexes[buf] = -1;
          }
          fb->ColorDrawBuffer[buf] = GL_NONE;
          buf++;
@@ -453,8 +453,8 @@ _mesa_drawbuffers(struct gl_context *ctx, GLuint n, const GLenum *buffers,
       GLuint buf;
       for (buf = 0; buf < ctx->Const.MaxDrawBuffers; buf++) {
          if (ctx->Color.DrawBuffer[buf] != fb->ColorDrawBuffer[buf]) {
-            ctx->Color.DrawBuffer[buf] = fb->ColorDrawBuffer[buf];
 	    updated_drawbuffers(ctx);
+            ctx->Color.DrawBuffer[buf] = fb->ColorDrawBuffer[buf];
          }
       }
    }




More information about the mesa-commit mailing list