SPIRV YES/ONLY assumes that the test includes the SPIR-V shader, and
that you should use it. This commit checks that this really happens,
and prints a proper error message.

Without this commit, a SPIRV YES/ONLY test that by mistake didn't
include the [spirv xx] sections would be just skipped with the
following non-intuitive message:

   "Function "glDeleteProgramsARB" not supported on this implementation"
---
 tests/shaders/shader_runner.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/tests/shaders/shader_runner.c b/tests/shaders/shader_runner.c
index e5566ee7d..b19ac2f6d 100644
--- a/tests/shaders/shader_runner.c
+++ b/tests/shaders/shader_runner.c
@@ -1622,6 +1622,7 @@ process_test_script(const char *script_name)
        enum states state = none;
        const char *line = text;
        enum piglit_result result;
+       bool test_really_contains_spirv = false;
 
        if (line == NULL) {
                printf("could not read file \"%s\"\n", script_name);
@@ -1651,6 +1652,7 @@ process_test_script(const char *script_name)
                                shader_string_size = strlen(shader_string);
                        } else if (parse_str(line, "[vertex shader spirv]", 
NULL)) {
                                state = vertex_shader_spirv;
+                                test_really_contains_spirv = true;
                                shader_string = NULL;
                        } else if (parse_str(line, "[vertex shader 
specializations]", NULL)) {
                                state = vertex_shader_specializations;
@@ -1659,6 +1661,7 @@ process_test_script(const char *script_name)
                                shader_string = NULL;
                        } else if (parse_str(line, "[tessellation control 
shader spirv]", NULL)) {
                                state = tess_ctrl_shader_spirv;
+                                test_really_contains_spirv = true;
                                shader_string = NULL;
                        } else if (parse_str(line, "[tessellation control 
shader specializations]", NULL)) {
                                state = tess_ctrl_shader_specializations;
@@ -1667,6 +1670,7 @@ process_test_script(const char *script_name)
                                shader_string = NULL;
                        } else if (parse_str(line, "[tessellation evaluation 
shader spirv]", NULL)) {
                                state = tess_eval_shader_spirv;
+                                test_really_contains_spirv = true;
                                shader_string = NULL;
                        } else if (parse_str(line, "[tessellation evaluation 
shader specializations]", NULL)) {
                                state = tess_eval_shader_specializations;
@@ -1677,6 +1681,7 @@ process_test_script(const char *script_name)
                                state = geometry_shader_specializations;
                        } else if (parse_str(line, "[geometry shader spirv]", 
NULL)) {
                                state = geometry_shader_spirv;
+                                test_really_contains_spirv = true;
                                shader_string = NULL;
                        } else if (parse_str(line, "[geometry shader 
specializations]", NULL)) {
                                state = geometry_shader_specializations;
@@ -1693,6 +1698,7 @@ process_test_script(const char *script_name)
                                state = fragment_shader_specializations;
                        } else if (parse_str(line, "[fragment shader spirv]", 
NULL)) {
                                state = fragment_shader_spirv;
+                                test_really_contains_spirv = true;
                                shader_string = NULL;
                        } else if (parse_str(line, "[fragment shader 
specializations]", NULL)) {
                                state = fragment_shader_specializations;
@@ -1701,6 +1707,7 @@ process_test_script(const char *script_name)
                                shader_string = NULL;
                        } else if (parse_str(line, "[compute shader spirv]", 
NULL)) {
                                state = compute_shader_spirv;
+                                test_really_contains_spirv = true;
                                shader_string = NULL;
                        } else if (parse_str(line, "[compute shader 
specializations]", NULL)) {
                                state = compute_shader_specializations;
@@ -1712,6 +1719,15 @@ process_test_script(const char *script_name)
                                test_start_line_num = line_num + 1;
                                if (test_start[0] != '\0')
                                        test_start++;
+
+                               if (!test_really_contains_spirv &&
+                                       spirv_replaces_glsl) {
+                                       fprintf(stderr, "SPIRV YES/ONLY test, 
but"
+                                               " spirv section was not 
found.\n");
+
+                                       return PIGLIT_FAIL;
+                               }
+
                                return PIGLIT_PASS;
                        } else {
                                fprintf(stderr,
@@ -1783,6 +1799,14 @@ process_test_script(const char *script_name)
                line_num++;
        }
 
+       if (!test_really_contains_spirv &&
+           spirv_replaces_glsl) {
+               fprintf(stderr, "SPIRV YES/ONLY test, but"
+                       " spirv section was not found.\n");
+
+               return PIGLIT_FAIL;
+        }
+
        return leave_state(state, line, script_name);
 }
 
-- 
2.14.1

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

Reply via email to