mesa: in glReadBufer() set _NEW_BUFFERS, not _NEW_PIXEL
authorBrian Paul <brianp@vmware.com>
Sat, 2 May 2009 00:31:04 +0000 (18:31 -0600)
committerBrian Paul <brianp@vmware.com>
Sat, 2 May 2009 00:31:04 +0000 (18:31 -0600)
Since GL_READ_BUFFER is historically part of the gl_pixel_attrib group
it made sense to signal changes with _NEW_PIXEL.  But now with FBOs it's
also part of the framebuffer state.

Now _NEW_PIXEL strictly indicates pixels transfer state changes.

This change avoids framebuffer state validation when any random bit of
pixel-transfer state is set.

DRI drivers updated too:  don't check _NEW_COLOR when updating framebuffer
state.  I think that was just copied from the Xlib driver because we care
about dither enable/disable state there.

src/mesa/drivers/dri/intel/intel_buffers.c
src/mesa/drivers/dri/r200/r200_state.c
src/mesa/drivers/dri/r300/r300_state.c
src/mesa/drivers/dri/radeon/radeon_state.c
src/mesa/drivers/x11/xm_dd.c
src/mesa/main/buffers.c

index b86cafea241a81ec0f5e0f4bb2443e0f0ffd3302..4f4ea45b74f348b401f88ae5dde0a3fc4129903b 100644 (file)
@@ -157,7 +157,7 @@ intel_draw_buffer(GLcontext * ctx, struct gl_framebuffer *fb)
    /* Do this here, not core Mesa, since this function is called from
     * many places within the driver.
     */
-   if (ctx->NewState & (_NEW_BUFFERS | _NEW_COLOR | _NEW_PIXEL)) {
+   if (ctx->NewState & _NEW_BUFFERS) {
       /* this updates the DrawBuffer->_NumColorDrawBuffers fields, etc */
       _mesa_update_framebuffer(ctx);
       /* this updates the DrawBuffer's Width/Height if it's a FBO */
index 28ba5f49bc00e811de5066fef6b1636bd66c4022..81ee1ed022c72d1b317e68667c5b58227ce6755b 100644 (file)
@@ -2480,7 +2480,7 @@ void r200ValidateState( GLcontext *ctx )
    r200ContextPtr rmesa = R200_CONTEXT(ctx);
    GLuint new_state = rmesa->NewGLState;
 
-   if (new_state & (_NEW_BUFFERS | _NEW_COLOR | _NEW_PIXEL)) {
+   if (new_state & _NEW_BUFFERS) {
      r200UpdateDrawBuffer(ctx);
    }
 
index b96ba4ed948db7cf6581e9942f261ba4cec8a209..07299f3b36f2dd7c4c111940e201c3bcef438efd 100644 (file)
@@ -2589,7 +2589,7 @@ static void r300InvalidateState(GLcontext * ctx, GLuint new_state)
        _tnl_InvalidateState(ctx, new_state);
        _ae_invalidate_state(ctx, new_state);
 
-       if (new_state & (_NEW_BUFFERS | _NEW_COLOR | _NEW_PIXEL)) {
+       if (new_state & _NEW_BUFFERS) {
                r300UpdateDrawBuffer(ctx);
        }
 
index b6561001e766eb550ea141229f5f71188155b375..4432f85691eec70114151e938f46b2b3b087f447 100644 (file)
@@ -2255,7 +2255,7 @@ void radeonValidateState( GLcontext *ctx )
    radeonContextPtr rmesa = RADEON_CONTEXT(ctx);
    GLuint new_state = rmesa->NewGLState;
 
-   if (new_state & (_NEW_BUFFERS | _NEW_COLOR | _NEW_PIXEL)) {
+   if (new_state & _NEW_BUFFERS) {
      radeonUpdateDrawBuffer(ctx);
    }
 
index 305df548fa277cf18b7c7c59681e9d0f2c49e83e..9a01465bdf9420b88cf2c2a306feb01f260bc3cc 100644 (file)
@@ -912,8 +912,9 @@ xmesa_update_state( GLcontext *ctx, GLbitfield new_state )
    /*
     * GL_DITHER, GL_READ/DRAW_BUFFER, buffer binding state, etc. effect
     * renderbuffer span/clear funcs.
+    * Check _NEW_COLOR to detect dither enable/disable.
     */
-   if (new_state & (_NEW_COLOR | _NEW_PIXEL | _NEW_BUFFERS)) {
+   if (new_state & (_NEW_COLOR | _NEW_BUFFERS)) {
       XMesaBuffer xmbuf = XMESA_BUFFER(ctx->DrawBuffer);
       struct xmesa_renderbuffer *front_xrb, *back_xrb;
 
index c5f13345f0481cf9a9316f2c6d21d4dbc21231f3..d8b5f3b1f4aafe02bbd5f53e27b8644210901682 100644 (file)
@@ -443,7 +443,7 @@ _mesa_readbuffer(GLcontext *ctx, GLenum buffer, GLint bufferIndex)
    fb->ColorReadBuffer = buffer;
    fb->_ColorReadBufferIndex = bufferIndex;
 
-   ctx->NewState |= _NEW_PIXEL;
+   ctx->NewState |= _NEW_BUFFERS;
 }