Mesa (main): mesa/draw: drop the multi draw with indices fallback.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Dec 23 19:35:09 UTC 2021
Module: Mesa
Branch: main
Commit: 87cc3ee964ca84518952429dd3db682d50ecddd6
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=87cc3ee964ca84518952429dd3db682d50ecddd6
Author: Dave Airlie <airlied at redhat.com>
Date: Mon Dec 20 11:21:33 2021 +1000
mesa/draw: drop the multi draw with indices fallback.
Gallium drivers don't need this.
v2: drop some more code
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14261>
---
src/mesa/main/draw.c | 66 +++++++++++++++-------------------
src/mesa/main/mtypes.h | 3 --
src/mesa/state_tracker/st_extensions.c | 1 -
3 files changed, 29 insertions(+), 41 deletions(-)
diff --git a/src/mesa/main/draw.c b/src/mesa/main/draw.c
index 71b72dc73cc..e291f69791f 100644
--- a/src/mesa/main/draw.c
+++ b/src/mesa/main/draw.c
@@ -981,48 +981,40 @@ _mesa_draw_gallium_fallback(struct gl_context *ctx,
ib.index_size_shift = util_logbase2(index_size);
/* Single draw or a fallback for user indices. */
- if (num_draws == 1 ||
- (info->index_size && info->has_user_indices &&
- !ctx->Const.MultiDrawWithUserIndices)) {
- for (unsigned i = 0; i < num_draws; i++) {
- if (!draws[i].count)
- continue;
+ if (num_draws == 1) {
+ if (!draws[0].count)
+ return;
- if (index_size) {
- ib.count = draws[i].count;
-
- if (info->has_user_indices) {
- ib.obj = NULL;
- /* User indices require start to be added here if
- * Const.MultiDrawWithUserIndices is false.
- */
- ib.ptr = (const char*)info->index.user +
- draws[i].start * index_size;
- } else {
- ib.obj = info->index.gl_bo;
- ib.ptr = NULL;
- }
- }
+ if (index_size) {
+ ib.count = draws[0].count;
- struct _mesa_prim prim;
- prim.mode = info->mode;
- prim.begin = 1;
- prim.end = 1;
- prim.start = index_size && info->has_user_indices ? 0 : draws[i].start;
- prim.count = draws[i].count;
- prim.basevertex = index_size ? draws[i].index_bias : 0;
- prim.draw_id = drawid_offset + (info->increment_draw_id ? i : 0);
-
- if (!index_size) {
- min_index = draws[i].start;
- max_index = draws[i].start + draws[i].count - 1;
+ if (info->has_user_indices) {
+ ib.obj = NULL;
+ ib.ptr = (const char*)info->index.user;
+ } else {
+ ib.obj = info->index.gl_bo;
+ ib.ptr = NULL;
}
+ }
+
+ struct _mesa_prim prim;
+ prim.mode = info->mode;
+ prim.begin = 1;
+ prim.end = 1;
+ prim.start = draws[0].start;
+ prim.count = draws[0].count;
+ prim.basevertex = index_size ? draws[0].index_bias : 0;
+ prim.draw_id = drawid_offset;
- st_feedback_draw_vbo(ctx, &prim, 1, index_size ? &ib : NULL,
- index_bounds_valid, info->primitive_restart,
- info->restart_index, min_index, max_index,
- info->instance_count, info->start_instance);
+ if (!index_size) {
+ min_index = draws[0].start;
+ max_index = draws[0].start + draws[0].count - 1;
}
+
+ st_feedback_draw_vbo(ctx, &prim, 1, index_size ? &ib : NULL,
+ index_bounds_valid, info->primitive_restart,
+ info->restart_index, min_index, max_index,
+ info->instance_count, info->start_instance);
return;
}
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 91b38d90715..579d1be93e0 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -4295,9 +4295,6 @@ struct gl_constants
/** Whether the vertex buffer offset is a signed 32-bit integer. */
bool VertexBufferOffsetIsInt32;
- /** Whether the driver can handle MultiDrawElements with non-VBO indices. */
- bool MultiDrawWithUserIndices;
-
/** Whether out-of-order draw (Begin/End) optimizations are allowed. */
bool AllowDrawOutOfOrder;
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index 04f531094ef..aa5fe924062 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -633,7 +633,6 @@ void st_init_limits(struct pipe_screen *screen,
c->VertexBufferOffsetIsInt32 =
screen->get_param(screen, PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET);
- c->MultiDrawWithUserIndices = true;
c->AllowDynamicVAOFastPath =
screen->get_param(screen, PIPE_CAP_ALLOW_DYNAMIC_VAO_FASTPATH);
More information about the mesa-commit
mailing list