[Piglit] [PATCH 1/8] shader_runner: delay error for program link / use to piglit_display

Jordan Justen jordan.l.justen at intel.com
Sun Feb 17 10:31:20 PST 2013


To prepare for supporting negative linker tests.

Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
---
 tests/shaders/shader_runner.c |   48 +++++++++++++++++++++++++----------------
 1 file changed, 30 insertions(+), 18 deletions(-)

diff --git a/tests/shaders/shader_runner.c b/tests/shaders/shader_runner.c
index eae5063..2293b9e 100644
--- a/tests/shaders/shader_runner.c
+++ b/tests/shaders/shader_runner.c
@@ -97,6 +97,9 @@ const char *vertex_data_start = NULL;
 const char *vertex_data_end = NULL;
 GLuint prog;
 size_t num_vbo_rows = 0;
+bool link_ok = false;
+bool prog_in_use = false;
+GLchar *prog_err_info = NULL;
 
 enum states {
 	none = 0,
@@ -319,6 +322,8 @@ compile_and_bind_program(GLenum target, const char *start, int len)
 
 	glEnable(target);
 	glBindProgramARB(target, prog);
+	link_ok = true;
+	prog_in_use = true;
 }
 
 /**
@@ -789,38 +794,31 @@ link_and_use_shaders(void)
 	}
 
 	glGetProgramiv(prog, GL_LINK_STATUS, &ok);
-	if (!ok) {
-		GLchar *info;
+	if (ok) {
+		link_ok = true;
+	} else {
 		GLint size;
 
 		glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &size);
-		info = malloc(size);
-
-		glGetProgramInfoLog(prog, size, NULL, info);
+		prog_err_info = malloc(size);
 
-		fprintf(stderr, "Failed to link:\n%s\n",
-			info);
+		glGetProgramInfoLog(prog, size, NULL, prog_err_info);
 
-		free(info);
-		piglit_report_result(PIGLIT_FAIL);
+		return;
 	}
 
 	glUseProgram(prog);
 
 	err = glGetError();
-	if (err) {
-		GLchar *info;
+	if (!err) {
+		prog_in_use = true;
+	} else {
 		GLint size;
 
-		printf("GL error after linking program: 0x%04x\n", err);
-
 		glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &size);
-		info = malloc(size);
-
-		glGetProgramInfoLog(prog, size, NULL, info);
-		fprintf(stderr, "Info log: %s\n", info);
+		prog_err_info = malloc(size);
 
-		piglit_report_result(PIGLIT_FAIL);
+		glGetProgramInfoLog(prog, size, NULL, prog_err_info);
 	}
 }
 
@@ -1638,6 +1636,19 @@ setup_ubos()
 	}
 }
 
+void
+program_must_be_in_use(void)
+{
+	if (!link_ok) {
+		fprintf(stderr, "Failed to link:\n%s\n", prog_err_info);
+		piglit_report_result(PIGLIT_FAIL);
+	} else if (!prog_in_use) {
+		fprintf(stderr, "Failed to use shader: %s\n", prog_err_info);
+		piglit_report_result(PIGLIT_FAIL);
+	}
+
+}
+
 enum piglit_result
 piglit_display(void)
 {
@@ -1648,6 +1659,7 @@ piglit_display(void)
 	if (test_start == NULL)
 		return PIGLIT_PASS;
 
+	program_must_be_in_use();
 
 	line = test_start;
 	while (line[0] != '\0') {
-- 
1.7.10.4



More information about the Piglit mailing list