Reviewed-by: Marek Olšák <[email protected]> Marek
On Thu, Nov 17, 2016 at 11:22 PM, Nicolai Hähnle <[email protected]> wrote: > From: Nicolai Hähnle <[email protected]> > > 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 > [email protected] > https://lists.freedesktop.org/mailman/listinfo/piglit _______________________________________________ Piglit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/piglit
