diff options
author | Jordan Justen <jordan.l.justen@intel.com> | 2013-02-15 09:25:00 -0800 |
---|---|---|
committer | Jordan Justen <jordan.l.justen@intel.com> | 2013-02-22 22:27:10 -0800 |
commit | 2bac8d3e5ee7debe73170fb22fdd140274bc75c5 (patch) | |
tree | d585123925a3e375dbaf7df2e8c8501391185d87 | |
parent | 1091bac072b4df0a8b93c9ac53f9b010b5fe0747 (diff) |
shader_runner: delay error for program link / use to piglit_display
To prepare for supporting negative linker tests.
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
-rw-r--r-- | tests/shaders/shader_runner.c | 48 |
1 files changed, 30 insertions, 18 deletions
diff --git a/tests/shaders/shader_runner.c b/tests/shaders/shader_runner.c index d1c1cda4..c2f45dce 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); } } @@ -1624,6 +1622,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 program: %s\n", prog_err_info); + piglit_report_result(PIGLIT_FAIL); + } + +} + enum piglit_result piglit_display(void) { @@ -1634,6 +1645,7 @@ piglit_display(void) if (test_start == NULL) return PIGLIT_PASS; + program_must_be_in_use(); line = test_start; while (line[0] != '\0') { |