[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