[Piglit] [PATCH 3/4] shader_runner: use piglit-bitset to track passing compiles
Jordan Justen
jordan.l.justen at intel.com
Mon Mar 25 10:56:47 PDT 2013
Use piglit-bitset to keep track of shader compile results.
Use this information to print all passing or failing
shaders (by number) when 'compile error' or 'compiler success'
is used.
Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
---
tests/shaders/shader_runner.c | 53 +++++++++++++++++++++++++++++------------
1 file changed, 38 insertions(+), 15 deletions(-)
diff --git a/tests/shaders/shader_runner.c b/tests/shaders/shader_runner.c
index 6d3c1a4..68e0289 100644
--- a/tests/shaders/shader_runner.c
+++ b/tests/shaders/shader_runner.c
@@ -33,6 +33,7 @@
#include <libgen.h>
#endif
+#include "piglit-bitset.h"
#include "piglit-util-gl-common.h"
#include "piglit-vbo.h"
@@ -97,9 +98,8 @@ const char *vertex_data_start = NULL;
const char *vertex_data_end = NULL;
GLuint prog;
size_t num_vbo_rows = 0;
+void *compilation_results = NULL;
int compile_count = 0;
-int first_compile_success = 0;
-int first_compile_failure = 0;
bool link_ok = false;
bool prog_in_use = false;
GLchar *saved_err_info = NULL;
@@ -268,18 +268,17 @@ compile_glsl(GLenum target, bool release_text)
glGetShaderiv(shader, GL_COMPILE_STATUS, &ok);
if (ok) {
- if (first_compile_success == 0)
- first_compile_success = compile_count;
+ piglit_bitset_append(compilation_results, true);
} else {
- if (first_compile_failure == 0) {
+ if (piglit_bitset_is_all_set(compilation_results)) {
GLint size;
- first_compile_failure = compile_count;
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &size);
saved_err_info = malloc(size);
glGetShaderInfoLog(shader, size, NULL, saved_err_info);
}
+ piglit_bitset_append(compilation_results, false);
}
if (release_text) {
@@ -753,7 +752,7 @@ link_and_use_shaders(void)
if (((num_vertex_shaders == 0)
&& (num_fragment_shaders == 0)
&& (num_geometry_shaders == 0))
- || (first_compile_failure > 0))
+ || (!piglit_bitset_is_all_set(compilation_results)))
return;
prog = glCreateProgram();
@@ -1635,10 +1634,24 @@ void
all_compilations_must_succeed(void)
{
- if (first_compile_failure > 0) {
- fprintf(stderr, "Failed to compile shader #%d:\n%s\n",
- first_compile_failure,
- saved_err_info);
+ if (!piglit_bitset_is_all_set(compilation_results)) {
+ unsigned int i;
+ bool err_shown = false;
+ for (i = 0;
+ i < piglit_bitset_size(compilation_results);
+ i++) {
+ if (!piglit_bitset_is_set(compilation_results, i)) {
+ if (!err_shown) {
+ fprintf(stderr, "Failed to compile shader #%d:\n%s\n",
+ i + 1,
+ saved_err_info);
+ err_shown = true;
+ } else {
+ fprintf(stderr, "Failed to compile shader #%d\n",
+ i + 1);
+ }
+ }
+ }
piglit_report_result(PIGLIT_FAIL);
}
}
@@ -1647,10 +1660,17 @@ void
all_compilations_must_fail(void)
{
- if (first_compile_success > 0) {
- fprintf(stderr, "Shader #%d compiled successfully, "
- "but an error was expected!\n",
- first_compile_success);
+ if (!piglit_bitset_is_all_clear(compilation_results)) {
+ unsigned int i;
+ for (i = 0;
+ i < piglit_bitset_size(compilation_results);
+ i++) {
+ if (piglit_bitset_is_set(compilation_results, i)) {
+ fprintf(stderr, "Shader #%d compiled successfully, "
+ "but an error was expected!\n",
+ i + 1);
+ }
+ }
piglit_report_result(PIGLIT_FAIL);
}
}
@@ -2007,6 +2027,9 @@ piglit_init(int argc, char **argv)
exit(1);
}
+ compilation_results = piglit_bitset_create();
+ assert(compilation_results);
+
process_test_script(argv[1]);
link_and_use_shaders();
if (vertex_data_start != NULL) {
--
1.7.10.4
More information about the Piglit
mailing list