From: Marek Olšák <[email protected]>

this was broken in radeonsi
---
 tests/general/draw-elements.c | 34 +++++++++++++++++++++++++++++++---
 1 file changed, 31 insertions(+), 3 deletions(-)

diff --git a/tests/general/draw-elements.c b/tests/general/draw-elements.c
index 29436cf..d20e85a 100644
--- a/tests/general/draw-elements.c
+++ b/tests/general/draw-elements.c
@@ -55,22 +55,24 @@ void piglit_init(int argc, char **argv)
        }
 
        piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
 
        piglit_require_gl_version(15);
 
        glShadeModel(GL_FLAT);
        glClearColor(0.2, 0.2, 0.2, 1.0);
 }
 
-static void test_ubyte_indices(float x1, float y1, float x2, float y2, int 
index)
+static void test_ubyte_indices(float x1, float y1, float x2, float y2, int 
test)
 {
+       bool use_multi = test / 4;
+       int index = test % 4;
        float v[] = {
                x1, y1,
                x1, y2,
                x2, y1,
 
                x1, y1,
                x1, y2,
                x2, y1,
 
                x1, y1,
@@ -93,25 +95,46 @@ static void test_ubyte_indices(float x1, float y1, float 
x2, float y2, int index
                11, 11, 11, 11
        };
        GLuint buf;
 
        glVertexPointer(2, GL_FLOAT, 0, v);
 
        if (!user) {
                glGenBuffers(1, &buf);
                glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buf);
                glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indx), indx, 
GL_STATIC_DRAW);
-               glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_BYTE, 
(void*)(intptr_t)(index*9));
+               if (use_multi) {
+                       GLsizei count[] = {3, 3};
+                       /* We need 2 draws in order to get non-zero in
+                        * pipe_draw_info::start, so make the second draw
+                        * a zero-area triangle. */
+                       const void *offset[] = {(void*)(intptr_t)(index*9),
+                                               (void*)(intptr_t)1};
+                       glMultiDrawElements(GL_TRIANGLES, count,
+                                           GL_UNSIGNED_BYTE, offset, 2);
+               } else {
+                       glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_BYTE,
+                                      (void*)(intptr_t)(index*9));
+               }
                glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
                glDeleteBuffers(1, &buf);
        } else {
-               glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_BYTE, indx + 
index*9);
+               if (use_multi) {
+                       GLsizei count[] = {3, 3};
+                       /* The second draw is a zero-area triangle. */
+                       const void *indices[] = {indx + index*9, indx + 1};
+                       glMultiDrawElements(GL_TRIANGLES, count,
+                                           GL_UNSIGNED_BYTE, indices, 2);
+               } else {
+                       glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_BYTE,
+                                      indx + index*9);
+               }
        }
 }
 
 static void test_ushort_indices(float x1, float y1, float x2, float y2, int 
index)
 {
        float v[] = {
                x1, y1,
                x1, y2,
                x2, y1,
 
@@ -208,20 +231,25 @@ struct test {
        int flag;
        const char *name;
 };
 
 struct test tests[] = {
        {test_ubyte_indices, 0, {1, 1, 1}, BOTH, "Ubyte indices - offset: 0"},
        {test_ubyte_indices, 1, {1, 1, 1}, BOTH, "Ubyte indices - offset: 1"},
        {test_ubyte_indices, 2, {1, 1, 1}, BOTH, "Ubyte indices - offset: 2"},
        {test_ubyte_indices, 3, {1, 1, 1}, BOTH, "Ubyte indices - offset: 3"},
 
+       {test_ubyte_indices, 4, {1, 1, 1}, BOTH, "Ubyte indices - offset: 0 
(glMultiDraw)"},
+       {test_ubyte_indices, 5, {1, 1, 1}, BOTH, "Ubyte indices - offset: 1 
(glMultiDraw)"},
+       {test_ubyte_indices, 6, {1, 1, 1}, BOTH, "Ubyte indices - offset: 2 
(glMultiDraw)"},
+       {test_ubyte_indices, 7, {1, 1, 1}, BOTH, "Ubyte indices - offset: 3 
(glMultiDraw)"},
+
        {test_ushort_indices, 0, {1, 1, 1}, BOTH, "Ushort indices - offset: 0"},
        {test_ushort_indices, 1, {1, 1, 1}, BOTH, "Ushort indices - offset: 2"},
 
        {test_large_index_count, 1, {1, 1, 1}, USER, "Large index count"},
        {test_large_indexbuf_offset, 0, {1, 1, 1}, VBO, "Large index offset"},
 
        {0}
 };
 
 enum piglit_result
-- 
2.7.4

_______________________________________________
Piglit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to