[Mesa-dev] [PATCH 32/38] main: Refactor _mesa_drawbuffers.
Fredrik Höglund
fredrik at kde.org
Thu Apr 16 09:52:13 PDT 2015
On Wednesday 04 March 2015, Laura Ekstrand wrote:
> ---
> src/mesa/drivers/common/meta.c | 3 ++-
> src/mesa/main/buffers.c | 25 ++++++++++++-------------
> src/mesa/main/buffers.h | 4 +++-
> src/mesa/main/context.c | 3 ++-
> src/mesa/main/framebuffer.c | 2 +-
> 5 files changed, 20 insertions(+), 17 deletions(-)
>
> diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
> index fdc4cf1..6bd5ab4 100644
> --- a/src/mesa/drivers/common/meta.c
> +++ b/src/mesa/drivers/common/meta.c
> @@ -1210,7 +1210,8 @@ _mesa_meta_end(struct gl_context *ctx)
> _mesa_BindRenderbuffer(GL_RENDERBUFFER, save->RenderbufferName);
>
> if (state & MESA_META_DRAW_BUFFERS) {
> - _mesa_drawbuffers(ctx, ctx->Const.MaxDrawBuffers, save->ColorDrawBuffers, NULL);
> + _mesa_drawbuffers(ctx, ctx->DrawBuffer, ctx->Const.MaxDrawBuffers,
> + save->ColorDrawBuffers, NULL);
> }
>
> ctx->Meta->SaveStackDepth--;
> diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c
> index 37a9790..4fdd97e 100644
> --- a/src/mesa/main/buffers.c
> +++ b/src/mesa/main/buffers.c
> @@ -277,7 +277,7 @@ _mesa_DrawBuffer(GLenum buffer)
> }
>
> /* if we get here, there's no error so set new state */
> - _mesa_drawbuffers(ctx, 1, &buffer, &destMask);
> + _mesa_drawbuffers(ctx, ctx->DrawBuffer, 1, &buffer, &destMask);
>
> /*
> * Call device driver function.
> @@ -440,7 +440,7 @@ _mesa_DrawBuffers(GLsizei n, const GLenum *buffers)
> }
>
> /* OK, if we get here, there were no errors so set the new state */
> - _mesa_drawbuffers(ctx, n, buffers, destMask);
> + _mesa_drawbuffers(ctx, ctx->DrawBuffer, n, buffers, destMask);
>
> /*
> * Call device driver function. Note that n can be equal to 0,
> @@ -459,12 +459,11 @@ _mesa_DrawBuffers(GLsizei n, const GLenum *buffers)
> * actual change.
> */
> static void
> -updated_drawbuffers(struct gl_context *ctx)
> +updated_drawbuffers(struct gl_context *ctx, struct gl_framebuffer *fb)
> {
> FLUSH_VERTICES(ctx, _NEW_BUFFERS);
>
> if (ctx->API == API_OPENGL_COMPAT && !ctx->Extensions.ARB_ES2_compatibility) {
> - struct gl_framebuffer *fb = ctx->DrawBuffer;
>
This blank line should probably also be removed.
With that nitpick fixed:
Reviewed-by: Fredrik Höglund <fredrik at kde.org>
> /* Flag the FBO as requiring validation. */
> if (_mesa_is_user_fbo(fb)) {
> @@ -482,6 +481,7 @@ updated_drawbuffers(struct gl_context *ctx)
> * so nothing should go wrong at this point.
> *
> * \param ctx current context
> + * \param fb the desired draw buffer
> * \param n number of color outputs to set
> * \param buffers array[n] of colorbuffer names, like GL_LEFT.
> * \param destMask array[n] of BUFFER_BIT_* bitmasks which correspond to the
> @@ -489,10 +489,9 @@ updated_drawbuffers(struct gl_context *ctx)
> * BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT).
> */
> void
> -_mesa_drawbuffers(struct gl_context *ctx, GLuint n, const GLenum *buffers,
> - const GLbitfield *destMask)
> +_mesa_drawbuffers(struct gl_context *ctx, struct gl_framebuffer *fb,
> + GLuint n, const GLenum *buffers, const GLbitfield *destMask)
> {
> - struct gl_framebuffer *fb = ctx->DrawBuffer;
> GLbitfield mask[MAX_DRAW_BUFFERS];
> GLuint buf;
>
> @@ -518,7 +517,7 @@ _mesa_drawbuffers(struct gl_context *ctx, GLuint n, const GLenum *buffers,
> while (destMask0) {
> GLint bufIndex = ffs(destMask0) - 1;
> if (fb->_ColorDrawBufferIndexes[count] != bufIndex) {
> - updated_drawbuffers(ctx);
> + updated_drawbuffers(ctx, fb);
> fb->_ColorDrawBufferIndexes[count] = bufIndex;
> }
> count++;
> @@ -535,14 +534,14 @@ _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) {
> - updated_drawbuffers(ctx);
> + updated_drawbuffers(ctx, fb);
> fb->_ColorDrawBufferIndexes[buf] = bufIndex;
> }
> count = buf + 1;
> }
> else {
> if (fb->_ColorDrawBufferIndexes[buf] != -1) {
> - updated_drawbuffers(ctx);
> + updated_drawbuffers(ctx, fb);
> fb->_ColorDrawBufferIndexes[buf] = -1;
> }
> }
> @@ -554,7 +553,7 @@ _mesa_drawbuffers(struct gl_context *ctx, GLuint n, const GLenum *buffers,
> /* set remaining outputs to -1 (GL_NONE) */
> for (buf = fb->_NumColorDrawBuffers; buf < ctx->Const.MaxDrawBuffers; buf++) {
> if (fb->_ColorDrawBufferIndexes[buf] != -1) {
> - updated_drawbuffers(ctx);
> + updated_drawbuffers(ctx, fb);
> fb->_ColorDrawBufferIndexes[buf] = -1;
> }
> }
> @@ -566,7 +565,7 @@ _mesa_drawbuffers(struct gl_context *ctx, GLuint n, const GLenum *buffers,
> /* also set context drawbuffer state */
> for (buf = 0; buf < ctx->Const.MaxDrawBuffers; buf++) {
> if (ctx->Color.DrawBuffer[buf] != fb->ColorDrawBuffer[buf]) {
> - updated_drawbuffers(ctx);
> + updated_drawbuffers(ctx, fb);
> ctx->Color.DrawBuffer[buf] = fb->ColorDrawBuffer[buf];
> }
> }
> @@ -585,7 +584,7 @@ _mesa_update_draw_buffers(struct gl_context *ctx)
> /* should be a window system FBO */
> assert(_mesa_is_winsys_fbo(ctx->DrawBuffer));
>
> - _mesa_drawbuffers(ctx, ctx->Const.MaxDrawBuffers,
> + _mesa_drawbuffers(ctx, ctx->DrawBuffer, ctx->Const.MaxDrawBuffers,
> ctx->Color.DrawBuffer, NULL);
> }
>
> diff --git a/src/mesa/main/buffers.h b/src/mesa/main/buffers.h
> index ebcfa1c..bc6d74a 100644
> --- a/src/mesa/main/buffers.h
> +++ b/src/mesa/main/buffers.h
> @@ -36,6 +36,7 @@
> #include "glheader.h"
>
> struct gl_context;
> +struct gl_framebuffer;
>
> extern void GLAPIENTRY
> _mesa_DrawBuffer( GLenum mode );
> @@ -44,7 +45,8 @@ extern void GLAPIENTRY
> _mesa_DrawBuffers(GLsizei n, const GLenum *buffers);
>
> extern void
> -_mesa_drawbuffers(struct gl_context *ctx, GLuint n, const GLenum *buffers,
> +_mesa_drawbuffers(struct gl_context *ctx, struct gl_framebuffer *fb,
> + GLuint n, const GLenum *buffers,
> const GLbitfield *destMask);
>
> extern void
> diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
> index 22c2341..b285d51 100644
> --- a/src/mesa/main/context.c
> +++ b/src/mesa/main/context.c
> @@ -1567,7 +1567,8 @@ handle_first_current(struct gl_context *ctx)
> else
> buffer = GL_FRONT;
>
> - _mesa_drawbuffers(ctx, 1, &buffer, NULL /* destMask */);
> + _mesa_drawbuffers(ctx, ctx->DrawBuffer, 1, &buffer,
> + NULL /* destMask */);
> }
>
> if (ctx->ReadBuffer != _mesa_get_incomplete_framebuffer()) {
> diff --git a/src/mesa/main/framebuffer.c b/src/mesa/main/framebuffer.c
> index 6cb13d3..6446d71 100644
> --- a/src/mesa/main/framebuffer.c
> +++ b/src/mesa/main/framebuffer.c
> @@ -652,7 +652,7 @@ update_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb)
> * context state (GL_READ_BUFFER too).
> */
> if (fb->ColorDrawBuffer[0] != ctx->Color.DrawBuffer[0]) {
> - _mesa_drawbuffers(ctx, ctx->Const.MaxDrawBuffers,
> + _mesa_drawbuffers(ctx, fb, ctx->Const.MaxDrawBuffers,
> ctx->Color.DrawBuffer, NULL);
> }
> }
>
More information about the mesa-dev
mailing list