freedreno: Push multi-draw closer to backend

It will take some more extensive work to plumb this through the backends
(although that should increase the benefit further), but this is already
worth a nearly 4x speedup in piglit drawoverhead tests with no state
change, so this seems like a useful intermediate step.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9581>
This commit is contained in:
Rob Clark 2021-03-14 11:53:23 -07:00
parent 68e752652c
commit 03cf083dba
1 changed files with 5 additions and 8 deletions

View File

@ -262,11 +262,6 @@ fd_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info,
unsigned num_draws)
in_dt
{
if (num_draws > 1) {
util_draw_multi(pctx, info, indirect, draws, num_draws);
return;
}
struct fd_context *ctx = fd_context(pctx);
/* for debugging problems with indirect draw, it is convenient
@ -370,10 +365,12 @@ fd_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info,
util_format_short_name(pipe_surface_format(pfb->cbufs[0])),
util_format_short_name(pipe_surface_format(pfb->zsbuf)));
if (ctx->draw_vbo(ctx, info, indirect, &draws[0], index_offset))
batch->needs_flush = true;
for (unsigned i = 0; i < num_draws; i++) {
if (ctx->draw_vbo(ctx, info, indirect, &draws[i], index_offset))
batch->needs_flush = true;
batch->num_vertices += draws[0].count * info->instance_count;
batch->num_vertices += draws[i].count * info->instance_count;
}
for (unsigned i = 0; i < ctx->streamout.num_targets; i++) {
assert(num_draws == 1);