[Piglit] [PATCH] Add glsl-1.50/execution/geometry/gs-conditional-emit
Nicolai Hähnle
nhaehnle at gmail.com
Thu Nov 17 22:22:55 UTC 2016
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
More information about the Piglit
mailing list