diff --git a/src/gallium/drivers/r300/r300_render.c b/src/gallium/drivers/r300/r300_render.c index e7ffcf11b26..ed89daa82b0 100644 --- a/src/gallium/drivers/r300/r300_render.c +++ b/src/gallium/drivers/r300/r300_render.c @@ -30,6 +30,7 @@ #include "util/u_inlines.h" #include "util/format/u_format.h" +#include "util/u_draw.h" #include "util/u_memory.h" #include "util/u_upload_mgr.h" #include "util/u_prim.h" @@ -791,16 +792,10 @@ static void r300_draw_vbo(struct pipe_context* pipe, const struct pipe_draw_start_count *draws, unsigned num_draws) { - if (num_draws > 1) { - struct pipe_draw_info tmp_info = *dinfo; - - for (unsigned i = 0; i < num_draws; i++) { - r300_draw_vbo(pipe, &tmp_info, indirect, &draws[i], 1); - if (tmp_info.increment_draw_id) - tmp_info.drawid++; - } - return; - } + if (num_draws > 1) { + util_draw_multi(pipe, dinfo, indirect, draws, num_draws); + return; + } struct r300_context* r300 = r300_context(pipe); struct pipe_draw_info info = *dinfo; @@ -864,16 +859,10 @@ static void r300_swtcl_draw_vbo(struct pipe_context* pipe, const struct pipe_draw_start_count *draws, unsigned num_draws) { - if (num_draws > 1) { - struct pipe_draw_info tmp_info = *info; - - for (unsigned i = 0; i < num_draws; i++) { - r300_swtcl_draw_vbo(pipe, &tmp_info, indirect, &draws[i], 1); - if (tmp_info.increment_draw_id) - tmp_info.drawid++; - } - return; - } + if (num_draws > 1) { + util_draw_multi(pipe, info, indirect, draws, num_draws); + return; + } struct r300_context* r300 = r300_context(pipe); struct pipe_draw_start_count draw = draws[0];