<div dir="ltr"><div>For the series:</div><div><br></div><div>Reviewed-by: Marek Olšák <<a href="mailto:marek.olsak@amd.com">marek.olsak@amd.com</a>></div><div><br></div><div>Marek<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, May 27, 2018 at 11:22 PM, Timothy Arceri <span dir="ltr"><<a href="mailto:tarceri@itsqueeze.com" target="_blank">tarceri@itsqueeze.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">---<br>
tests/spec/gl-2.0/vertex-<wbr>program-two-side.c | 157 ++++++++++++++++++--<br>
1 file changed, 147 insertions(+), 10 deletions(-)<br>
<br>
diff --git a/tests/spec/gl-2.0/vertex-<wbr>program-two-side.c b/tests/spec/gl-2.0/vertex-<wbr>program-two-side.c<br>
index c53668124..a659e521b 100644<br>
--- a/tests/spec/gl-2.0/vertex-<wbr>program-two-side.c<br>
+++ b/tests/spec/gl-2.0/vertex-<wbr>program-two-side.c<br>
@@ -66,9 +66,18 @@ static float secondary_frontcolor[4] = {0.0, 0.25, 0.0, 0.0};<br>
static float secondary_backcolor[4] = {0.0, 0.0, 0.25, 0.0};<br>
static int draw_secondary_loc;<br>
<br>
+char *dummy_outputs[4] = {"", "", "", ""};<br>
char *vs_outputs[4] = {"", "", "", ""};<br>
char *gs_outputs[4] = {"", "", "", ""};<br>
char *gs_inputs_outputs[4] = {"", "", "", ""};<br>
+char *tcs_outputs[4] = {"", "", "", ""};<br>
+char *tcs_inputs_outputs[4] = {"", "", "", ""};<br>
+char *tes_outputs[4] = {"", "", "", ""};<br>
+char *tes_inputs_outputs[4] = {"", "", "", ""};<br>
+<br>
+const char * tests[7] = {"vs and fs", "gs-out and fs", "vs, gs and fs",<br>
+ "tes-out and fs", "tcs-out, tes and fs",<br>
+ "vs, tcs, tes and fs", NULL };<br>
<br>
static const char *dummy_vs_source =<br>
"void main()\n"<br>
@@ -130,7 +139,7 @@ probe_colors()<br>
}<br>
<br>
static bool<br>
-test_prog(unsigned prog, const char *test_name)<br>
+test_prog(unsigned prog, const char *test_name, bool use_patches)<br>
{<br>
glUseProgram(prog);<br>
draw_secondary_loc = glGetUniformLocation(prog, "draw_secondary");<br>
@@ -144,12 +153,12 @@ test_prog(unsigned prog, const char *test_name)<br>
glClear(GL_COLOR_BUFFER_BIT);<br>
<br>
glUniform1i(draw_secondary_<wbr>loc, false);<br>
- piglit_draw_rect(-1, 0, 1, 1); /* top left */<br>
- piglit_draw_rect( 1, 0, -1, 1); /* top right */<br>
+ piglit_draw_rect_custom(-1, 0, 1, 1, use_patches, 1); /* top left */<br>
+ piglit_draw_rect_custom( 1, 0, -1, 1, use_patches, 1); /* top right */<br>
<br>
glUniform1i(draw_secondary_<wbr>loc, true);<br>
- piglit_draw_rect(-1, -1, 1, 1); /* bot left */<br>
- piglit_draw_rect( 1, -1, -1, 1); /* bot right */<br>
+ piglit_draw_rect_custom(-1, -1, 1, 1, use_patches, 1); /* bot left */<br>
+ piglit_draw_rect_custom( 1, -1, -1, 1, use_patches, 1); /* bot right */<br>
<br>
/* probe and report result */<br>
bool pass = probe_colors();<br>
@@ -183,6 +192,30 @@ setup_gs_vars(char **in_out, char **out, const char *name, float *values)<br>
values[3]);<br>
}<br>
<br>
+static void<br>
+setup_tcs_vars(char **in_out, char **out, const char *name, float *values)<br>
+{<br>
+ (void)!asprintf(in_out, " gl_out[gl_InvocationID].%s = gl_in[gl_InvocationID].%s;\n", name, name);<br>
+ (void)!asprintf(out, " gl_out[gl_InvocationID].%s = vec4(%f, %f, %f, %f);\n",<br>
+ name,<br>
+ values[0],<br>
+ values[1],<br>
+ values[2],<br>
+ values[3]);<br>
+}<br>
+<br>
+static void<br>
+setup_tes_vars(char **in_out, char **out, const char *name, float *values)<br>
+{<br>
+ (void)!asprintf(in_out, " INTERP_QUAD(gl_in[0].%s, %s);\n", name, name);<br>
+ (void)!asprintf(out, " INTERP_QUAD(vec4(%f, %f, %f, %f), %s);\n",<br>
+ values[0],<br>
+ values[1],<br>
+ values[2],<br>
+ values[3],<br>
+ name);<br>
+}<br>
+<br>
static void<br>
create_gs_source(char **gs_source, char **builtins)<br>
{<br>
@@ -205,12 +238,58 @@ create_gs_source(char **gs_source, char **builtins)<br>
builtins[3]);<br>
}<br>
<br>
+static void<br>
+create_tess_source(char **tcs_source, char **tcs_builtins,<br>
+ char **tes_source, char **tes_builtins)<br>
+{<br>
+ (void)!asprintf(tcs_source,<br>
+ "#version 150 compatibility\n"<br>
+ "#extension GL_ARB_tessellation_shader: require\n"<br>
+ "layout(vertices = 4) out;\n"<br>
+ "\n"<br>
+ "void main()\n"<br>
+ "{\n"<br>
+ " gl_out[gl_InvocationID].gl_<wbr>Position = gl_in[gl_InvocationID].gl_<wbr>Position;\n"<br>
+ " gl_TessLevelOuter = float[4](1.0, 1.0, 1.0, 1.0);\n"<br>
+ " gl_TessLevelInner = float[2](1.0, 1.0);\n"<br>
+ " %s%s%s%s\n"<br>
+ "}\n",<br>
+ tcs_builtins[0],<br>
+ tcs_builtins[1],<br>
+ tcs_builtins[2],<br>
+ tcs_builtins[3]);<br>
+<br>
+ (void)!asprintf(tes_source,<br>
+ "#version 150 compatibility\n"<br>
+ "#extension GL_ARB_tessellation_shader: require\n"<br>
+ "layout(quads) in;\n"<br>
+ "\n"<br>
+ "#define INTERP_QUAD(INi, OUT) do { \\\n"<br>
+ " vec4 v[4]; \\\n"<br>
+ " for (int i = 0; i < 4; i++) v[i] = INi; \\\n"<br>
+ " OUT = mix(mix(v[0], v[1], gl_TessCoord[0]), mix(v[2], v[3], \\\n"<br>
+ " gl_TessCoord[0]), gl_TessCoord[1]); \\\n"<br>
+ "} while(false);\n"<br>
+ "\n"<br>
+ "void main()\n"<br>
+ "{\n"<br>
+ " INTERP_QUAD(gl_in[i].gl_<wbr>Position, gl_Position);\n"<br>
+ " %s%s%s%s\n"<br>
+ "}\n",<br>
+ tes_builtins[0],<br>
+ tes_builtins[1],<br>
+ tes_builtins[2],<br>
+ tes_builtins[3]);<br>
+}<br>
+<br>
enum piglit_result<br>
piglit_display(void)<br>
{<br>
char *vs_source;<br>
char *gs_source;<br>
char *gs_source2;<br>
+ char *tcs_source;<br>
+ char *tes_source;<br>
bool pass;<br>
<br>
(void)!asprintf(&vs_source,<br>
@@ -225,7 +304,7 @@ piglit_display(void)<br>
vs_outputs[3]);<br>
<br>
prog = piglit_build_simple_program(<wbr>vs_source, fs_source);<br>
- pass = test_prog(prog, "vs and fs");<br>
+ pass = test_prog(prog, tests[0], false);<br>
<br>
if (piglit_get_gl_version() >= 32) {<br>
/* Test the gs outputs only */<br>
@@ -236,7 +315,7 @@ piglit_display(void)<br>
GL_FRAGMENT_SHADER, fs_source,<br>
0);<br>
<br>
- pass = pass && test_prog(prog, "gs-out and fs");<br>
+ pass = pass && test_prog(prog, tests[1], false);<br>
<br>
/* Test both the gs outputs and inputs */<br>
create_gs_source(&gs_source2, gs_inputs_outputs);<br>
@@ -246,10 +325,58 @@ piglit_display(void)<br>
GL_FRAGMENT_SHADER, fs_source,<br>
0);<br>
<br>
- pass = pass && test_prog(prog, "vs, gs and fs");<br>
+ pass = pass && test_prog(prog, tests[2], false);<br>
+<br>
+ if (piglit_is_extension_<wbr>supported("GL_ARB_<wbr>tessellation_shader")) {<br>
+ /* Test tes outputs only */<br>
+ create_tess_source(&tcs_<wbr>source, dummy_outputs,<br>
+ &tes_source, tes_outputs);<br>
+ prog = piglit_build_simple_program_<wbr>multiple_shaders(<br>
+ GL_VERTEX_SHADER, dummy_vs_source,<br>
+ GL_TESS_CONTROL_SHADER, tcs_source,<br>
+ GL_TESS_EVALUATION_SHADER, tes_source,<br>
+ GL_FRAGMENT_SHADER, fs_source,<br>
+ 0);<br>
+ pass = pass && test_prog(prog, tests[3], true);<br>
+ free(tcs_source);<br>
+ free(tes_source);<br>
+<br>
+ /* Test tcs outputs and tes inputs/outputs */<br>
+ create_tess_source(&tcs_<wbr>source, tcs_outputs,<br>
+ &tes_source, tes_inputs_outputs);<br>
+ prog = piglit_build_simple_program_<wbr>multiple_shaders(<br>
+ GL_VERTEX_SHADER, dummy_vs_source,<br>
+ GL_TESS_CONTROL_SHADER, tcs_source,<br>
+ GL_TESS_EVALUATION_SHADER, tes_source,<br>
+ GL_FRAGMENT_SHADER, fs_source,<br>
+ 0);<br>
+ pass = pass && test_prog(prog, tests[4], true);<br>
+ free(tcs_source);<br>
+ free(tes_source);<br>
+<br>
+ /* Test tcs inputs/outputs and tes inputs/outputs */<br>
+ create_tess_source(&tcs_<wbr>source, tcs_inputs_outputs,<br>
+ &tes_source, tes_inputs_outputs);<br>
+ prog = piglit_build_simple_program_<wbr>multiple_shaders(<br>
+ GL_VERTEX_SHADER, vs_source,<br>
+ GL_TESS_CONTROL_SHADER, tcs_source,<br>
+ GL_TESS_EVALUATION_SHADER, tes_source,<br>
+ GL_FRAGMENT_SHADER, fs_source,<br>
+ 0);<br>
+ pass = pass && test_prog(prog, tests[5], true);<br>
+ free(tcs_source);<br>
+ free(tes_source);<br>
+ } else {<br>
+ piglit_report_subtest_result(<wbr>PIGLIT_SKIP, tests[3]);<br>
+ piglit_report_subtest_result(<wbr>PIGLIT_SKIP, tests[4]);<br>
+ piglit_report_subtest_result(<wbr>PIGLIT_SKIP, tests[5]);<br>
+ }<br>
} else {<br>
- piglit_report_subtest_result(<wbr>PIGLIT_SKIP, "gs-out and fs");<br>
- piglit_report_subtest_result(<wbr>PIGLIT_SKIP, "vs, gs and fs");<br>
+ piglit_report_subtest_result(<wbr>PIGLIT_SKIP, tests[1]);<br>
+ piglit_report_subtest_result(<wbr>PIGLIT_SKIP, tests[2]);<br>
+ piglit_report_subtest_result(<wbr>PIGLIT_SKIP, tests[3]);<br>
+ piglit_report_subtest_result(<wbr>PIGLIT_SKIP, tests[4]);<br>
+ piglit_report_subtest_result(<wbr>PIGLIT_SKIP, tests[5]);<br>
}<br>
<br>
return pass ? PIGLIT_PASS : PIGLIT_FAIL;<br>
@@ -284,20 +411,30 @@ piglit_init(int argc, char **argv)<br>
}<br>
}<br>
<br>
+ piglit_register_subtests(<wbr>tests);<br>
+<br>
if (front) {<br>
setup_vs_output(&vs_outputs[0]<wbr>, "gl_FrontColor", frontcolor);<br>
setup_gs_vars(&gs_inputs_<wbr>outputs[0], &gs_outputs[0], "gl_FrontColor", frontcolor);<br>
+ setup_tcs_vars(&tcs_inputs_<wbr>outputs[0], &tcs_outputs[0], "gl_FrontColor", frontcolor);<br>
+ setup_tes_vars(&tes_inputs_<wbr>outputs[0], &tes_outputs[0], "gl_FrontColor", frontcolor);<br>
}<br>
if (back) {<br>
setup_vs_output(&vs_outputs[1]<wbr>, "gl_BackColor", backcolor);<br>
setup_gs_vars(&gs_inputs_<wbr>outputs[1], &gs_outputs[1], "gl_BackColor", backcolor);<br>
+ setup_tcs_vars(&tcs_inputs_<wbr>outputs[1], &tcs_outputs[1], "gl_BackColor", backcolor);<br>
+ setup_tes_vars(&tes_inputs_<wbr>outputs[1], &tes_outputs[1], "gl_BackColor", backcolor);<br>
}<br>
if (front2) {<br>
setup_vs_output(&vs_outputs[2]<wbr>, "gl_FrontSecondaryColor", secondary_frontcolor);<br>
setup_gs_vars(&gs_inputs_<wbr>outputs[2], &gs_outputs[2], "gl_FrontSecondaryColor", secondary_frontcolor);<br>
+ setup_tcs_vars(&tcs_inputs_<wbr>outputs[2], &tcs_outputs[2], "gl_FrontSecondaryColor", secondary_frontcolor);<br>
+ setup_tes_vars(&tes_inputs_<wbr>outputs[2], &tes_outputs[2], "gl_FrontSecondaryColor", secondary_frontcolor);<br>
}<br>
if (back2) {<br>
setup_vs_output(&vs_outputs[3]<wbr>, "gl_BackSecondaryColor", secondary_backcolor);<br>
setup_gs_vars(&gs_inputs_<wbr>outputs[3], &gs_outputs[3], "gl_BackSecondaryColor", secondary_backcolor);<br>
+ setup_tcs_vars(&tcs_inputs_<wbr>outputs[3], &tcs_outputs[3], "gl_BackSecondaryColor", secondary_backcolor);<br>
+ setup_tes_vars(&tes_inputs_<wbr>outputs[3], &tes_outputs[3], "gl_BackSecondaryColor", secondary_backcolor);<br>
}<br>
}<br>
<span class="HOEnZb"><font color="#888888">-- <br>
2.17.0<br>
<br>
______________________________<wbr>_________________<br>
Piglit mailing list<br>
<a href="mailto:Piglit@lists.freedesktop.org">Piglit@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/piglit" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/piglit</a><br>
</font></span></blockquote></div><br></div>