[Piglit] [PATCH] gl-3.2-compat: test gl_*Color built-ins with geometry shaders
Marek Olšák
maraeo at gmail.com
Wed May 23 03:20:30 UTC 2018
Nevermind. It does test those if I add some parameters.
Marek
On Tue, May 22, 2018 at 11:18 PM, Marek Olšák <maraeo at 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 <tarceri at 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 at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/piglit
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/piglit/attachments/20180522/310c8560/attachment-0001.html>
More information about the Piglit
mailing list