Nevermind. It does test those if I add some parameters. Marek
On Tue, May 22, 2018 at 11:18 PM, Marek Olšák <mar...@gmail.com> wrote: > Hi Timothy, > > This doesn't test any gl_*Color builtins. ST_DEBUG=tgsi doesn't show a > shader using COLOR where it's not a FS output. > > Marek > > On Mon, May 21, 2018 at 4:32 AM, Timothy Arceri <tarc...@itsqueeze.com> > wrote: > >> This updates the existing vertex shader test and makes it more >> flexable. >> --- >> tests/spec/gl-2.0/vertex-program-two-side.c | 195 +++++++++++++++----- >> 1 file changed, 145 insertions(+), 50 deletions(-) >> >> diff --git a/tests/spec/gl-2.0/vertex-program-two-side.c >> b/tests/spec/gl-2.0/vertex-program-two-side.c >> index 81cf11d9d..c53668124 100644 >> --- a/tests/spec/gl-2.0/vertex-program-two-side.c >> +++ b/tests/spec/gl-2.0/vertex-program-two-side.c >> @@ -66,6 +66,16 @@ static float secondary_frontcolor[4] = {0.0, 0.25, >> 0.0, 0.0}; >> static float secondary_backcolor[4] = {0.0, 0.0, 0.25, 0.0}; >> static int draw_secondary_loc; >> >> +char *vs_outputs[4] = {"", "", "", ""}; >> +char *gs_outputs[4] = {"", "", "", ""}; >> +char *gs_inputs_outputs[4] = {"", "", "", ""}; >> + >> +static const char *dummy_vs_source = >> + "void main()\n" >> + "{\n" >> + " gl_Position = gl_Vertex;\n" >> + "}\n"; >> + >> static const char *fs_source = >> "uniform bool draw_secondary;\n" >> "void main()\n" >> @@ -76,24 +86,13 @@ static const char *fs_source = >> " gl_FragColor = gl_Color;\n" >> "}\n"; >> >> -enum piglit_result >> -piglit_display(void) >> +static bool >> +probe_colors() >> { >> + bool pass = true; >> int x1 = 0, y1 = 0; >> int w = piglit_width / 2, h = piglit_height / 2; >> int x2 = piglit_width - w, y2 = piglit_height - h; >> - bool pass = true; >> - >> - glClearColor(0.5, 0.5, 0.5, 0.5); >> - glClear(GL_COLOR_BUFFER_BIT); >> - >> - glUniform1i(draw_secondary_loc, false); >> - piglit_draw_rect(-1, 0, 1, 1); /* top left */ >> - piglit_draw_rect( 1, 0, -1, 1); /* top right */ >> - >> - glUniform1i(draw_secondary_loc, true); >> - piglit_draw_rect(-1, -1, 1, 1); /* bot left */ >> - piglit_draw_rect( 1, -1, -1, 1); /* bot right */ >> >> if (front) { >> pass = pass && piglit_probe_rect_rgba(x1, y2, w, h, >> @@ -127,13 +126,41 @@ piglit_display(void) >> } >> } >> >> - piglit_present_results(); >> + return pass; >> +} >> >> - return pass ? PIGLIT_PASS : PIGLIT_FAIL; >> +static bool >> +test_prog(unsigned prog, const char *test_name) >> +{ >> + glUseProgram(prog); >> + draw_secondary_loc = glGetUniformLocation(prog, "draw_secondary"); >> + assert(draw_secondary_loc != -1); >> + >> + if (enabled) >> + glEnable(GL_VERTEX_PROGRAM_TWO_SIDE); >> + >> + /* Draw */ >> + glClearColor(0.5, 0.5, 0.5, 0.5); >> + glClear(GL_COLOR_BUFFER_BIT); >> + >> + glUniform1i(draw_secondary_loc, false); >> + piglit_draw_rect(-1, 0, 1, 1); /* top left */ >> + piglit_draw_rect( 1, 0, -1, 1); /* top right */ >> + >> + glUniform1i(draw_secondary_loc, true); >> + piglit_draw_rect(-1, -1, 1, 1); /* bot left */ >> + piglit_draw_rect( 1, -1, -1, 1); /* bot right */ >> + >> + /* probe and report result */ >> + bool pass = probe_colors(); >> + piglit_report_subtest_result(pass ? PIGLIT_PASS : PIGLIT_FAIL, >> "%s", >> + test_name); >> + >> + return pass; >> } >> >> static void >> -setup_output(char **out, const char *name, float *values) >> +setup_vs_output(char **out, const char *name, float *values) >> { >> (void)!asprintf(out, >> " %s = vec4(%f, %f, %f, %f);\n", >> @@ -144,15 +171,94 @@ setup_output(char **out, const char *name, float >> *values) >> values[3]); >> } >> >> -void >> -piglit_init(int argc, char **argv) >> +static void >> +setup_gs_vars(char **in_out, char **out, const char *name, float *values) >> +{ >> + (void)!asprintf(in_out, " %s = gl_in[i].%s;\n", name, name); >> + (void)!asprintf(out, " %s = vec4(%f, %f, %f, %f);\n", >> + name, >> + values[0], >> + values[1], >> + values[2], >> + values[3]); >> +} >> + >> +static void >> +create_gs_source(char **gs_source, char **builtins) >> +{ >> + (void)!asprintf(gs_source, >> + "#version 150 compatibility\n" >> + "layout(triangles) in;\n" >> + "layout(triangle_strip, max_vertices = 3) out;\n" >> + "\n" >> + "void main()\n" >> + "{\n" >> + " for (int i = 0; i < 3; i++) {\n" >> + " gl_Position = gl_in[i].gl_Position;\n" >> + " %s%s%s%s\n" >> + " EmitVertex();\n" >> + " }\n" >> + "}\n", >> + builtins[0], >> + builtins[1], >> + builtins[2], >> + builtins[3]); >> +} >> + >> +enum piglit_result >> +piglit_display(void) >> { >> - char *vs_outputs[4] = {"", "", "", ""}; >> char *vs_source; >> - int i; >> + char *gs_source; >> + char *gs_source2; >> + bool pass; >> >> - piglit_require_GLSL(); >> + (void)!asprintf(&vs_source, >> + "void main()\n" >> + "{\n" >> + " gl_Position = gl_Vertex;\n" >> + "%s%s%s%s" >> + "}\n", >> + vs_outputs[0], >> + vs_outputs[1], >> + vs_outputs[2], >> + vs_outputs[3]); >> + >> + prog = piglit_build_simple_program(vs_source, fs_source); >> + pass = test_prog(prog, "vs and fs"); >> + >> + if (piglit_get_gl_version() >= 32) { >> + /* Test the gs outputs only */ >> + create_gs_source(&gs_source, gs_outputs); >> + prog = piglit_build_simple_program_multiple_shaders( >> + GL_VERTEX_SHADER, dummy_vs_source, >> + GL_GEOMETRY_SHADER, gs_source, >> + GL_FRAGMENT_SHADER, fs_source, >> + 0); >> + >> + pass = pass && test_prog(prog, "gs-out and fs"); >> + >> + /* Test both the gs outputs and inputs */ >> + create_gs_source(&gs_source2, gs_inputs_outputs); >> + prog = piglit_build_simple_program_multiple_shaders( >> + GL_VERTEX_SHADER, vs_source, >> + GL_GEOMETRY_SHADER, gs_source2, >> + GL_FRAGMENT_SHADER, fs_source, >> + 0); >> + >> + pass = pass && test_prog(prog, "vs, gs and fs"); >> + } else { >> + piglit_report_subtest_result(PIGLIT_SKIP, "gs-out and >> fs"); >> + piglit_report_subtest_result(PIGLIT_SKIP, "vs, gs and >> fs"); >> + } >> >> + return pass ? PIGLIT_PASS : PIGLIT_FAIL; >> +} >> + >> +void >> +piglit_init(int argc, char **argv) >> +{ >> + piglit_require_GLSL(); >> piglit_require_gl_version(20); >> >> printf("Window quadrants show:\n"); >> @@ -162,7 +268,7 @@ piglit_init(int argc, char **argv) >> printf("| front gl_SecondaryColor | back gl_SecondaryColor |\n"); >> printf("+-------------------------+------------------------+\n"); >> >> - for (i = 1; i < argc; i++) { >> + for (unsigned i = 1; i < argc; i++) { >> if (strcmp(argv[i], "enabled") == 0) { >> enabled = true; >> } else if (strcmp(argv[i], "front") == 0) { >> @@ -178,31 +284,20 @@ piglit_init(int argc, char **argv) >> } >> } >> >> - if (front) >> - setup_output(&vs_outputs[0], "gl_FrontColor", frontcolor); >> - if (back) >> - setup_output(&vs_outputs[1], "gl_BackColor", backcolor); >> - if (front2) >> - setup_output(&vs_outputs[2], "gl_FrontSecondaryColor", >> secondary_frontcolor); >> - if (back2) >> - setup_output(&vs_outputs[3], "gl_BackSecondaryColor", >> secondary_backcolor); >> - >> - (void)!asprintf(&vs_source, >> - "void main()\n" >> - "{\n" >> - " gl_Position = gl_Vertex;\n" >> - "%s%s%s%s" >> - "}\n", >> - vs_outputs[0], >> - vs_outputs[1], >> - vs_outputs[2], >> - vs_outputs[3]); >> - >> - prog = piglit_build_simple_program(vs_source, fs_source); >> - glUseProgram(prog); >> - draw_secondary_loc = glGetUniformLocation(prog, "draw_secondary"); >> - assert(draw_secondary_loc != -1); >> - >> - if (enabled) >> - glEnable(GL_VERTEX_PROGRAM_TWO_SIDE); >> + if (front) { >> + setup_vs_output(&vs_outputs[0], "gl_FrontColor", >> frontcolor); >> + setup_gs_vars(&gs_inputs_outputs[0], &gs_outputs[0], >> "gl_FrontColor", frontcolor); >> + } >> + if (back) { >> + setup_vs_output(&vs_outputs[1], "gl_BackColor", >> backcolor); >> + setup_gs_vars(&gs_inputs_outputs[1], &gs_outputs[1], >> "gl_BackColor", backcolor); >> + } >> + if (front2) { >> + setup_vs_output(&vs_outputs[2], >> "gl_FrontSecondaryColor", secondary_frontcolor); >> + setup_gs_vars(&gs_inputs_outputs[2], &gs_outputs[2], >> "gl_FrontSecondaryColor", secondary_frontcolor); >> + } >> + if (back2) { >> + setup_vs_output(&vs_outputs[3], "gl_BackSecondaryColor", >> secondary_backcolor); >> + setup_gs_vars(&gs_inputs_outputs[3], &gs_outputs[3], >> "gl_BackSecondaryColor", secondary_backcolor); >> + } >> } >> -- >> 2.17.0 >> >> _______________________________________________ >> Piglit mailing list >> Piglit@lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/piglit >> > >
_______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/piglit