mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 10:40:11 +01:00
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:
parent
6bfee9e669
commit
c4e2e821a2
7 changed files with 77 additions and 13 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue