vc4: don't use index_bias if indexed
authorMarek Olšák <marek.olsak@amd.com>
Sun, 22 Nov 2020 06:53:18 +0000 (01:53 -0500)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 5 Jan 2021 00:22:33 +0000 (19:22 -0500)
index_bias is undefined if index_size == 0.

Reviewed-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7679>

src/gallium/drivers/vc4/vc4_draw.c

index f2073d8..0e4d5b9 100644 (file)
@@ -182,6 +182,7 @@ vc4_emit_gl_shader_state(struct vc4_context *vc4,
         };
 
         uint32_t max_index = 0xffff;
+        unsigned index_bias = info->index_size ? info->index_bias : 0;
         for (int i = 0; i < vtx->num_elements; i++) {
                 struct pipe_vertex_element *elem = &vtx->pipe[i];
                 struct pipe_vertex_buffer *vb =
@@ -190,7 +191,7 @@ vc4_emit_gl_shader_state(struct vc4_context *vc4,
                 /* not vc4->dirty tracked: vc4->last_index_bias */
                 uint32_t offset = (vb->buffer_offset +
                                    elem->src_offset +
-                                   vb->stride * (info->index_bias +
+                                   vb->stride * (index_bias +
                                                  extra_index_bias));
                 uint32_t vb_size = rsc->bo->size - offset;
                 uint32_t elem_size =
@@ -247,7 +248,7 @@ vc4_emit_gl_shader_state(struct vc4_context *vc4,
                            &vc4->constbuf[PIPE_SHADER_VERTEX],
                            &vc4->verttex);
 
-        vc4->last_index_bias = info->index_bias + extra_index_bias;
+        vc4->last_index_bias = index_bias + extra_index_bias;
         vc4->max_index = max_index;
         job->shader_rec_count++;
 }
@@ -359,6 +360,7 @@ vc4_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info,
 
         bool needs_drawarrays_shader_state = false;
 
+        unsigned index_bias = info->index_size ? info->index_bias : 0;
         if ((vc4->dirty & (VC4_DIRTY_VTXBUF |
                            VC4_DIRTY_VTXSTATE |
                            VC4_DIRTY_PRIM_MODE |
@@ -369,7 +371,7 @@ vc4_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info,
                            vc4->prog.cs->uniform_dirty_bits |
                            vc4->prog.vs->uniform_dirty_bits |
                            vc4->prog.fs->uniform_dirty_bits)) ||
-            vc4->last_index_bias != info->index_bias) {
+            vc4->last_index_bias != index_bias) {
                 if (info->index_size)
                         vc4_emit_gl_shader_state(vc4, info, 0);
                 else