[Piglit] [PATCH 2/2] Make shader_runner add a #version directive to shaders lacking one.

Stuart Abercrombie sabercrombie at chromium.org
Mon Sep 10 17:55:04 PDT 2012


The version number is taken from the GLSL version requirement, if there is one.

This is part of the effort to make version handling more flexible for GLES.
---
 tests/shaders/shader_runner.c |   41 ++++++++++++++++++++++++++++++++++-------
 1 files changed, 34 insertions(+), 7 deletions(-)

diff --git a/tests/shaders/shader_runner.c b/tests/shaders/shader_runner.c
index 6e3a470..88b36f8 100644
--- a/tests/shaders/shader_runner.c
+++ b/tests/shaders/shader_runner.c
@@ -48,6 +48,7 @@ extern float piglit_tolerance[4];
 
 static float gl_version = 0.0;
 static float glsl_version = 0.0;
+static float glsl_req_version = 0.0;
 static int gl_max_fragment_uniform_components;
 static int gl_max_vertex_uniform_components;
 
@@ -121,9 +122,29 @@ compile_glsl(GLenum target, bool release_text)
 		break;
 	}
 
-	piglit_ShaderSource(shader, 1,
-			    &shader_string,
-			    &shader_string_size);
+	if (glsl_req_version != 0.0f &&
+	    !string_match("#version ", shader_string)) {
+		char *shader_strings[2];
+		char version_string[100];
+		GLint shader_string_sizes[2];
+		
+		/* Add a #version directive based on the GLSL requirement. */
+		sprintf(version_string, "#version %ld\n",
+			lround(100.0f * glsl_req_version));
+		shader_strings[0] = version_string;
+		shader_string_sizes[0] = strlen(version_string);
+		shader_strings[1] = shader_string;
+		shader_string_sizes[1] = shader_string_size;
+		
+		piglit_ShaderSource(shader, 2,
+				    shader_strings,
+				    shader_string_sizes);
+
+	} else {
+		piglit_ShaderSource(shader, 1,
+				    &shader_string,
+				    &shader_string_size);
+	}
 
 	piglit_CompileShader(shader);
 
@@ -416,18 +437,24 @@ process_requirement(const char *line)
 		piglit_require_not_extension(buffer);
 	} else if (string_match("GLSL", line)) {
 		enum comparison cmp;
-		float version;
 
 		line = eat_whitespace(line + 4);
 
 		line = process_comparison(line, &cmp);
 
-		version = strtod(line, NULL);
-		if (!compare(version, glsl_version, cmp)) {
+		/* We only allow >= because we potentially use the
+		 * version number to insert a #version directive. */
+		if (cmp != greater_equal) {
+			printf("Unsupported GLSL version comparison\n");
+			piglit_report_result(PIGLIT_FAIL);
+		}
+
+		glsl_req_version = strtod(line, NULL);
+		if (!compare(glsl_req_version, glsl_version, cmp)) {
 			printf("Test requires GLSL version %s %.1f.  "
 			       "Actual version is %.1f.\n",
 			       comparison_string(cmp),
-			       version,
+			       glsl_req_version,
 			       glsl_version);
 			piglit_report_result(PIGLIT_SKIP);
 		}
-- 
1.7.7.3



More information about the Piglit mailing list