This is a suggested fix to http://lists.freedesktop.org/archives/piglit/2013-October/008024.html ([PATCH 1/4 v3] GS: Test that geometry shader input/output layout qualifiers only compile if valid).
With this fix applied, the patch is: Reviewed-by: Paul Berry <[email protected]> --- .../geometry/gs-input-layout-qualifiers.c | 48 ++++++++++------------ .../geometry/gs-output-layout-qualifiers.c | 48 ++++++++++------------ 2 files changed, 44 insertions(+), 52 deletions(-) diff --git a/tests/spec/glsl-1.50/execution/geometry/gs-input-layout-qualifiers.c b/tests/spec/glsl-1.50/execution/geometry/gs-input-layout-qualifiers.c index 0afc4e8..0b7ba41 100644 --- a/tests/spec/glsl-1.50/execution/geometry/gs-input-layout-qualifiers.c +++ b/tests/spec/glsl-1.50/execution/geometry/gs-input-layout-qualifiers.c @@ -54,8 +54,6 @@ static const char *gstemplate = "void main() {\n" "}\n"; -static GLuint prog; - char *valids[] = {"points", "lines", "lines_adjacency", @@ -82,6 +80,7 @@ piglit_init(int argc, char **argv) char* gstext = NULL; int i = 0; bool pass = true; + GLint expected_compile_result; /* Parse params */ if (argc != 2) { @@ -89,41 +88,38 @@ piglit_init(int argc, char **argv) } layout = argv[1]; - if (layout == NULL) { - printf("%s failed\n", argv[0]); - piglit_report_result(PIGLIT_FAIL); + + /* figure out if we expect compilation to be successful. */ + expected_compile_result = GL_FALSE; + for (i = 0; i < ARRAY_SIZE(valids); i++) { + if (strcmp(layout, valids[i]) == 0) { + expected_compile_result = GL_TRUE; + break; + } } - prog = glCreateProgram(); asprintf(&gstext, gstemplate, layout); gs = glCreateShader(GL_GEOMETRY_SHADER); glShaderSource(gs, 1, (const GLchar **) &gstext, NULL); glCompileShader(gs); - glAttachShader(prog, gs); free(gstext); - /* check if the current layout is valid */ - for(i = 0; i < ARRAY_SIZE(valids); i++) { - if(strcmp(layout, valids[i]) == 0) { - glGetShaderiv(gs, GL_COMPILE_STATUS, - &gsCompiled); - if(gsCompiled != GL_TRUE) { - printf("Failed to compile.\n"); - pass = false; - } - - pass = piglit_check_gl_error(GL_NO_ERROR) - && pass; - piglit_report_result(pass ? PIGLIT_PASS : - PIGLIT_FAIL); + /* check compile result */ + glGetShaderiv(gs, GL_COMPILE_STATUS, &gsCompiled); + if (gsCompiled != expected_compile_result) { + if (expected_compile_result) { + printf("Failed to compile with input qualifier " + "\"%s\".\n", layout); + } else { + printf("\"%s\" is an invalid input qualifier " + "but geometry shader still compiled.\n", + layout); } + pass = false; } - /* if the layout was not valid... */ - printf("\"%s\" is an invalid input qualifier " - "but geometry shader still compiled.\n", - layout); - piglit_report_result(PIGLIT_FAIL); + pass = piglit_check_gl_error(GL_NO_ERROR) && pass; + piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL); } enum piglit_result diff --git a/tests/spec/glsl-1.50/execution/geometry/gs-output-layout-qualifiers.c b/tests/spec/glsl-1.50/execution/geometry/gs-output-layout-qualifiers.c index 232b8f3..deb9bc3 100644 --- a/tests/spec/glsl-1.50/execution/geometry/gs-output-layout-qualifiers.c +++ b/tests/spec/glsl-1.50/execution/geometry/gs-output-layout-qualifiers.c @@ -53,8 +53,6 @@ static const char *gstemplate = "void main() {\n" "}\n"; -static GLuint prog; - char *valids[] = {"points", "line_strip", "triangle_strip"}; @@ -79,6 +77,7 @@ piglit_init(int argc, char **argv) char* gstext = NULL; int i = 0; bool pass = true; + GLint expected_compile_result; /* Parse params */ if (argc != 2) { @@ -86,41 +85,38 @@ piglit_init(int argc, char **argv) } layout = argv[1]; - if (layout == NULL) { - printf("%s failed\n", argv[0]); - piglit_report_result(PIGLIT_FAIL); + + /* figure out if we expect compilation to be successful. */ + expected_compile_result = GL_FALSE; + for (i = 0; i < ARRAY_SIZE(valids); i++) { + if (strcmp(layout, valids[i]) == 0) { + expected_compile_result = GL_TRUE; + break; + } } - prog = glCreateProgram(); asprintf(&gstext, gstemplate, layout); gs = glCreateShader(GL_GEOMETRY_SHADER); glShaderSource(gs, 1, (const GLchar **) &gstext, NULL); glCompileShader(gs); - glAttachShader(prog, gs); free(gstext); - /* check if the current layout is valid */ - for(i = 0; i < ARRAY_SIZE(valids); i++) { - if(strcmp(layout, valids[i]) == 0) { - glGetShaderiv(gs, GL_COMPILE_STATUS, - &gsCompiled); - if(gsCompiled != GL_TRUE) { - printf("Failed to compile.\n"); - pass = false; - } - - pass = piglit_check_gl_error(GL_NO_ERROR) - && pass; - piglit_report_result(pass ? PIGLIT_PASS : - PIGLIT_FAIL); + /* check compile result */ + glGetShaderiv(gs, GL_COMPILE_STATUS, &gsCompiled); + if (gsCompiled != expected_compile_result) { + if (expected_compile_result) { + printf("Failed to compile with output qualifier " + "\"%s\".\n", layout); + } else { + printf("\"%s\" is an invalid output qualifier " + "but geometry shader still compiled.\n", + layout); } + pass = false; } - /* if the layout was not valid... */ - printf("\"%s\" is an invalid output qualifier " - "but geometry shader still compiled.\n", - layout); - piglit_report_result(PIGLIT_FAIL); + pass = piglit_check_gl_error(GL_NO_ERROR) && pass; + piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL); } enum piglit_result -- 1.8.4.1 _______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
