<div dir="ltr"><div dir="ltr">Yes, it would be great.<br><br>Thanks,<br>Andrii.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Feb 18, 2019 at 4:03 PM Lionel Landwerlin <<a href="mailto:lionel.g.landwerlin@intel.com">lionel.g.landwerlin@intel.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Do you need me to push this change?<br>
<br>
-Lionel<br>
<br>
On 18/02/2019 14:00, <a href="mailto:asimiklit.work@gmail.com" target="_blank">asimiklit.work@gmail.com</a> wrote:<br>
> From: Andrii Simiklit <<a href="mailto:andrii.simiklit@globallogic.com" target="_blank">andrii.simiklit@globallogic.com</a>><br>
><br>
> Looks like this test should be able to catch this kind of the regressions<br>
> os I add it here.<br>
> This test should draw green rectangle if everything is ok.<br>
> But in case of bug which makes us unable to disable<br>
> the primitive restart option it should draw just one triangle.<br>
><br>
> The solution was suggested.<br>
><br>
> v2: Added the link to the bug in the comment of the new function<br>
>      ( Lionel Landwerlin <<a href="mailto:lionel.g.landwerlin@intel.com" target="_blank">lionel.g.landwerlin@intel.com</a>> )<br>
><br>
> Bugzilla: <a href="https://bugs.freedesktop.org/show_bug.cgi?id=109451" rel="noreferrer" target="_blank">https://bugs.freedesktop.org/show_bug.cgi?id=109451</a><br>
> Reviewed-by: Lionel Landwerlin <<a href="mailto:lionel.g.landwerlin@intel.com" target="_blank">lionel.g.landwerlin@intel.com</a>><br>
> Signed-off-by: Andrii Simiklit <<a href="mailto:andrii.simiklit@globallogic.com" target="_blank">andrii.simiklit@globallogic.com</a>><br>
> ---<br>
>   tests/general/primitive-restart.c | 73 +++++++++++++++++++++++++++++++<br>
>   1 file changed, 73 insertions(+)<br>
><br>
> diff --git a/tests/general/primitive-restart.c b/tests/general/primitive-restart.c<br>
> index 4219a6c5b..941540451 100644<br>
> --- a/tests/general/primitive-restart.c<br>
> +++ b/tests/general/primitive-restart.c<br>
> @@ -75,6 +75,11 @@ static bool Have_31;<br>
>   static bool TestGL31;<br>
>   <br>
>   <br>
> +static void<br>
> +enable_restart(GLuint restart_index);<br>
> +static void<br>
> +disable_restart(void);<br>
> +<br>
>   static bool<br>
>   check_rendering(void)<br>
>   {<br>
> @@ -184,6 +189,72 @@ test_begin_end(GLenum primMode)<br>
>      return pass;<br>
>   }<br>
>   <br>
> +static void<br>
> +write_vec2_value(GLfloat * verts, GLuint vidx, GLfloat x, GLfloat y)<br>
> +{<br>
> +   verts[(vidx * 2) + 0] = x;<br>
> +   verts[(vidx * 2) + 1] = y;<br>
> +}<br>
> +/* This test should draw green rectangle if everything is ok.<br>
> + * But in case of bug which makes us unable to disable<br>
> + * the primitive restart option it should draw just one triangle.<br>
> + * Bugzilla: <a href="https://bugs.freedesktop.org/show_bug.cgi?id=109451" rel="noreferrer" target="_blank">https://bugs.freedesktop.org/show_bug.cgi?id=109451</a><br>
> + */<br>
> +static bool<br>
> +test_shared_ib_restart()<br>
> +{<br>
> +   bool pass = true;<br>
> +   GLfloat verts[256 * 2];<br>
> +   memset(&verts, 0, sizeof(verts));<br>
> +   //left-bottom<br>
> +   write_vec2_value(verts, 0, 0.0f, 0.0f);<br>
> +   //right-bottom<br>
> +   write_vec2_value(verts, 1, piglit_width, 0.0f);<br>
> +   //left-top<br>
> +   write_vec2_value(verts, 2, 0.0f, piglit_height);<br>
> +   //right-top<br>
> +   write_vec2_value(verts, 255, piglit_width, piglit_height);<br>
> +<br>
> +   const GLubyte indices[] = { 0, 1, 2, 255, 0 };<br>
> +   const GLfloat expected[3] = { 0.0f, 1.0f, 0.0f };<br>
> +   GLuint vbo1, vbo2;<br>
> +<br>
> +   piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);<br>
> +<br>
> +   glClear(GL_COLOR_BUFFER_BIT);<br>
> +<br>
> +   glColor4fv(green);<br>
> +<br>
> +   glGenBuffers(1, &vbo1);<br>
> +   glBindBuffer(GL_ARRAY_BUFFER, vbo1);<br>
> +   glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_DYNAMIC_DRAW);<br>
> +   glVertexPointer(2, GL_FLOAT, 0, (void *)0);<br>
> +<br>
> +   glGenBuffers(1, &vbo2);<br>
> +   glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo2);<br>
> +   glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);<br>
> +   glEnableClientState(GL_VERTEX_ARRAY);<br>
> +<br>
> +   //We should draw something with an enabled restart option to check that<br>
> +   //it could be correctly disabled<br>
> +   enable_restart(0xff);<br>
> +   glDrawElements(GL_LINE_STRIP, ARRAY_SIZE(indices), GL_UNSIGNED_BYTE, (void*)0);<br>
> +   disable_restart();<br>
> +<br>
> +   //Draw full screen rectangle<br>
> +   glDrawElements(GL_TRIANGLE_STRIP, ARRAY_SIZE(indices) - 1, GL_UNSIGNED_BYTE, (void*)0);<br>
> +<br>
> +   glDisableClientState(GL_VERTEX_ARRAY);<br>
> +   glBindBuffer(GL_ARRAY_BUFFER, 0);<br>
> +   glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);<br>
> +   glDeleteBuffers(1, &vbo1);<br>
> +   glDeleteBuffers(1, &vbo2);<br>
> +   glFinish();<br>
> +   pass = (piglit_probe_rect_rgb(0, 0, piglit_width, piglit_height, expected) != 0) && pass;<br>
> +   piglit_present_results();<br>
> +   return pass;<br>
> +}<br>
> +<br>
>   <br>
>   static void<br>
>   enable_restart(GLuint restart_index)<br>
> @@ -503,6 +574,7 @@ primitive_restart_test(VBO_CFG vbo_cfg)<br>
>   <br>
>      if (Have_NV) {<br>
>         TestGL31 = false;<br>
> +      pass = test_shared_ib_restart() && pass;<br>
>         pass = test_begin_end(GL_TRIANGLE_STRIP) && pass;<br>
>         pass = test_begin_end(GL_LINE_STRIP) && pass;<br>
>         pass = test_draw_elements(vbo_cfg, GL_TRIANGLE_STRIP, GL_UNSIGNED_BYTE) && pass;<br>
> @@ -521,6 +593,7 @@ primitive_restart_test(VBO_CFG vbo_cfg)<br>
>   <br>
>      if (Have_31) {<br>
>         TestGL31 = true;<br>
> +      pass = test_shared_ib_restart() && pass;<br>
>         pass = test_draw_elements(vbo_cfg, GL_TRIANGLE_STRIP, GL_UNSIGNED_BYTE) && pass;<br>
>         pass = test_draw_elements(vbo_cfg, GL_TRIANGLE_STRIP, GL_UNSIGNED_SHORT) && pass;<br>
>         pass = test_draw_elements(vbo_cfg, GL_TRIANGLE_STRIP, GL_UNSIGNED_INT) && pass;<br>
<br>
<br>
</blockquote></div>