Mesa (main): aux/draw: if pipe_draw_info::index_bias_varies is not set, ignore index_bias for N>1
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Jun 2 02:19:01 UTC 2021
Module: Mesa
Branch: main
Commit: 4a68b16a524b0423517441e7cbe9892946feed6d
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4a68b16a524b0423517441e7cbe9892946feed6d
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Tue May 18 11:10:02 2021 -0400
aux/draw: if pipe_draw_info::index_bias_varies is not set, ignore index_bias for N>1
this enables some optimizations in lavapipe
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10995>
---
src/gallium/auxiliary/draw/draw_pt.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/src/gallium/auxiliary/draw/draw_pt.c b/src/gallium/auxiliary/draw/draw_pt.c
index 323052cfb6d..53ec0d099a9 100644
--- a/src/gallium/auxiliary/draw/draw_pt.c
+++ b/src/gallium/auxiliary/draw/draw_pt.c
@@ -56,6 +56,7 @@ DEBUG_GET_ONCE_BOOL_OPTION(draw_no_fse, "DRAW_NO_FSE", FALSE)
static boolean
draw_pt_arrays(struct draw_context *draw,
unsigned prim,
+ bool index_bias_varies,
const struct pipe_draw_start_count_bias *draw_info,
unsigned num_draws)
{
@@ -153,7 +154,9 @@ draw_pt_arrays(struct draw_context *draw,
} else
draw_pt_split_prim(prim, &first, &incr);
count = draw_pt_trim_count(draw_info[i].count, first, incr);
- draw->pt.user.eltBias = draw->pt.user.eltSize ? draw_info[i].index_bias : 0;
+ draw->pt.user.eltBias = draw->pt.user.eltSize ?
+ (index_bias_varies ? draw_info[i].index_bias : draw_info[0].index_bias) :
+ 0;
if (count >= first)
frontend->run( frontend, draw_info[i].start, count );
@@ -390,7 +393,7 @@ prim_restart_loop(struct draw_context *draw,
if (i < elt_max && restart_idx == info->restart_index) {
if (cur.count > 0) {
/* draw elts up to prev pos */
- draw_pt_arrays(draw, info->mode, &cur, 1);
+ draw_pt_arrays(draw, info->mode, info->index_bias_varies, &cur, 1);
}
/* begin new prim at next elt */
cur.start = i + 1;
@@ -401,7 +404,7 @@ prim_restart_loop(struct draw_context *draw,
}
}
if (cur.count > 0) {
- draw_pt_arrays(draw, info->mode, &cur, 1);
+ draw_pt_arrays(draw, info->mode, info->index_bias_varies, &cur, 1);
}
}
@@ -429,7 +432,7 @@ draw_pt_arrays_restart(struct draw_context *draw,
/* Non-indexed prims (draw_arrays).
* Primitive restart should have been handled in gallium frontends.
*/
- draw_pt_arrays(draw, prim, draw_info, num_draws);
+ draw_pt_arrays(draw, prim, info->index_bias_varies, draw_info, num_draws);
}
}
@@ -491,7 +494,7 @@ draw_instances(struct draw_context *draw,
draw_pt_arrays_restart(draw, info, draws, num_draws);
}
else {
- draw_pt_arrays(draw, info->mode, draws, num_draws);
+ draw_pt_arrays(draw, info->mode, info->index_bias_varies, draws, num_draws);
}
}
}
@@ -577,7 +580,8 @@ draw_vbo(struct draw_context *draw,
if (0) {
for (unsigned i = 0; i < num_draws; i++)
- draw_print_arrays(draw, use_info->mode, use_draws[i].start, MIN2(use_draws[i].count, 20), use_draws[i].index_bias);
+ draw_print_arrays(draw, use_info->mode, use_draws[i].start, MIN2(use_draws[i].count, 20),
+ use_info->index_bias_varies ? use_draws[i].index_bias : use_draws[0].index_bias);
}
index_limit = util_draw_max_index(draw->pt.vertex_buffer,
More information about the mesa-commit
mailing list