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

Rob Clark robdclark at gmail.com
Mon May 8 21:19:31 UTC 2017


On Mon, May 8, 2017 at 4:58 PM, Dieter Nützel <Dieter at nuetzel-hh.de> wrote:
> 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.
>

thanks.. actually radeonsi never looks at info->min/max_index (which
is I guess why the issue was unnoticed) ;-)

BR,
-R

> 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