diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2015-04-29 15:26:45 -0700 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2015-05-04 17:22:03 -0700 |
commit | 01f108f865ced2b480dd122feb7b2151423f8b3d (patch) | |
tree | 72155505b428027c3a8ab2de997720ab681cc7b8 | |
parent | 0f7c6d4de98283bd1c1bac9ecd4af0f79eeb6d86 (diff) |
built-in-constants: Change GLSL version handling
Instead of a floating point number, specify the version exactly the same
way the #version string would be specified. The GLSL ES 3.00 handling
was a bit wonkey before, and adding GLSL ES 3.10 would make it even
worse.
Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
-rw-r--r-- | tests/shaders/built-in-constants.c | 68 | ||||
-rw-r--r-- | tests/spec/arb_compute_shader/minimum-maximums.txt | 2 | ||||
-rw-r--r-- | tests/spec/arb_shading_language_420pack/minimum-maximums.txt | 2 | ||||
-rw-r--r-- | tests/spec/arb_tessellation_shader/minimum-maximums.txt | 2 | ||||
-rw-r--r-- | tests/spec/glsl-1.10/minimum-maximums.txt | 2 | ||||
-rw-r--r-- | tests/spec/glsl-1.20/minimum-maximums.txt | 2 | ||||
-rw-r--r-- | tests/spec/glsl-1.30/minimum-maximums.txt | 2 | ||||
-rw-r--r-- | tests/spec/glsl-1.40/minimum-maximums.txt | 2 | ||||
-rw-r--r-- | tests/spec/glsl-1.50/minimum-maximums.txt | 2 | ||||
-rw-r--r-- | tests/spec/glsl-3.30/minimum-maximums.txt | 2 | ||||
-rw-r--r-- | tests/spec/glsl-es-1.00/minimum-maximums.txt | 2 | ||||
-rw-r--r-- | tests/spec/glsl-es-3.00/minimum-maximums.txt | 2 |
12 files changed, 61 insertions, 29 deletions
diff --git a/tests/shaders/built-in-constants.c b/tests/shaders/built-in-constants.c index 5d4bc6945..abf6fa8cc 100644 --- a/tests/shaders/built-in-constants.c +++ b/tests/shaders/built-in-constants.c @@ -37,7 +37,8 @@ struct test_vector tests[500]; unsigned num_tests = 0; int required_glsl_version = 0; -char *required_glsl_version_string = NULL; +char required_glsl_version_string[128]; +bool es_shader = false; GLenum shader_type = 0; /** @@ -185,11 +186,9 @@ parse_file(const char *filename) unsigned text_size; char *text = piglit_load_text_file(filename, &text_size); char *line = text; - int count; - int major; - int minor; char *end_of_line; ptrdiff_t len; + char *endptr; if (line == NULL) { fprintf(stderr, "could not read file \"%s\"\n", filename); @@ -198,7 +197,7 @@ parse_file(const char *filename) /* The format of the test file is: * - * major.minor + * version [es|core] * GL_VERTEX_SHADER|GL_GEOMETRY_SHADER|GL_FRAGMENT_SHADER|GL_COMPUTE_SHADER * GL_ARB_some_extension * gl_MaxFoo 8 @@ -208,13 +207,28 @@ parse_file(const char *filename) /* Process the version requirement. */ - count = sscanf(line, "%d.%d", &major, &minor); - if (count != 2) { - fprintf(stderr, "Parse error in version line.\n"); + end_of_line = strchrnul(line, '\n'); + len = end_of_line - line; + + if (len + 1 >= ARRAY_SIZE(required_glsl_version_string)) { + fprintf(stderr, "Version line too long.\n"); piglit_report_result(PIGLIT_FAIL); } - required_glsl_version = major * 100 + minor; + memcpy(required_glsl_version_string, line, len); + required_glsl_version_string[len] = '\0'; + + required_glsl_version = strtol(line, &endptr, 10); + line = (char *) eat_whitespace(endptr); + es_shader = strncmp("es\n", line, 3) == 0; + + if (required_glsl_version <= 0 || + (line != end_of_line && + strncmp("es\n", line, 3) != 0 && + strncmp("core\n", line, 5) != 0)) { + fprintf(stderr, "Parse error in version line.\n"); + piglit_report_result(PIGLIT_FAIL); + } /* Skip to the next line. */ @@ -264,8 +278,6 @@ parse_file(const char *filename) } while (line[0] != '\0') { - char *endptr; - line = (char *) eat_whitespace(line); if (string_match("gl_Max", line) != 0 @@ -392,7 +404,29 @@ piglit_init(int argc, char **argv) piglit_get_glsl_version(&is_es, &major, &minor); glsl_version = major * 100 + minor; - if (glsl_version < required_glsl_version) + + if ((es_shader || required_glsl_version == 100) && !is_es) { + switch (required_glsl_version) { + case 100: + if (!piglit_is_extension_supported("GL_ARB_ES2_compatibility")) + piglit_report_result(PIGLIT_SKIP); + break; + case 300: + if (!piglit_is_extension_supported("GL_ARB_ES3_compatibility")) + piglit_report_result(PIGLIT_SKIP); + break; + default: + printf("Unknown GLSL ES version.\n"); + piglit_report_result(PIGLIT_FAIL); + } + } else if ((!es_shader && required_glsl_version != 100) && is_es) { + /* It should actually be impossible to get here because + * supports_gl_es_version won't get set, and that is required + * in the ES builds. + */ + printf("Desktop OpenGL shaders are not valid in OpenGL ES.\n"); + piglit_report_result(PIGLIT_FAIL); + } else if (glsl_version < required_glsl_version) piglit_report_result(PIGLIT_SKIP); /* Process the list of required extensions. While doing this, @@ -434,22 +468,20 @@ piglit_init(int argc, char **argv) * shaders in the test run. */ asprintf(&version_string, - "#version %d %s\n" + "#version %s\n" "%s" "#ifdef GL_ES\n" "precision mediump float;\n" "#endif\n", - required_glsl_version, - required_glsl_version == 300 ? "es" : "", + required_glsl_version_string, extension_enables); asprintf(&passthrough_version_string, - "#version %d %s\n" + "#version %s\n" "#ifdef GL_ES\n" "precision mediump float;\n" "#endif\n", - required_glsl_version, - required_glsl_version == 300 ? "es" : ""); + required_glsl_version_string); /* Create the shaders that will be used for the real part of the test. diff --git a/tests/spec/arb_compute_shader/minimum-maximums.txt b/tests/spec/arb_compute_shader/minimum-maximums.txt index 85cac3780..01d5a46fe 100644 --- a/tests/spec/arb_compute_shader/minimum-maximums.txt +++ b/tests/spec/arb_compute_shader/minimum-maximums.txt @@ -1,4 +1,4 @@ -3.30 +330 GL_COMPUTE_SHADER GL_ARB_compute_shader gl_MaxComputeWorkGroupCount.x 65535 diff --git a/tests/spec/arb_shading_language_420pack/minimum-maximums.txt b/tests/spec/arb_shading_language_420pack/minimum-maximums.txt index 15650c0c6..082b0a013 100644 --- a/tests/spec/arb_shading_language_420pack/minimum-maximums.txt +++ b/tests/spec/arb_shading_language_420pack/minimum-maximums.txt @@ -1,4 +1,4 @@ -1.30 +130 GL_ARB_shading_language_420pack gl_MinProgramTexelOffset -8 gl_MaxProgramTexelOffset 7 diff --git a/tests/spec/arb_tessellation_shader/minimum-maximums.txt b/tests/spec/arb_tessellation_shader/minimum-maximums.txt index 6e92a4d11..e537ceb60 100644 --- a/tests/spec/arb_tessellation_shader/minimum-maximums.txt +++ b/tests/spec/arb_tessellation_shader/minimum-maximums.txt @@ -1,4 +1,4 @@ -3.30 +330 GL_TESS_CONTROL_SHADER GL_ARB_tessellation_shader gl_MaxTessControlInputComponents 128 diff --git a/tests/spec/glsl-1.10/minimum-maximums.txt b/tests/spec/glsl-1.10/minimum-maximums.txt index f0db76dd1..ac9799fde 100644 --- a/tests/spec/glsl-1.10/minimum-maximums.txt +++ b/tests/spec/glsl-1.10/minimum-maximums.txt @@ -1,4 +1,4 @@ -1.10 +110 gl_MaxClipPlanes 6 gl_MaxCombinedTextureImageUnits 2 gl_MaxDrawBuffers 1 diff --git a/tests/spec/glsl-1.20/minimum-maximums.txt b/tests/spec/glsl-1.20/minimum-maximums.txt index f65ca642b..0badcd9ec 100644 --- a/tests/spec/glsl-1.20/minimum-maximums.txt +++ b/tests/spec/glsl-1.20/minimum-maximums.txt @@ -1,4 +1,4 @@ -1.20 +120 gl_MaxClipPlanes 6 gl_MaxCombinedTextureImageUnits 2 gl_MaxDrawBuffers 1 diff --git a/tests/spec/glsl-1.30/minimum-maximums.txt b/tests/spec/glsl-1.30/minimum-maximums.txt index 9eb97e75c..2ea77eaba 100644 --- a/tests/spec/glsl-1.30/minimum-maximums.txt +++ b/tests/spec/glsl-1.30/minimum-maximums.txt @@ -1,4 +1,4 @@ -1.30 +130 gl_MaxClipDistances 8 gl_MaxClipPlanes 8 gl_MaxCombinedTextureImageUnits 16 diff --git a/tests/spec/glsl-1.40/minimum-maximums.txt b/tests/spec/glsl-1.40/minimum-maximums.txt index a2e8370b6..7e78b26ee 100644 --- a/tests/spec/glsl-1.40/minimum-maximums.txt +++ b/tests/spec/glsl-1.40/minimum-maximums.txt @@ -1,4 +1,4 @@ -1.40 +140 gl_MaxClipDistances 8 gl_MaxCombinedTextureImageUnits 16 gl_MaxDrawBuffers 8 diff --git a/tests/spec/glsl-1.50/minimum-maximums.txt b/tests/spec/glsl-1.50/minimum-maximums.txt index a8bb936bb..d6e96616e 100644 --- a/tests/spec/glsl-1.50/minimum-maximums.txt +++ b/tests/spec/glsl-1.50/minimum-maximums.txt @@ -1,4 +1,4 @@ -1.50 +150 gl_MaxVertexAttribs 16 gl_MaxVertexUniformComponents 1024 gl_MaxVaryingFloats 60 diff --git a/tests/spec/glsl-3.30/minimum-maximums.txt b/tests/spec/glsl-3.30/minimum-maximums.txt index 4923442f4..a1ee368bc 100644 --- a/tests/spec/glsl-3.30/minimum-maximums.txt +++ b/tests/spec/glsl-3.30/minimum-maximums.txt @@ -1,4 +1,4 @@ -3.30 +330 gl_MaxVertexAttribs 16 gl_MaxVertexUniformComponents 1024 gl_MaxVaryingFloats 60 diff --git a/tests/spec/glsl-es-1.00/minimum-maximums.txt b/tests/spec/glsl-es-1.00/minimum-maximums.txt index 939db0d66..cff892627 100644 --- a/tests/spec/glsl-es-1.00/minimum-maximums.txt +++ b/tests/spec/glsl-es-1.00/minimum-maximums.txt @@ -1,4 +1,4 @@ -1.00 +100 gl_MaxCombinedTextureImageUnits 8 gl_MaxDrawBuffers 1 gl_MaxFragmentUniformVectors 16 diff --git a/tests/spec/glsl-es-3.00/minimum-maximums.txt b/tests/spec/glsl-es-3.00/minimum-maximums.txt index da97b272e..46de39ce6 100644 --- a/tests/spec/glsl-es-3.00/minimum-maximums.txt +++ b/tests/spec/glsl-es-3.00/minimum-maximums.txt @@ -1,4 +1,4 @@ -3.00 +300 es gl_MaxVertexAttribs 16 gl_MaxVertexUniformVectors 256 gl_MaxVertexOutputVectors 16 |