On 19 September 2011 10:49, Ian Romanick <span dir="ltr">&lt;<a href="mailto:idr@freedesktop.org">idr@freedesktop.org</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
-----BEGIN PGP SIGNED MESSAGE-----<br>
Hash: SHA1<br>
<div class="im"><br>
On 09/13/2011 02:54 PM, Paul Berry wrote:<br>
&gt; The clipping tests previously in Piglit only tested the first 6<br>
&gt; clipping planes, since prior to GLSL 1.30, a conforming<br>
&gt; implementation was allowed to only support 6 clipping planes.<br>
&gt; However, in GLSL 1.30, the minimum value of gl_MaxClipDistances and<br>
&gt; gl_MaxClipPlanes was increased to 8.<br>
&gt;<br>
&gt; This patch adds tests to verify that if the implementation reports<br>
&gt; a GLSL version of at least 1.30, gl_MaxClipDistances and<br>
&gt; gl_MaxClipPlanes are both at least 8.  It also modifies<br>
&gt; vs-clip-distance-all-planes-enabled.shader_test to exercise all 8<br>
&gt; clipping planes.<br>
&gt;<br>
&gt; The previous implementation of<br>
&gt; vs-clip-distance-all-planes-enabled.shader_test used to also<br>
&gt; verify, as a side effect, that gl_ClipDistance could be implicitly<br>
&gt; sized.  The new version does not (it requires gl_ClipDistance to be<br>
&gt; explicitly sized, since it indexes into it using a loop variable).<br>
&gt; So I&#39;ve added a new test,<br>
&gt; vs-clip-distance-implicitly-sized.shader_test, to verify this.<br>
&gt;<br>
&gt; Tested using the nVidia proprietary Linux driver.<br>
<br>
</div>I made some comments about max-clip-distances.shader_test (which also<br>
apply to max-clip-planes.shader_test) below.<br>
<br>
The changes to shader_runner and the other tests look fine.  You can<br>
consider them<br>
<br>
Reviewed-by: Ian Romanick &lt;<a href="mailto:ian.d.romanick@intel.com">ian.d.romanick@intel.com</a>&gt;<br>
<br>
if you want to split them out and push them sooner rather than later.<br>
<br>
&gt; --- tests/shaders/shader_runner.c                      |    2 +<br>
<div><div></div><div class="h5">&gt; .../clipping/max-clip-distances.shader_test        |   54<br>
&gt; ++++++++++++++ .../execution/clipping/max-clip-planes.shader_test |<br>
&gt; 54 ++++++++++++++<br>
&gt; ...vs-clip-distance-all-planes-enabled.shader_test |   76<br>
&gt; ++++++++++----------<br>
&gt; .../vs-clip-distance-implicitly-sized.shader_test  |   67<br>
&gt; +++++++++++++++++ tests/util/glew.h<br>
&gt; |    2 + 6 files changed, 218 insertions(+), 37 deletions(-) create<br>
&gt; mode 100644<br>
&gt; tests/spec/glsl-1.30/execution/clipping/max-clip-distances.shader_test<br>
&gt;<br>
&gt;<br>
create mode 100644<br>
tests/spec/glsl-1.30/execution/clipping/max-clip-planes.shader_test<br>
&gt; create mode 100644<br>
&gt; tests/spec/glsl-1.30/execution/clipping/vs-clip-distance-implicitly-sized.shader_test<br>
&gt;<br>
&gt;  diff --git a/tests/shaders/shader_runner.c<br>
&gt; b/tests/shaders/shader_runner.c index cde5ae3..a46ea4d 100644 ---<br>
&gt; a/tests/shaders/shader_runner.c +++<br>
&gt; b/tests/shaders/shader_runner.c @@ -819,6 +819,8 @@ struct<br>
&gt; enable_table { { &quot;GL_CLIP_PLANE3&quot;, GL_CLIP_PLANE3 }, {<br>
&gt; &quot;GL_CLIP_PLANE4&quot;, GL_CLIP_PLANE4 }, { &quot;GL_CLIP_PLANE5&quot;,<br>
&gt; GL_CLIP_PLANE5 }, +   { &quot;GL_CLIP_PLANE6&quot;, GL_CLIP_PLANE6 }, + {<br>
&gt; &quot;GL_CLIP_PLANE7&quot;, GL_CLIP_PLANE7 }, { NULL, 0 } };<br>
&gt;<br>
&gt; diff --git<br>
&gt; a/tests/spec/glsl-1.30/execution/clipping/max-clip-distances.shader_test<br>
&gt; b/tests/spec/glsl-1.30/execution/clipping/max-clip-distances.shader_test<br>
&gt;<br>
&gt;<br>
new file mode 100644<br>
&gt; index 0000000..d593fbf --- /dev/null +++<br>
&gt; b/tests/spec/glsl-1.30/execution/clipping/max-clip-distances.shader_test<br>
&gt;<br>
&gt;<br>
@@ -0,0 +1,54 @@<br>
&gt; +# [description] +# Verify correct behavior of<br>
&gt; gl_MaxClipDistances. +# +# From section the GLSL 1.30 spec, section<br>
&gt; 7.4 (Built-In Constants): +# +#   &quot;The following built-in constants<br>
&gt; are provided to vertex and +#   fragment shaders. The actual values<br>
&gt; used are implementation +#   dependent, but must be at least the<br>
&gt; value shown. +# +#   ... +# +#   const int gl_MaxClipDistances =<br>
&gt; 8;&quot; +# +# This test verifies that gl_MaxClipDistances has the same<br>
&gt; value in +# both the vertex and fragment shader, and that this<br>
&gt; value is at least +# 8. + +[require] +GLSL &gt;= 1.30 + +[vertex<br>
&gt; shader] +#version 130 + +out float maxClipDistances; + +void<br>
&gt; main() +{ +   gl_Position = gl_Vertex; + +    maxClipDistances =<br>
&gt; gl_MaxClipDistances; +} + +[fragment shader] +#version 130 + +in<br>
&gt; float maxClipDistances; + +void main() +{ +   if (maxClipDistances !=<br>
&gt; gl_MaxClipDistances) {<br>
<br>
</div></div>This is valid, but probably not what we actually want.  Shouldn&#39;t we<br>
pass maxClipDistances as an int?  It means that the &#39;flat&#39;<br>
interpolation qualifier will have to be used, and that may cause the<br>
test to fail on Mesa now even though we set gl_MaxClipDistances correctly.<br></blockquote><div><br>Hmm, yeah, using ints and the &#39;flat&#39; qualifier would be a better way to do this.  You&#39;re right that this causes the tests to fail right now on Mesa.  I assume this is because passing &#39;int&#39; data between VS and FS doesn&#39;t work properly yet?<br>
 </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br>
Also, this test is really checking that gl_MaxClipDistances is set the<br>
same in the VS and FS.  I&#39;m not sure how useful that is.  It seems<br>
like we want to query GL_MAX_CLIP_DISTANCES from the API and pass that<br>
as a uniform.  Maybe that&#39;s an additional test?<br></blockquote><div><br>You&#39;re right--this would be more useful.  Ok, I&#39;ll commit the tests that got your Reviewed-by, and I&#39;ll submit a follow-up patch to test that GL_MAX_CLIP_DISTANCES matches the value of gl_MaxClipDistances in both the VS and FS.<br>
<br>Paul<br></div></div>