On 11/09/2013 01:02 AM, Chris Forbes wrote: > Based on part of Patch 2 of Christoph Bumiller's ARB_draw_indirect series. > > Signed-off-by: Chris Forbes <chr...@ijw.co.nz> > --- > src/mesa/vbo/vbo_exec_array.c | 216 > ++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 216 insertions(+)
I think this would be a great place to introduce the indirect_offset parameter from patch 1. > diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c > index 4ea10ee..1c6b8b3 100644 > --- a/src/mesa/vbo/vbo_exec_array.c > +++ b/src/mesa/vbo/vbo_exec_array.c > @@ -1564,6 +1564,164 @@ vbo_exec_DrawTransformFeedbackStreamInstanced(GLenum > mode, GLuint name, > vbo_draw_transform_feedback(ctx, mode, obj, stream, primcount); > } > > +static void > +vbo_validated_drawarraysindirect(struct gl_context *ctx, > + GLenum mode, const GLvoid *indirect) > +{ > + struct vbo_context *vbo = vbo_context(ctx); > + struct vbo_exec_context *exec = &vbo->exec; > + struct _mesa_prim prim[1]; > + > + vbo_bind_arrays(ctx); > + > + memset(prim, 0, sizeof(prim)); > + prim[0].begin = 1; > + prim[0].end = 1; > + prim[0].mode = mode; > + prim[0].indirect_offset = (GLsizeiptr)indirect; > + > + /* NOTE: We do NOT want to handle primitive restart here, nor perform any > + * other checks that require knowledge of the values in the command > buffer. > + * That would deafeat the whole purpose of this function. > + */ "defeat" (typo). > + > + check_buffers_are_unmapped(exec->array.inputs); > + vbo->draw_prims(ctx, prim, 1, > + NULL, GL_TRUE, 0, ~0, > + NULL, > + ctx->DrawIndirectBuffer); > + > + if (MESA_DEBUG_FLAGS & DEBUG_ALWAYS_FLUSH) > + _mesa_flush(ctx); > +} > + > +static void > +vbo_validated_multidrawarraysindirect(struct gl_context *ctx, > + GLenum mode, > + const GLvoid *indirect, > + GLsizei primcount, GLsizei stride) > +{ > + struct vbo_context *vbo = vbo_context(ctx); > + struct vbo_exec_context *exec = &vbo->exec; > + struct _mesa_prim *prim; > + GLsizei i; > + GLsizeiptr offset = (GLsizeiptr)indirect; > + > + if (primcount == 0) > + return; See, you even no-op primcount == 0 here :) Other than the typo fix, this is: Reviewed-by: Kenneth Graunke <kenn...@whitecape.org> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev