Reviewed-by: Fredrik Höglund <fred...@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 ); >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev