Set _NEW_BUFFERS in glRead/DrawBuffer().
Previously, we set _NEW_PIXEL and _NEW_COLOR in these functions, respectively. That correponds to the GL attribute groups, but doesn't make much sense otherwise. This could improve validation efficiency in a few places too. It looks like all the drivers are already checking for _NEW_BUFFERS in the right places (since that's the bit for FBO state) so we can trim out _NEW_PIXEL and _NEW_COLOR at any time.
This commit is contained in:
@@ -841,7 +841,7 @@ xmesa_update_state( GLcontext *ctx, GLbitfield new_state )
|
|||||||
* GL_DITHER, GL_READ/DRAW_BUFFER, buffer binding state, etc. effect
|
* GL_DITHER, GL_READ/DRAW_BUFFER, buffer binding state, etc. effect
|
||||||
* renderbuffer span/clear funcs.
|
* renderbuffer span/clear funcs.
|
||||||
*/
|
*/
|
||||||
if (new_state & (_NEW_COLOR | _NEW_PIXEL | _NEW_BUFFERS)) {
|
if (new_state & (_NEW_COLOR | _NEW_BUFFERS)) {
|
||||||
XMesaBuffer xmbuf = XMESA_BUFFER(ctx->DrawBuffer);
|
XMesaBuffer xmbuf = XMESA_BUFFER(ctx->DrawBuffer);
|
||||||
struct xmesa_renderbuffer *front_xrb, *back_xrb;
|
struct xmesa_renderbuffer *front_xrb, *back_xrb;
|
||||||
|
|
||||||
|
@@ -527,7 +527,7 @@ _mesa_drawbuffers(GLcontext *ctx, GLuint n, const GLenum *buffers,
|
|||||||
set_color_output(ctx, output, GL_NONE, 0x0);
|
set_color_output(ctx, output, GL_NONE, 0x0);
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx->NewState |= _NEW_COLOR;
|
ctx->NewState |= _NEW_BUFFERS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -588,7 +588,7 @@ _mesa_ReadBuffer(GLenum buffer)
|
|||||||
if (!_mesa_readbuffer_update_fields(ctx, buffer))
|
if (!_mesa_readbuffer_update_fields(ctx, buffer))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ctx->NewState |= _NEW_PIXEL;
|
ctx->NewState |= _NEW_BUFFERS;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Call device driver function.
|
* Call device driver function.
|
||||||
|
@@ -1170,7 +1170,7 @@ _mesa_update_state_locked( GLcontext *ctx )
|
|||||||
if (new_state & (_NEW_PROGRAM|_NEW_TEXTURE|_NEW_TEXTURE_MATRIX))
|
if (new_state & (_NEW_PROGRAM|_NEW_TEXTURE|_NEW_TEXTURE_MATRIX))
|
||||||
_mesa_update_texture( ctx, new_state );
|
_mesa_update_texture( ctx, new_state );
|
||||||
|
|
||||||
if (new_state & (_NEW_BUFFERS | _NEW_COLOR | _NEW_PIXEL))
|
if (new_state & _NEW_BUFFERS)
|
||||||
_mesa_update_framebuffer(ctx);
|
_mesa_update_framebuffer(ctx);
|
||||||
|
|
||||||
if (new_state & (_NEW_SCISSOR | _NEW_BUFFERS | _NEW_VIEWPORT))
|
if (new_state & (_NEW_SCISSOR | _NEW_BUFFERS | _NEW_VIEWPORT))
|
||||||
|
@@ -85,14 +85,10 @@ update_framebuffer_state( struct st_context *st )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Note that glDrawBuffer() sets _NEW_COLOR, not _NEW_BUFFER.
|
|
||||||
*/
|
|
||||||
|
|
||||||
const struct st_tracked_state st_update_framebuffer = {
|
const struct st_tracked_state st_update_framebuffer = {
|
||||||
.name = "st_update_framebuffer",
|
.name = "st_update_framebuffer",
|
||||||
.dirty = {
|
.dirty = {
|
||||||
.mesa = (_NEW_BUFFERS | _NEW_COLOR),
|
.mesa = _NEW_BUFFERS,
|
||||||
.st = 0,
|
.st = 0,
|
||||||
},
|
},
|
||||||
.update = update_framebuffer_state
|
.update = update_framebuffer_state
|
||||||
|
Reference in New Issue
Block a user