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 <[email protected]> --- ...-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 _______________________________________________ Piglit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/piglit
