From: Dave Airlie <airl...@redhat.com>

---
 .../program-interface-query.c                      | 54 +++++++++++++++-------
 1 file changed, 37 insertions(+), 17 deletions(-)

diff --git 
a/tests/spec/arb_shader_storage_buffer_object/program-interface-query.c 
b/tests/spec/arb_shader_storage_buffer_object/program-interface-query.c
index 131cd40..c21a37c 100644
--- a/tests/spec/arb_shader_storage_buffer_object/program-interface-query.c
+++ b/tests/spec/arb_shader_storage_buffer_object/program-interface-query.c
@@ -59,6 +59,15 @@ static const char vs_pass_thru_text[] =
        "       a_std140[0].s[0].b[0] = mat2(1.0, 2.0, 3.0, 4.0);\n"
         "}\n";
 
+static const char vs_no_ssbo_text[] =
+       "#version 330\n"
+       "\n"
+       "in vec4 piglit_vertex;\n"
+       "\n"
+       "void main() {\n"
+       "       gl_Position = piglit_vertex;\n"
+        "}\n";
+
 static const char fs_source[] =
        "#version 330\n"
        "#extension GL_ARB_shader_storage_buffer_object : require\n"
@@ -108,29 +117,38 @@ piglit_init(int argc, char **argv)
                                               
"GL_REFERENCED_BY_FRAGMENT_SHADER" };
        int query_std140[NUM_QUERIES] = {0};
        int query_std430[NUM_QUERIES] = {0};
+       int num_vertex_ssbo;
        const int expected_std140[NUM_QUERIES] =
                { 0, 112, GL_FLOAT_MAT2, 3, 0, 16, 32, 16, 1, 1, 0 };
-       const int expected_std430[NUM_QUERIES] =
+       int expected_std430[NUM_QUERIES] =
                { 2, 56, GL_FLOAT_MAT2, 3, 2, 16, 16, 8, 0, 0, 1 };
        int i;
+       bool has_vertex_ssbo = true;
 
        piglit_require_extension("GL_ARB_shader_storage_buffer_object");
        piglit_require_extension("GL_ARB_program_interface_query");
 
-       prog = piglit_build_simple_program(vs_pass_thru_text, fs_source);
+       glGetIntegerv(GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS, &num_vertex_ssbo);
+       if (num_vertex_ssbo == 0) {
+               has_vertex_ssbo = false;
+               /* modify GL_BLOCK_INDEX return */
+               expected_std430[4] = 0;
+       }
+       prog = piglit_build_simple_program(has_vertex_ssbo ? vs_pass_thru_text 
: vs_no_ssbo_text, fs_source);
 
        glUseProgram(prog);
 
-       /* First ssbo_std140 */
-       index = glGetProgramResourceIndex(prog,
-                                         GL_BUFFER_VARIABLE,
-                                         "ssbo_std140.s[0].b[0]");
-       glGetProgramResourceiv(prog, GL_BUFFER_VARIABLE, index,
-                               NUM_QUERIES, prop, NUM_QUERIES, NULL,
-                              query_std140);
-       if (!piglit_check_gl_error(GL_NO_ERROR))
-          pass = false;
-
+       if (has_vertex_ssbo) {
+               /* First ssbo_std140 */
+               index = glGetProgramResourceIndex(prog,
+                                                 GL_BUFFER_VARIABLE,
+                                                 "ssbo_std140.s[0].b[0]");
+               glGetProgramResourceiv(prog, GL_BUFFER_VARIABLE, index,
+                                      NUM_QUERIES, prop, NUM_QUERIES, NULL,
+                                      query_std140);
+               if (!piglit_check_gl_error(GL_NO_ERROR))
+                       pass = false;
+       }
        /* Now ssbo_std430 */
        index = glGetProgramResourceIndex(prog,
                                          GL_BUFFER_VARIABLE,
@@ -143,11 +161,13 @@ piglit_init(int argc, char **argv)
           pass = false;
 
        for (i = 0 ; i < NUM_QUERIES; i++) {
-               if (query_std140[i] != expected_std140[i]) {
-                       printf("std140 %s expected = %d. Value = %d.\n",
-                              prop_names[i], expected_std140[i],
-                              query_std140[i]);
-                       pass = false;
+               if (has_vertex_ssbo) {
+                       if (query_std140[i] != expected_std140[i]) {
+                               printf("std140 %s expected = %d. Value = %d.\n",
+                                      prop_names[i], expected_std140[i],
+                                      query_std140[i]);
+                               pass = false;
+                       }
                }
                if (query_std430[i] != expected_std430[i]) {
                        printf("std430 %s expected = %d. Value = %d.\n",
-- 
2.9.5

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

Reply via email to