}
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
{
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;
}
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;
}
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;
}
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)
{
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;
}
}
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;
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;
}
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;
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);