[Mesa-dev] [PATCH] mesa/vbo: fix invalid min/max indexes

Dieter Nützel Dieter at nuetzel-hh.de
Mon May 8 20:58:49 UTC 2017


Hello Rob,

FWIW this is
Tested-by: Dieter Nützel <Dieter at nuetzel-hh.de>

on radeonsi/RX580 (my first on new GREAT hardware) ;-)
But 'glmark2 -b ideas' worked for me on radeonsi without this.

Greetings,
Dieter

Am 08.05.2017 22:37, schrieb Rob Clark:
> Fixes: c3f37e9b ("st/mesa: use min_index and max_index directly from 
> vbo")
> Signed-off-by: Rob Clark <robdclark at gmail.com>
> ---
> I haven't had a chance to piglit this yet, but it does fix the
> regression w/ 'glmark2 -b ideas'.
> 
>  src/mesa/vbo/vbo_exec_array.c | 22 ++++++++++++++++------
>  1 file changed, 16 insertions(+), 6 deletions(-)
> 
> diff --git a/src/mesa/vbo/vbo_exec_array.c 
> b/src/mesa/vbo/vbo_exec_array.c
> index 0fcaefe..437d260 100644
> --- a/src/mesa/vbo/vbo_exec_array.c
> +++ b/src/mesa/vbo/vbo_exec_array.c
> @@ -855,6 +855,11 @@ vbo_validated_drawrangeelements(struct gl_context
> *ctx, GLenum mode,
>     struct _mesa_index_buffer ib;
>     struct _mesa_prim prim;
> 
> +   if (!index_bounds_valid) {
> +      assert(start == 0u);
> +      assert(end == ~0u);
> +   }
> +
>     if (skip_draw_elements(ctx, count, indices))
>        return;
> 
> @@ -999,6 +1004,11 @@ vbo_exec_DrawRangeElementsBaseVertex(GLenum
> mode, GLuint start, GLuint end,
>     (void) check_draw_elements_data;
>  #endif
> 
> +   if (!index_bounds_valid) {
> +      start = 0;
> +      end = ~0;
> +   }
> +
>     vbo_validated_drawrangeelements(ctx, mode, index_bounds_valid, 
> start, end,
>                                     count, type, indices, basevertex, 
> 1, 0);
>  }
> @@ -1048,7 +1058,7 @@ vbo_exec_DrawElements(GLenum mode, GLsizei
> count, GLenum type,
>           return;
>     }
> 
> -   vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, ~0, ~0,
> +   vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, 0, ~0,
>                                     count, type, indices, 0, 1, 0);
>  }
> 
> @@ -1077,7 +1087,7 @@ vbo_exec_DrawElementsBaseVertex(GLenum mode,
> GLsizei count, GLenum type,
>           return;
>     }
> 
> -   vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, ~0, ~0,
> +   vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, 0, ~0,
>                                     count, type, indices, basevertex, 
> 1, 0);
>  }
> 
> @@ -1107,7 +1117,7 @@ vbo_exec_DrawElementsInstanced(GLenum mode,
> GLsizei count, GLenum type,
>           return;
>     }
> 
> -   vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, ~0, ~0,
> +   vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, 0, ~0,
>                                     count, type, indices, 0, 
> numInstances, 0);
>  }
> 
> @@ -1142,7 +1152,7 @@ vbo_exec_DrawElementsInstancedBaseVertex(GLenum
> mode, GLsizei count,
>           return;
>     }
> 
> -   vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, ~0, ~0,
> +   vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, 0, ~0,
>                                     count, type, indices,
>                                     basevertex, numInstances, 0);
>  }
> @@ -1179,7 +1189,7 @@
> vbo_exec_DrawElementsInstancedBaseInstance(GLenum mode, GLsizei count,
>           return;
>     }
> 
> -   vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, ~0, ~0,
> +   vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, 0, ~0,
>                                     count, type, indices, 0, 
> numInstances,
>                                     baseInstance);
>  }
> @@ -1218,7 +1228,7 @@
> vbo_exec_DrawElementsInstancedBaseVertexBaseInstance(GLenum mode,
>           return;
>     }
> 
> -   vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, ~0, ~0,
> +   vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, 0, ~0,
>                                     count, type, indices, basevertex,
>                                     numInstances, baseInstance);
>  }


More information about the mesa-dev mailing list