On 14 December 2011 13:54, Marek Olšák <mar...@gmail.com> wrote: > On Wed, Dec 7, 2011 at 8:09 PM, Paul Berry <stereotype...@gmail.com> > wrote: > > This patch adds a new bit to the ctx->NewState bitfield, > > _NEW_TRANSFORM_FEEDBACK, to track state changes that affect > > ctx->TransformFeedback. This bit can be used by driver back-ends to > > avoid expensive recomputations when transform feedback state has not > > been modified. > > > > Reviewed-by: Kenneth Graunke <kenn...@whitecape.org> > > --- > > src/mesa/main/mtypes.h | 1 + > > src/mesa/main/transformfeedback.c | 9 ++++++++- > > 2 files changed, 9 insertions(+), 1 deletions(-) > > > > diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h > > index 33b00c6..fc494f7 100644 > > --- a/src/mesa/main/mtypes.h > > +++ b/src/mesa/main/mtypes.h > > @@ -3051,6 +3051,7 @@ struct gl_matrix_stack > > #define _NEW_PROGRAM_CONSTANTS (1 << 27) > > #define _NEW_BUFFER_OBJECT (1 << 28) > > #define _NEW_FRAG_CLAMP (1 << 29) > > +#define _NEW_TRANSFORM_FEEDBACK (1 << 30) /**< > gl_context::TransformFeedback */ > > #define _NEW_ALL ~0 > > /*@}*/ > > > > diff --git a/src/mesa/main/transformfeedback.c > b/src/mesa/main/transformfeedback.c > > index 11abd03..799245d 100644 > > --- a/src/mesa/main/transformfeedback.c > > +++ b/src/mesa/main/transformfeedback.c > > @@ -376,6 +376,7 @@ _mesa_BeginTransformFeedback(GLenum mode) > > return; > > } > > > > + FLUSH_VERTICES(ctx, _NEW_TRANSFORM_FEEDBACK); > > obj->Active = GL_TRUE; > > ctx->TransformFeedback.Mode = mode; > > > > @@ -398,6 +399,7 @@ _mesa_EndTransformFeedback(void) > > return; > > } > > > > + FLUSH_VERTICES(ctx, _NEW_TRANSFORM_FEEDBACK); > > ctx->TransformFeedback.CurrentObject->Active = GL_FALSE; > > > > assert(ctx->Driver.EndTransformFeedback); > > @@ -415,6 +417,7 @@ bind_buffer_range(struct gl_context *ctx, GLuint > index, > > { > > struct gl_transform_feedback_object *obj = > > ctx->TransformFeedback.CurrentObject; > > + FLUSH_VERTICES(ctx, _NEW_TRANSFORM_FEEDBACK); > > > > /* The general binding point */ > > _mesa_reference_buffer_object(ctx, > > Sorry for the late reply. > > There's no need to set _NEW_TRANSFORM_FEEDBACK in bind_buffer_range, > because it's not allowed to change buffer bindings for an active TFB > object. Buffer bindings can only be changed for inactive TFB objects. > And because they're inactive, the drivers don't need to know about it. > The TFB buffers are effectively bound through BeginTransformFeedback > and unbound through EndTransformFeedback (likewise for Resume and > Pause). > > Marek >
Ah, you're right. I missed this subtlety. I've already landed this patch, so I'll submit a follow-up patch that replaces the unnecessary calls to FLUSH_VERTICES() with comments explaining why a flush is unnecessary.
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev