[Piglit] [PATCH] One additional test for arb_cull_distance + a fix
Tobias Klausmann
tobias.johannes.klausmann at mni.thm.de
Sun May 8 19:58:26 UTC 2016
New test: Make sure gl_ClipDistance and gl_CullDistance can have arrays sizes
different to 4,8 (this is makes sure the lowering pass for those arrays are
working correct).
Fix: Make sure gl_ClipDistance & gl_CullDistance are actually used and not
thrown away by optimizations.
Signed-off-by: Tobias Klausmann <tobias.johannes.klausmann at mni.thm.de>
---
...-distance-different-different-sized.shader_test | 55 ++++++++++++++++++++++
...s-cull-and-clip-distance-exceed-max.shader_test | 4 ++
2 files changed, 59 insertions(+)
create mode 100644 tests/spec/arb_cull_distance/fs-cull-and-clip-distance-different-different-sized.shader_test
diff --git a/tests/spec/arb_cull_distance/fs-cull-and-clip-distance-different-different-sized.shader_test b/tests/spec/arb_cull_distance/fs-cull-and-clip-distance-different-different-sized.shader_test
new file mode 100644
index 0000000..c723afe
--- /dev/null
+++ b/tests/spec/arb_cull_distance/fs-cull-and-clip-distance-different-different-sized.shader_test
@@ -0,0 +1,55 @@
+# From the ARB_cull_distance spec:
+#
+# The built-in output variables gl_ClipDistance and glCullDistance hold the
+# clip distance(s) and cull distance(s), respectively, used in the culling
+# stage, as described in section 13.5.
+#
+# This test checks that the arrays gl_ClipDistance and gl_CullDistance only
+# interfer by gl_MaxCombinedClipAndCullDistances and not by its entrys.
+#
+# This additionally checks if gl_ClipDistance and gl_CullDistance can have a
+# size different to 4 or 8.
+
+[require]
+GLSL >= 1.30
+GL_ARB_cull_distance
+
+[vertex shader]
+#version 130
+#extension GL_ARB_cull_distance: enable
+out float gl_ClipDistance[5];
+out float gl_CullDistance[2];
+
+void main()
+{
+ gl_Position = gl_Vertex;
+ for (int i = 1; i <= 5; ++i) {
+ gl_ClipDistance[i-1] = i;
+ }
+ for (int j = 1; j <= 2; ++j) {
+ gl_CullDistance[j-1] = j*6;
+ }
+}
+
+[fragment shader]
+#version 130
+#extension GL_ARB_cull_distance: enable
+in float gl_ClipDistance[5];
+in float gl_CullDistance[2];
+
+void main()
+{
+ gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
+ for (int i = 1; i <= 5; ++i) {
+ if (gl_ClipDistance[i-1] != i)
+ gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0);
+ }
+ for (int j = 1; j <= 2; ++j) {
+ if (gl_CullDistance[j-1] != (j*6))
+ gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
+ }
+}
+
+[test]
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
diff --git a/tests/spec/arb_cull_distance/fs-cull-and-clip-distance-exceed-max.shader_test b/tests/spec/arb_cull_distance/fs-cull-and-clip-distance-exceed-max.shader_test
index 8106092..e0a6ca0 100644
--- a/tests/spec/arb_cull_distance/fs-cull-and-clip-distance-exceed-max.shader_test
+++ b/tests/spec/arb_cull_distance/fs-cull-and-clip-distance-exceed-max.shader_test
@@ -22,6 +22,10 @@ out float gl_CullDistance[gl_MaxCombinedClipAndCullDistances];
void main()
{
gl_Position = gl_Vertex;
+ for (int i = 0; i < gl_MaxCombinedClipAndCullDistances; ++i) {
+ gl_ClipDistance[i] = i;
+ gl_CullDistance[i] = i*5;
+ }
}
[fragment shader]
--
2.8.2
More information about the Piglit
mailing list