[Mesa-dev] [PATCH 17/38] main: Refactor _mesa_update_framebuffer.

Fredrik Höglund fredrik at kde.org
Sun Apr 12 08:55:09 PDT 2015


Reviewed-by: Fredrik Höglund <fredrik at kde.org>

On Wednesday 04 March 2015, Laura Ekstrand wrote:
> _mesa_update_framebuffer now operates on arbitrary read and draw framebuffers.
> This allows BlitNamedFramebuffer to update the state of its arbitrary read and
> draw framebuffers.
> ---
>  src/mesa/drivers/dri/i915/i830_vtbl.c       |  2 +-
>  src/mesa/drivers/dri/i915/i915_vtbl.c       |  2 +-
>  src/mesa/drivers/dri/r200/r200_state.c      |  2 +-
>  src/mesa/drivers/dri/radeon/radeon_common.c |  2 +-
>  src/mesa/drivers/dri/radeon/radeon_state.c  |  2 +-
>  src/mesa/main/framebuffer.c                 | 11 ++++-------
>  src/mesa/main/framebuffer.h                 |  4 +++-
>  src/mesa/main/state.c                       |  2 +-
>  8 files changed, 13 insertions(+), 14 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i915/i830_vtbl.c b/src/mesa/drivers/dri/i915/i830_vtbl.c
> index 91da977..4fff29e 100644
> --- a/src/mesa/drivers/dri/i915/i830_vtbl.c
> +++ b/src/mesa/drivers/dri/i915/i830_vtbl.c
> @@ -730,7 +730,7 @@ i830_update_draw_buffer(struct intel_context *intel)
>      */
>     if (ctx->NewState & _NEW_BUFFERS) {
>        /* this updates the DrawBuffer->_NumColorDrawBuffers fields, etc */
> -      _mesa_update_framebuffer(ctx);
> +      _mesa_update_framebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer);
>        /* this updates the DrawBuffer's Width/Height if it's a FBO */
>        _mesa_update_draw_buffer_bounds(ctx);
>     }
> diff --git a/src/mesa/drivers/dri/i915/i915_vtbl.c b/src/mesa/drivers/dri/i915/i915_vtbl.c
> index 706e0c3..9ed298c 100644
> --- a/src/mesa/drivers/dri/i915/i915_vtbl.c
> +++ b/src/mesa/drivers/dri/i915/i915_vtbl.c
> @@ -732,7 +732,7 @@ i915_update_draw_buffer(struct intel_context *intel)
>      */
>     if (ctx->NewState & _NEW_BUFFERS) {
>        /* this updates the DrawBuffer->_NumColorDrawBuffers fields, etc */
> -      _mesa_update_framebuffer(ctx);
> +      _mesa_update_framebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer);
>        /* this updates the DrawBuffer's Width/Height if it's a FBO */
>        _mesa_update_draw_buffer_bounds(ctx);
>     }
> diff --git a/src/mesa/drivers/dri/r200/r200_state.c b/src/mesa/drivers/dri/r200/r200_state.c
> index 8327187..b020439 100644
> --- a/src/mesa/drivers/dri/r200/r200_state.c
> +++ b/src/mesa/drivers/dri/r200/r200_state.c
> @@ -2214,7 +2214,7 @@ GLboolean r200ValidateState( struct gl_context *ctx )
>     GLuint new_state = rmesa->radeon.NewGLState;
>  
>     if (new_state & _NEW_BUFFERS) {
> -      _mesa_update_framebuffer(ctx);
> +      _mesa_update_framebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer);
>        /* this updates the DrawBuffer's Width/Height if it's a FBO */
>        _mesa_update_draw_buffer_bounds(ctx);
>  
> diff --git a/src/mesa/drivers/dri/radeon/radeon_common.c b/src/mesa/drivers/dri/radeon/radeon_common.c
> index 3bcc7f2..84c8066 100644
> --- a/src/mesa/drivers/dri/radeon/radeon_common.c
> +++ b/src/mesa/drivers/dri/radeon/radeon_common.c
> @@ -220,7 +220,7 @@ void radeon_draw_buffer(struct gl_context *ctx, struct gl_framebuffer *fb)
>  	 */
>  	if (ctx->NewState & (_NEW_BUFFERS | _NEW_COLOR | _NEW_PIXEL)) {
>  		/* this updates the DrawBuffer->_NumColorDrawBuffers fields, etc */
> -		_mesa_update_framebuffer(ctx);
> +		_mesa_update_framebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer);
>  		/* this updates the DrawBuffer's Width/Height if it's a FBO */
>  		_mesa_update_draw_buffer_bounds(ctx);
>  	}
> diff --git a/src/mesa/drivers/dri/radeon/radeon_state.c b/src/mesa/drivers/dri/radeon/radeon_state.c
> index e83a34d..2c0a99a 100644
> --- a/src/mesa/drivers/dri/radeon/radeon_state.c
> +++ b/src/mesa/drivers/dri/radeon/radeon_state.c
> @@ -1993,7 +1993,7 @@ GLboolean radeonValidateState( struct gl_context *ctx )
>     GLuint new_state = rmesa->radeon.NewGLState;
>  
>     if (new_state & _NEW_BUFFERS) {
> -     _mesa_update_framebuffer(ctx);
> +     _mesa_update_framebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer);
>       /* this updates the DrawBuffer's Width/Height if it's a FBO */
>       _mesa_update_draw_buffer_bounds(ctx);
>       RADEON_STATECHANGE(rmesa, ctx);
> diff --git a/src/mesa/main/framebuffer.c b/src/mesa/main/framebuffer.c
> index 5df1ecc..31d05f8 100644
> --- a/src/mesa/main/framebuffer.c
> +++ b/src/mesa/main/framebuffer.c
> @@ -678,17 +678,14 @@ update_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb)
>  
>  
>  /**
> - * Update state related to the current draw/read framebuffers.
> + * Update state related to the draw/read framebuffers.
>   */
>  void
> -_mesa_update_framebuffer(struct gl_context *ctx)
> +_mesa_update_framebuffer(struct gl_context *ctx,
> +                         struct gl_framebuffer *readFb,
> +                         struct gl_framebuffer *drawFb)
>  {
> -   struct gl_framebuffer *drawFb;
> -   struct gl_framebuffer *readFb;
> -
>     assert(ctx);
> -   drawFb = ctx->DrawBuffer;
> -   readFb = ctx->ReadBuffer;
>  
>     update_framebuffer(ctx, drawFb);
>     if (readFb != drawFb)
> diff --git a/src/mesa/main/framebuffer.h b/src/mesa/main/framebuffer.h
> index a427421..d3b7e58 100644
> --- a/src/mesa/main/framebuffer.h
> +++ b/src/mesa/main/framebuffer.h
> @@ -84,7 +84,9 @@ _mesa_update_framebuffer_visual(struct gl_context *ctx,
>  				struct gl_framebuffer *fb);
>  
>  extern void
> -_mesa_update_framebuffer(struct gl_context *ctx);
> +_mesa_update_framebuffer(struct gl_context *ctx,
> +                         struct gl_framebuffer *readFb,
> +                         struct gl_framebuffer *drawFb);
>  
>  extern GLboolean
>  _mesa_source_buffer_exists(struct gl_context *ctx, GLenum format);
> diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c
> index dadfb3c..2ebba03 100644
> --- a/src/mesa/main/state.c
> +++ b/src/mesa/main/state.c
> @@ -390,7 +390,7 @@ _mesa_update_state_locked( struct gl_context *ctx )
>        update_frontbit( ctx );
>  
>     if (new_state & _NEW_BUFFERS)
> -      _mesa_update_framebuffer(ctx);
> +      _mesa_update_framebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer);
>  
>     if (new_state & (_NEW_SCISSOR | _NEW_BUFFERS | _NEW_VIEWPORT))
>        _mesa_update_draw_buffer_bounds( ctx );
> 



More information about the mesa-dev mailing list