From c42952ea90f42538505c213763bf4bd9776c2ff4 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Mon, 8 May 2017 16:31:56 -0400 Subject: [PATCH] mesa/vbo: fix invalid min/max indexes MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Fixes: c3f37e9b ("st/mesa: use min_index and max_index directly from vbo") Signed-off-by: Rob Clark Reviewed-by: Marek Olšák Tested-by: Dieter Nützel --- 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); } -- 2.7.4