(Will be merged into the original patches.) Calculating the actual limits is impossible, and softpipe drops vertices that lie outside the specified range. --- src/gallium/auxiliary/util/u_draw.c | 4 ++++ src/mesa/state_tracker/st_draw.c | 3 +++ src/mesa/vbo/vbo_exec_array.c | 8 ++++---- 3 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/src/gallium/auxiliary/util/u_draw.c b/src/gallium/auxiliary/util/u_draw.c index b9f8fcd..d13ccd4 100644 --- a/src/gallium/auxiliary/util/u_draw.c +++ b/src/gallium/auxiliary/util/u_draw.c @@ -161,6 +161,10 @@ util_draw_indirect(struct pipe_context *pipe, info.index_bias = info_in->indexed ? params[3] : 0; info.start_instance = info_in->indexed ? params[4] : params[3]; info.indirect = NULL; + if (!info_in->indexed) { + info.min_index = info.start; + info.max_index = info.start + info.count - 1; + } pipe_buffer_unmap(pipe, transfer); diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c index a07f8be..64470f7 100644 --- a/src/mesa/state_tracker/st_draw.c +++ b/src/mesa/state_tracker/st_draw.c @@ -273,6 +273,9 @@ st_draw_vbo(struct gl_context *ctx, info.instance_count = prims[i].num_instances; info.index_bias = prims[i].basevertex; if (!ib) { + /* NOTE: For indirect drawing, max_index correctly evaluates to ~0, + * since start and count will be 0. + */ info.min_index = info.start; info.max_index = info.start + info.count - 1; } diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c index 75fda00..ba70b5b 100644 --- a/src/mesa/vbo/vbo_exec_array.c +++ b/src/mesa/vbo/vbo_exec_array.c @@ -1382,7 +1382,7 @@ vbo_validated_drawarraysindirect(struct gl_context *ctx, check_buffers_are_unmapped(exec->array.inputs); vbo->draw_prims(ctx, prim, 1, - NULL, GL_TRUE, 0, 0, + NULL, GL_TRUE, 0, ~0, NULL, ctx->DrawIndirectBuffer); @@ -1422,7 +1422,7 @@ vbo_validated_multidrawarraysindirect(struct gl_context *ctx, check_buffers_are_unmapped(exec->array.inputs); vbo->draw_prims(ctx, prim, primcount, - NULL, GL_TRUE, 0, 0, + NULL, GL_TRUE, 0, ~0, NULL, ctx->DrawIndirectBuffer); @@ -1458,7 +1458,7 @@ vbo_validated_drawelementsindirect(struct gl_context *ctx, check_buffers_are_unmapped(exec->array.inputs); vbo->draw_prims(ctx, prim, 1, - &ib, GL_TRUE, 0, 0, + &ib, GL_TRUE, 0, ~0, NULL, ctx->DrawIndirectBuffer); @@ -1507,7 +1507,7 @@ vbo_validated_multidrawelementsindirect(struct gl_context *ctx, check_buffers_are_unmapped(exec->array.inputs); vbo->draw_prims(ctx, prim, primcount, - &ib, GL_TRUE, 0, 0, + &ib, GL_TRUE, 0, ~0, NULL, ctx->DrawIndirectBuffer); -- 1.7.3.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev