<div dir="ltr"><div dir="ltr">ping<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Feb 1, 2019 at 11:27 AM <<a href="mailto:asimiklit.work@gmail.com">asimiklit.work@gmail.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">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 possible solution was suggested.<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>
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 | 72 +++++++++++++++++++++++++++++++<br>
 1 file changed, 72 insertions(+)<br>
<br>
diff --git a/tests/general/primitive-restart.c b/tests/general/primitive-restart.c<br>
index 4219a6c5b..aef9bed41 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,71 @@ 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>
+ */<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 +573,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 +592,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>
2.17.1<br>
<br>
</blockquote></div></div>