freedreno: Push num_draws down to backend
authorRob Clark <robdclark@chromium.org>
Sun, 5 Feb 2023 19:45:35 +0000 (11:45 -0800)
committerMarge Bot <emma+marge@anholt.net>
Thu, 16 Feb 2023 19:57:13 +0000 (19:57 +0000)
Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21274>

src/gallium/drivers/freedreno/a2xx/fd2_draw.c
src/gallium/drivers/freedreno/a3xx/fd3_draw.c
src/gallium/drivers/freedreno/a4xx/fd4_draw.c
src/gallium/drivers/freedreno/a5xx/fd5_draw.c
src/gallium/drivers/freedreno/a6xx/fd6_draw.c
src/gallium/drivers/freedreno/freedreno_context.h
src/gallium/drivers/freedreno/freedreno_draw.c

index d0afc3f..2b8510c 100644 (file)
@@ -229,6 +229,19 @@ fd2_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *pinfo,
 }
 
 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;
 }
index ef42641..915c792 100644 (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;
 }
index 803db56..040ad2f 100644 (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;
 }
index 2c932f7..fadb093 100644 (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;
 }
index a045757..1427958 100644 (file)
@@ -363,6 +363,19 @@ fd6_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info,
 }
 
 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
 {
    struct fd_ringbuffer *ring;
@@ -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;
 }
index 223f834..e9e13fa 100644 (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;
index 51efc39..4af873b 100644 (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);