From: Nicolai Hähnle <nicolai.haeh...@amd.com>

---
 tests/shaders/shader_runner.c | 54 +++++++++++++++++++++++++++----------------
 1 file changed, 34 insertions(+), 20 deletions(-)

diff --git a/tests/shaders/shader_runner.c b/tests/shaders/shader_runner.c
index 6ac5f98..39922d3 100644
--- a/tests/shaders/shader_runner.c
+++ b/tests/shaders/shader_runner.c
@@ -2782,20 +2782,46 @@ program_must_be_in_use(void)
 
 static void
 bind_vao_if_supported()
 {
        if (vao == 0 && gl_version.num >= 31) {
                glGenVertexArrays(1, &vao);
                glBindVertexArray(vao);
        }
 }
 
+static enum piglit_result
+draw_arrays_common(int first, size_t count)
+{
+       enum piglit_result result = program_must_be_in_use();
+       if (first < 0) {
+               printf("draw arrays 'first' must be >= 0\n");
+               piglit_report_result(PIGLIT_FAIL);
+       } else if (vbo_present &&
+                       (size_t) first >= num_vbo_rows) {
+               printf("draw arrays 'first' must be < %lu\n",
+                       (unsigned long) num_vbo_rows);
+               piglit_report_result(PIGLIT_FAIL);
+       }
+       if (count <= 0) {
+               printf("draw arrays 'count' must be > 0\n");
+               piglit_report_result(PIGLIT_FAIL);
+       } else if (vbo_present &&
+                       count > num_vbo_rows - (size_t) first) {
+               printf("draw arrays cannot draw beyond %lu\n",
+                       (unsigned long) num_vbo_rows);
+               piglit_report_result(PIGLIT_FAIL);
+       }
+       bind_vao_if_supported();
+       return result;
+}
+
 static bool
 probe_atomic_counter(unsigned buffer_num, GLint counter_num, const char *op, 
uint32_t value)
 {
         uint32_t *p;
        uint32_t observed;
        enum comparison cmp;
        bool result;
 
        REQUIRE(parse_comparison_op(op, &cmp, NULL),
                "Invalid comparison operation at: %s\n", op);
@@ -3002,44 +3028,32 @@ piglit_display(void)
                        parse_floats(rest, c, 4, NULL);
                        piglit_draw_rect(c[0], c[1], c[2], c[3]);
                } else if (parse_str(line, "draw instanced rect ", &rest)) {
                        int primcount;
 
                        result = program_must_be_in_use();
                        sscanf(rest, "%d %f %f %f %f",
                               &primcount,
                               c + 0, c + 1, c + 2, c + 3);
                        draw_instanced_rect(primcount, c[0], c[1], c[2], c[3]);
+               } else if (sscanf(line, "draw arrays instanced %31s %d %d %d", 
s, &x, &y, &z) == 4) {
+                       GLenum mode = decode_drawing_mode(s);
+                       int first = x;
+                       size_t count = (size_t) y;
+                       size_t primcount = (size_t) z;
+                       draw_arrays_common(first, count);
+                       glDrawArraysInstanced(mode, first, count, primcount);
                } else if (sscanf(line, "draw arrays %31s %d %d", s, &x, &y) == 
3) {
                        GLenum mode = decode_drawing_mode(s);
                        int first = x;
                        size_t count = (size_t) y;
-                       result = program_must_be_in_use();
-                       if (first < 0) {
-                               printf("draw arrays 'first' must be >= 0\n");
-                               piglit_report_result(PIGLIT_FAIL);
-                       } else if (vbo_present &&
-                                  (size_t) first >= num_vbo_rows) {
-                               printf("draw arrays 'first' must be < %lu\n",
-                                      (unsigned long) num_vbo_rows);
-                               piglit_report_result(PIGLIT_FAIL);
-                       }
-                       if (count <= 0) {
-                               printf("draw arrays 'count' must be > 0\n");
-                               piglit_report_result(PIGLIT_FAIL);
-                       } else if (vbo_present &&
-                                  count > num_vbo_rows - (size_t) first) {
-                               printf("draw arrays cannot draw beyond %lu\n",
-                                      (unsigned long) num_vbo_rows);
-                               piglit_report_result(PIGLIT_FAIL);
-                       }
-                       bind_vao_if_supported();
+                       result = draw_arrays_common(first, count);
                        glDrawArrays(mode, first, count);
                } else if (parse_str(line, "disable ", &rest)) {
                        do_enable_disable(rest, false);
                } else if (parse_str(line, "enable ", &rest)) {
                        do_enable_disable(rest, true);
                } else if (sscanf(line, "depthfunc %31s", s) == 1) {
                        glDepthFunc(piglit_get_gl_enum_from_name(s));
                } else if (parse_str(line, "fb ", &rest)) {
                        const GLenum target =
                                parse_str(rest, "draw ", &rest) ? 
GL_DRAW_FRAMEBUFFER :
-- 
2.9.3

_______________________________________________
Piglit mailing list
Piglit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to