---
 tests/shaders/shader_runner.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/tests/shaders/shader_runner.c b/tests/shaders/shader_runner.c
index ed64b4e..2b5f10c 100644
--- a/tests/shaders/shader_runner.c
+++ b/tests/shaders/shader_runner.c
@@ -1335,7 +1335,7 @@ check_double_support(void)
  * the data.  If the uniform is not in a uniform block, returns false.
  */
 bool
-set_ubo_uniform(const char *name, const char *type, const char *line)
+set_ubo_uniform(const char *name, const char *type, const char *line, int 
ubo_array_index)
 {
        GLuint uniform_index;
        GLint block_index;
@@ -1362,6 +1362,10 @@ set_ubo_uniform(const char *name, const char *type, 
const char *line)
        if (block_index == -1)
                return false;
 
+       /* if the uniform block is an array, then GetActiveUniformsiv with 
UNIFORM_BLOCK_INDEX will have given us the index of the first element in the 
array.
+        */
+       block_index += ubo_array_index;
+
        glGetActiveUniformsiv(prog, 1, &uniform_index,
                              GL_UNIFORM_OFFSET, &offset);
 
@@ -1481,7 +1485,7 @@ set_ubo_uniform(const char *name, const char *type, const 
char *line)
 }
 
 void
-set_uniform(const char *line)
+set_uniform(const char *line, int ubo_array_index)
 {
        char name[512];
        float f[16];
@@ -1499,7 +1503,7 @@ set_uniform(const char *line)
 
        line = strcpy_to_space(name, eat_whitespace(line));
 
-       if (set_ubo_uniform(name, type, line))
+       if (set_ubo_uniform(name, type, line, ubo_array_index))
                return;
 
        loc = glGetUniformLocation(prog, name);
@@ -2084,6 +2088,7 @@ piglit_display(void)
        bool pass = true;
        GLbitfield clear_bits = 0;
        bool link_error_expected = false;
+       int ubo_array_index = 0;
 
        if (test_start == NULL)
                return PIGLIT_PASS;
@@ -2417,7 +2422,7 @@ piglit_display(void)
                        handle_texparameter(line + strlen("texparameter "));
                } else if (string_match("uniform", line)) {
                        program_must_be_in_use();
-                       set_uniform(line + 7);
+                       set_uniform(line + 7, ubo_array_index);
                } else if (string_match("parameter ", line)) {
                        set_parameter(line + strlen("parameter "));
                } else if (string_match("patch parameter ", line)) {
@@ -2430,6 +2435,8 @@ piglit_display(void)
                        }
                } else if (string_match("link success", line)) {
                        program_must_be_in_use();
+               } else if (string_match("ubo array index ", line)) {
+                       get_ints(line + strlen("ubo array index "), 
&ubo_array_index, 1);
                } else if ((line[0] != '\n') && (line[0] != '\0')
                           && (line[0] != '#')) {
                        printf("unknown command \"%s\"\n", line);
-- 
2.0.1

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

Reply via email to