[Piglit] [PATCH] Add glsl-1.50/execution/geometry/gs-conditional-emit

Marek Olšák maraeo at gmail.com
Thu Nov 24 20:52:32 UTC 2016


Reviewed-by: Marek Olšák <marek.olsak at amd.com>

Marek

On Thu, Nov 17, 2016 at 11:22 PM, Nicolai Hähnle <nhaehnle at gmail.com> wrote:
> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>
> This test exposes a subtle bug in st_glsl_to_tgsi. I found this bug while
> investigating the referenced bug report.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98664
> ---
>  .../geometry/gs-conditional-emit.shader_test       | 82 ++++++++++++++++++++++
>  1 file changed, 82 insertions(+)
>  create mode 100644 tests/spec/glsl-1.50/execution/geometry/gs-conditional-emit.shader_test
>
> diff --git a/tests/spec/glsl-1.50/execution/geometry/gs-conditional-emit.shader_test b/tests/spec/glsl-1.50/execution/geometry/gs-conditional-emit.shader_test
> new file mode 100644
> index 0000000..8e71f30
> --- /dev/null
> +++ b/tests/spec/glsl-1.50/execution/geometry/gs-conditional-emit.shader_test
> @@ -0,0 +1,82 @@
> +# The contents of out variables is undefined after EmitVertex(), but this
> +# should only apply when the EmitVertex() is actually executed.
> +#
> +# This test triggered a bug in st_glsl_to_tgsi, where the contents of
> +# gs_fs_color were not preserved for the first emit in the else-block.
> +
> +[require]
> +GL >= 3.2
> +GLSL >= 1.50
> +
> +[vertex shader passthrough]
> +
> +[geometry shader]
> +
> +layout(points) in;
> +layout(triangle_strip, max_vertices = 4) out;
> +
> +flat out vec4 gs_fs_color;
> +
> +uniform int choice;
> +uniform vec4 u_color;
> +
> +void emit(float x, float y)
> +{
> +       gl_Position.x = x;
> +       gl_Position.y = y * gs_fs_color.y;
> +       gl_Position.z = 0.0;
> +       gl_Position.w = 1.0;
> +       EmitVertex();
> +}
> +
> +void main()
> +{
> +       gs_fs_color = 2 * u_color;
> +
> +       if (choice >= 2) {
> +               emit(-1, -1);
> +               gs_fs_color = vec4(0, 1, 0, 1);
> +               emit(-1, 1);
> +               gs_fs_color = vec4(0, 1, 0, 1);
> +               emit(1, -1);
> +               gs_fs_color = vec4(0, 1, 0, 1);
> +               emit(1, 1);
> +               EndPrimitive();
> +       } else {
> +               emit(-1, -1);
> +               gs_fs_color = vec4(0, 1, 0, 1);
> +               emit(-1, 1);
> +               gs_fs_color = vec4(0, 1, 0, 1);
> +               emit(1, -1);
> +               gs_fs_color = vec4(0, 1, 0, 1);
> +               emit(1, 1);
> +               EndPrimitive();
> +       }
> +}
> +
> +[fragment shader]
> +
> +flat in vec4 gs_fs_color;
> +out vec4 color;
> +
> +void main()
> +{
> +       color = gs_fs_color;
> +}
> +
> +[test]
> +clear color 1.0 0.0 0.0 0.0
> +clear
> +
> +uniform vec4 u_color 0.0 0.5 0.0 0.5
> +
> +uniform int choice 4
> +draw arrays GL_POINTS 0 1
> +probe all rgba 0.0 1.0 0.0 1.0
> +
> +clear color 1.0 0.0 0.0 0.0
> +clear
> +
> +uniform int choice 1
> +draw arrays GL_POINTS 0 1
> +probe all rgba 0.0 1.0 0.0 1.0
> --
> 2.7.4
>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/piglit


More information about the Piglit mailing list