On 12/18/2018 08:50 PM, Ilia Mirkin wrote: > Not sure if this ever worked, but the current logic for setting the > min/max index is definitely wrong for indexed draws. While we're at it, > bring in all the usual logic from the non-indirect drawing path. > > Bugzilla: > https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugs.freedesktop.org%2Fshow_bug.cgi%3Fid%3D109086&data=02%7C01%7Cbrianp%40vmware.com%7C6caf58471242445a386a08d665652d9a%7Cb39138ca3cee4b4aa4d6cd83d9dd62f0%7C0%7C0%7C636807882586735220&sdata=ekxW8vXjInP6H7vsVCdLJ4GD9y%2BN8MYpzWYRY87utEA%3D&reserved=0 > Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu> > --- > > This makes it more or less mirror st_draw_vbo. As the comment in the > code says, would be nice to refactor, but ... meh. > > Note that I haven't tested any of the interactions with additional > features, like primitive restart or instancing or any of that. However I > don't think that this would make things *worse*. > > src/mesa/state_tracker/st_draw_feedback.c | 61 +++++++++++++++-------- > 1 file changed, 39 insertions(+), 22 deletions(-) > > diff --git a/src/mesa/state_tracker/st_draw_feedback.c > b/src/mesa/state_tracker/st_draw_feedback.c > index 6ec6d5c16f4..49fdecf7e38 100644 > --- a/src/mesa/state_tracker/st_draw_feedback.c > +++ b/src/mesa/state_tracker/st_draw_feedback.c > @@ -84,27 +84,6 @@ set_feedback_vertex_format(struct gl_context *ctx) > } > > > -/** > - * Helper for drawing current vertex arrays. > - */ > -static void > -draw_arrays(struct draw_context *draw, unsigned mode, > - unsigned start, unsigned count) > -{ > - struct pipe_draw_info info; > - > - util_draw_init_info(&info); > - > - info.mode = mode; > - info.start = start; > - info.count = count; > - info.min_index = start; > - info.max_index = start + count - 1; > - > - draw_vbo(draw, &info); > -} > - > - > /** > * Called by VBO to draw arrays when in selection or feedback mode and > * to implement glRasterPos. > @@ -136,10 +115,18 @@ st_feedback_draw_vbo(struct gl_context *ctx, > struct pipe_transfer *ib_transfer = NULL; > GLuint i; > const void *mapped_indices = NULL; > + struct pipe_draw_info info; > > if (!draw) > return; > > + /* Initialize pipe_draw_info. */ > + info.primitive_restart = false; > + info.vertices_per_patch = ctx->TessCtrlProgram.patch_vertices; > + info.indirect = NULL; > + info.count_from_stream_output = NULL; > + info.restart_index = 0;
Shouldn't we use util_draw_init_info() to make this future-proof? Looks good otherwise. Thanks for fixing this! Reviewed-by: Brian Paul <bri...@vmware.com> > + > st_flush_bitmap_cache(st); > st_invalidate_readpix_cache(st); > > @@ -213,9 +200,23 @@ st_feedback_draw_vbo(struct gl_context *ctx, > mapped_indices = ib->ptr; > } > > + info.index_size = ib->index_size; > + info.min_index = min_index; > + info.max_index = max_index; > + info.has_user_indices = true; > + info.index.user = mapped_indices; > + > draw_set_indexes(draw, > (ubyte *) mapped_indices, > index_size, ~0); > + > + if (ctx->Array._PrimitiveRestart) { > + info.primitive_restart = true; > + info.restart_index = _mesa_primitive_restart_index(ctx, > info.index_size); > + } > + } else { > + info.index_size = 0; > + info.has_user_indices = false; > } > > /* set the constant buffer */ > @@ -226,7 +227,23 @@ st_feedback_draw_vbo(struct gl_context *ctx, > > /* draw here */ > for (i = 0; i < nr_prims; i++) { > - draw_arrays(draw, prims[i].mode, start + prims[i].start, > prims[i].count); > + info.count = prims[i].count; > + > + if (!info.count) > + continue; > + > + info.mode = prims[i].mode; > + info.start = start + prims[i].start; > + info.start_instance = prims[i].base_instance; > + info.instance_count = prims[i].num_instances; > + info.index_bias = prims[i].basevertex; > + info.drawid = prims[i].draw_id; > + if (!ib) { > + info.min_index = info.start; > + info.max_index = info.start + info.count - 1; > + } > + > + draw_vbo(draw, &info); > } > > > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev