From 918caaad59840841191c01d7bd0d8f042983fe41 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Sun, 5 Feb 2023 11:34:37 -0800 Subject: [PATCH] freedreno: Move num_vertices calc to backend Only used by a2xx and a3xx backends, so move it there. Also make it more clear that fd6_emit::draw is only used in the driver-params case. Signed-off-by: Rob Clark Part-of: --- src/gallium/drivers/freedreno/a2xx/fd2_draw.c | 2 ++ src/gallium/drivers/freedreno/a3xx/fd3_draw.c | 2 ++ src/gallium/drivers/freedreno/a6xx/fd6_draw.c | 6 ++++-- src/gallium/drivers/freedreno/freedreno_draw.c | 2 -- 4 files changed, 8 insertions(+), 4 deletions(-) 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))