Hi, could somebody please take a look at this series? It changes a couple of things in gl_context and the vbo module.
The other two patches are: [PATCH 2/3] mesa: move gl_client_array*[] from vbo_draw_func into gl_context [PATCH 3/3] mesa: add gl_context::NewDriverState and use it for vertex arrays Thanks, Marek On Wed, Apr 25, 2012 at 12:00 AM, Marek Olšák <mar...@gmail.com> wrote: > I'll need vbo_context in that function soon. > --- > src/mesa/vbo/vbo_context.h | 35 +++++++++++++++++++++++++++++++++++ > src/mesa/vbo/vbo_exec.h | 36 ------------------------------------ > src/mesa/vbo/vbo_exec_api.c | 2 +- > src/mesa/vbo/vbo_exec_array.c | 2 +- > src/mesa/vbo/vbo_save_draw.c | 3 +-- > 5 files changed, 38 insertions(+), 40 deletions(-) > > diff --git a/src/mesa/vbo/vbo_context.h b/src/mesa/vbo/vbo_context.h > index b9a8aff..a6397ba 100644 > --- a/src/mesa/vbo/vbo_context.h > +++ b/src/mesa/vbo/vbo_context.h > @@ -58,6 +58,18 @@ > #include "vbo_save.h" > > > +/** Used to signal when transitioning from one kind of drawing method > + * to another. > + */ > +enum draw_method > +{ > + DRAW_NONE, /**< Initial value only */ > + DRAW_BEGIN_END, > + DRAW_DISPLAY_LIST, > + DRAW_ARRAYS > +}; > + > + > struct vbo_context { > struct gl_client_array currval[VBO_ATTRIB_MAX]; > > @@ -74,6 +86,8 @@ struct vbo_context { > * is responsible for initiating any fallback actions required: > */ > vbo_draw_func draw_prims; > + > + enum draw_method last_draw_method; > }; > > > @@ -101,4 +115,25 @@ get_program_mode( struct gl_context *ctx ) > } > > > +/** > + * This is called by glBegin, glDrawArrays and glDrawElements (and > + * variations of those calls). When we transition from immediate mode > + * drawing to array drawing we need to invalidate the array state. > + * > + * glBegin/End builds vertex arrays. Those arrays may look identical > + * to glDrawArrays arrays except that the position of the elements may > + * be different. For example, arrays of (position3v, normal3f) vs. arrays > + * of (normal3f, position3f). So we need to make sure we notify drivers > + * that arrays may be changing. > + */ > +static inline void > +vbo_draw_method(struct vbo_context *vbo, enum draw_method method) > +{ > + if (vbo->last_draw_method != method) { > + struct gl_context *ctx = vbo->exec.ctx; > + ctx->Driver.UpdateState(ctx, _NEW_ARRAY); > + vbo->last_draw_method = method; > + } > +} > + > #endif > diff --git a/src/mesa/vbo/vbo_exec.h b/src/mesa/vbo/vbo_exec.h > index be9f3d7..4ac7d16 100644 > --- a/src/mesa/vbo/vbo_exec.h > +++ b/src/mesa/vbo/vbo_exec.h > @@ -78,26 +78,12 @@ struct vbo_exec_copied_vtx { > }; > > > -/** Used to signal when transitioning from one kind of drawing method > - * to another. > - */ > -enum draw_method > -{ > - DRAW_NONE, /**< Initial value only */ > - DRAW_BEGIN_END, > - DRAW_DISPLAY_LIST, > - DRAW_ARRAYS > -}; > - > - > struct vbo_exec_context > { > struct gl_context *ctx; > GLvertexformat vtxfmt; > GLvertexformat vtxfmt_noop; > > - enum draw_method last_draw_method; > - > struct { > struct gl_buffer_object *bufferobj; > > @@ -174,28 +160,6 @@ void vbo_exec_vtx_init( struct vbo_exec_context *exec ); > void vbo_exec_vtx_destroy( struct vbo_exec_context *exec ); > > > -/** > - * This is called by glBegin, glDrawArrays and glDrawElements (and > - * variations of those calls). When we transition from immediate mode > - * drawing to array drawing we need to invalidate the array state. > - * > - * glBegin/End builds vertex arrays. Those arrays may look identical > - * to glDrawArrays arrays except that the position of the elements may > - * be different. For example, arrays of (position3v, normal3f) vs. arrays > - * of (normal3f, position3f). So we need to make sure we notify drivers > - * that arrays may be changing. > - */ > -static inline void > -vbo_draw_method(struct vbo_exec_context *exec, enum draw_method method) > -{ > - if (exec->last_draw_method != method) { > - struct gl_context *ctx = exec->ctx; > - ctx->Driver.UpdateState(ctx, _NEW_ARRAY); > - exec->last_draw_method = method; > - } > -} > - > - > #if FEATURE_beginend > > void vbo_exec_vtx_flush( struct vbo_exec_context *exec, GLboolean unmap ); > diff --git a/src/mesa/vbo/vbo_exec_api.c b/src/mesa/vbo/vbo_exec_api.c > index 3f95410..b87da18 100644 > --- a/src/mesa/vbo/vbo_exec_api.c > +++ b/src/mesa/vbo/vbo_exec_api.c > @@ -700,7 +700,7 @@ static void GLAPIENTRY vbo_exec_Begin( GLenum mode ) > return; > } > > - vbo_draw_method(exec, DRAW_BEGIN_END); > + vbo_draw_method(vbo_context(ctx), DRAW_BEGIN_END); > > if (ctx->Driver.PrepareExecBegin) > ctx->Driver.PrepareExecBegin(ctx); > diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c > index 2dcfb8e..6c8a32e 100644 > --- a/src/mesa/vbo/vbo_exec_array.c > +++ b/src/mesa/vbo/vbo_exec_array.c > @@ -523,7 +523,7 @@ vbo_bind_arrays(struct gl_context *ctx) > struct vbo_context *vbo = vbo_context(ctx); > struct vbo_exec_context *exec = &vbo->exec; > > - vbo_draw_method(exec, DRAW_ARRAYS); > + vbo_draw_method(vbo, DRAW_ARRAYS); > > if (exec->array.recalculate_inputs) { > recalculate_input_bindings(ctx); > diff --git a/src/mesa/vbo/vbo_save_draw.c b/src/mesa/vbo/vbo_save_draw.c > index 88a9a7e..47564d3 100644 > --- a/src/mesa/vbo/vbo_save_draw.c > +++ b/src/mesa/vbo/vbo_save_draw.c > @@ -250,7 +250,6 @@ vbo_save_playback_vertex_list(struct gl_context *ctx, > void *data) > const struct vbo_save_vertex_list *node = > (const struct vbo_save_vertex_list *) data; > struct vbo_save_context *save = &vbo_context(ctx)->save; > - struct vbo_exec_context *exec = &vbo_context(ctx)->exec; > GLboolean remap_vertex_store = GL_FALSE; > > if (save->vertex_store->buffer) { > @@ -304,7 +303,7 @@ vbo_save_playback_vertex_list(struct gl_context *ctx, > void *data) > > vbo_bind_vertex_list( ctx, node ); > > - vbo_draw_method(exec, DRAW_DISPLAY_LIST); > + vbo_draw_method(vbo_context(ctx), DRAW_DISPLAY_LIST); > > /* Again... > */ > -- > 1.7.5.4 > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev