freedreno: Push num_draws down to backend

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21274>
This commit is contained in:
Rob Clark 2023-02-05 11:45:35 -08:00 committed by Marge Bot
parent 6bfee9e669
commit c4e2e821a2
7 changed files with 77 additions and 13 deletions

View file

@ -228,6 +228,19 @@ fd2_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *pinfo,
return true;
}
static void
fd2_draw_vbos(struct fd_context *ctx, const struct pipe_draw_info *info,
unsigned drawid_offset,
const struct pipe_draw_indirect_info *indirect,
const struct pipe_draw_start_count_bias *draws,
unsigned num_draws,
unsigned index_offset)
assert_dt
{
for (unsigned i = 0; i < num_draws; i++)
fd2_draw_vbo(ctx, info, drawid_offset, indirect, &draws[i], index_offset);
}
static void
clear_state(struct fd_batch *batch, struct fd_ringbuffer *ring,
unsigned buffers, bool fast_clear) assert_dt
@ -651,6 +664,6 @@ void
fd2_draw_init(struct pipe_context *pctx) disable_thread_safety_analysis
{
struct fd_context *ctx = fd_context(pctx);
ctx->draw_vbo = fd2_draw_vbo;
ctx->draw_vbos = fd2_draw_vbos;
ctx->clear = fd2_clear;
}

View file

@ -165,9 +165,22 @@ fd3_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info,
return true;
}
static void
fd3_draw_vbos(struct fd_context *ctx, const struct pipe_draw_info *info,
unsigned drawid_offset,
const struct pipe_draw_indirect_info *indirect,
const struct pipe_draw_start_count_bias *draws,
unsigned num_draws,
unsigned index_offset)
assert_dt
{
for (unsigned i = 0; i < num_draws; i++)
fd3_draw_vbo(ctx, info, drawid_offset, indirect, &draws[i], index_offset);
}
void
fd3_draw_init(struct pipe_context *pctx) disable_thread_safety_analysis
{
struct fd_context *ctx = fd_context(pctx);
ctx->draw_vbo = fd3_draw_vbo;
ctx->draw_vbos = fd3_draw_vbos;
}

View file

@ -176,9 +176,22 @@ fd4_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info,
return true;
}
static void
fd4_draw_vbos(struct fd_context *ctx, const struct pipe_draw_info *info,
unsigned drawid_offset,
const struct pipe_draw_indirect_info *indirect,
const struct pipe_draw_start_count_bias *draws,
unsigned num_draws,
unsigned index_offset)
assert_dt
{
for (unsigned i = 0; i < num_draws; i++)
fd4_draw_vbo(ctx, info, drawid_offset, indirect, &draws[i], index_offset);
}
void
fd4_draw_init(struct pipe_context *pctx) disable_thread_safety_analysis
{
struct fd_context *ctx = fd_context(pctx);
ctx->draw_vbo = fd4_draw_vbo;
ctx->draw_vbos = fd4_draw_vbos;
}

View file

@ -149,6 +149,19 @@ fd5_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info,
return true;
}
static void
fd5_draw_vbos(struct fd_context *ctx, const struct pipe_draw_info *info,
unsigned drawid_offset,
const struct pipe_draw_indirect_info *indirect,
const struct pipe_draw_start_count_bias *draws,
unsigned num_draws,
unsigned index_offset)
assert_dt
{
for (unsigned i = 0; i < num_draws; i++)
fd5_draw_vbo(ctx, info, drawid_offset, indirect, &draws[i], index_offset);
}
static bool
is_z32(enum pipe_format format)
{
@ -348,6 +361,6 @@ void
fd5_draw_init(struct pipe_context *pctx) disable_thread_safety_analysis
{
struct fd_context *ctx = fd_context(pctx);
ctx->draw_vbo = fd5_draw_vbo;
ctx->draw_vbos = fd5_draw_vbos;
ctx->clear = fd5_clear;
}

View file

@ -362,6 +362,19 @@ fd6_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info,
return true;
}
static void
fd6_draw_vbos(struct fd_context *ctx, const struct pipe_draw_info *info,
unsigned drawid_offset,
const struct pipe_draw_indirect_info *indirect,
const struct pipe_draw_start_count_bias *draws,
unsigned num_draws,
unsigned index_offset)
assert_dt
{
for (unsigned i = 0; i < num_draws; i++)
fd6_draw_vbo(ctx, info, drawid_offset, indirect, &draws[i], index_offset);
}
static void
fd6_clear_lrz(struct fd_batch *batch, struct fd_resource *zsbuf, double depth) assert_dt
{
@ -534,6 +547,6 @@ void
fd6_draw_init(struct pipe_context *pctx) disable_thread_safety_analysis
{
struct fd_context *ctx = fd_context(pctx);
ctx->draw_vbo = fd6_draw_vbo;
ctx->draw_vbos = fd6_draw_vbos;
ctx->clear = fd6_clear;
}

View file

@ -488,11 +488,12 @@ struct fd_context {
void (*emit_sysmem_fini)(struct fd_batch *batch) dt;
/* draw: */
bool (*draw_vbo)(struct fd_context *ctx, const struct pipe_draw_info *info,
unsigned drawid_offset,
const struct pipe_draw_indirect_info *indirect,
const struct pipe_draw_start_count_bias *draw,
unsigned index_offset) dt;
void (*draw_vbos)(struct fd_context *ctx, const struct pipe_draw_info *info,
unsigned drawid_offset,
const struct pipe_draw_indirect_info *indirect,
const struct pipe_draw_start_count_bias *draws,
unsigned num_draws,
unsigned index_offset) dt;
bool (*clear)(struct fd_context *ctx, unsigned buffers,
const union pipe_color_union *color, double depth,
unsigned stencil) dt;

View file

@ -389,9 +389,7 @@ fd_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info,
batch->cost += ctx->draw_cost;
for (unsigned i = 0; i < num_draws; i++) {
ctx->draw_vbo(ctx, info, drawid_offset, indirect, &draws[i], index_offset);
}
ctx->draw_vbos(ctx, info, drawid_offset, indirect, draws, num_draws, index_offset);
if (unlikely(ctx->stats_users > 0))
update_draw_stats(ctx, info, draws, num_draws);