diff --git a/src/gallium/drivers/freedreno/a2xx/fd2_draw.c b/src/gallium/drivers/freedreno/a2xx/fd2_draw.c index 95860ee17ee..d0afc3f0916 100644 --- a/src/gallium/drivers/freedreno/a2xx/fd2_draw.c +++ b/src/gallium/drivers/freedreno/a2xx/fd2_draw.c @@ -223,6 +223,8 @@ fd2_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *pinfo, fd_context_all_clean(ctx); + ctx->batch->num_vertices += pdraw->count * pinfo->instance_count; + return true; } diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_draw.c b/src/gallium/drivers/freedreno/a3xx/fd3_draw.c index db1f1f5be13..ef42641e6b4 100644 --- a/src/gallium/drivers/freedreno/a3xx/fd3_draw.c +++ b/src/gallium/drivers/freedreno/a3xx/fd3_draw.c @@ -160,6 +160,8 @@ fd3_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info, fd_context_all_clean(ctx); + ctx->batch->num_vertices += draw->count * info->instance_count; + return true; } diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_draw.c b/src/gallium/drivers/freedreno/a6xx/fd6_draw.c index a6f0b4073eb..a045757c03c 100644 --- a/src/gallium/drivers/freedreno/a6xx/fd6_draw.c +++ b/src/gallium/drivers/freedreno/a6xx/fd6_draw.c @@ -195,7 +195,7 @@ fd6_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info, emit.ctx = ctx; emit.info = info; emit.indirect = indirect; - emit.draw = draw; + emit.draw = NULL; emit.rasterflat = ctx->rasterizer->flatshade; emit.sprite_coord_enable = ctx->rasterizer->sprite_coord_enable; emit.sprite_coord_mode = ctx->rasterizer->sprite_coord_mode; @@ -239,8 +239,10 @@ fd6_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info, emit.gs = fd6_emit_get_prog(&emit)->gs; emit.fs = fd6_emit_get_prog(&emit)->fs; - if (emit.prog->num_driver_params || fd6_ctx->has_dp_state) + if (emit.prog->num_driver_params || fd6_ctx->has_dp_state) { + emit.draw = draw; emit.dirty_groups |= BIT(FD6_GROUP_DRIVER_PARAMS); + } /* If we are doing xfb, we need to emit the xfb state on every draw: */ if (emit.prog->stream_output) diff --git a/src/gallium/drivers/freedreno/freedreno_draw.c b/src/gallium/drivers/freedreno/freedreno_draw.c index d29d44e77d7..63464c26301 100644 --- a/src/gallium/drivers/freedreno/freedreno_draw.c +++ b/src/gallium/drivers/freedreno/freedreno_draw.c @@ -355,8 +355,6 @@ fd_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info, for (unsigned i = 0; i < num_draws; i++) { ctx->draw_vbo(ctx, info, drawid_offset, indirect, &draws[i], index_offset); - - batch->num_vertices += draws[i].count * info->instance_count; } if (unlikely(ctx->stats_users > 0))