<div class="gmail_quote">On 9 November 2011 17:38, Eric Anholt <span dir="ltr">&lt;<a href="mailto:eric@anholt.net">eric@anholt.net</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">On Tue,  8 Nov 2011 16:03:39 -0800, Paul Berry &lt;<a href="mailto:stereotype441@gmail.com">stereotype441@gmail.com</a>&gt; wrote:<br>
&gt; According to the OpenGL 3.0 spec (section 2.15: Transform Feedback):<br>
&gt;<br>
&gt;     &quot;When quads and polygons are provided to transform feedback with a<br>
&gt;     primitive mode of TRIANGLES, they will be tessellated and recorded<br>
&gt;     as triangles (the order of tessellation within a primitive is<br>
&gt;     undefined). Individual lines or triangles of a strip or fan<br>
&gt;     primitive will be extracted and recorded separately.&quot;<br>
&gt;<br>
&gt; This test verifies the correctness of the tessellation and extraction<br>
&gt; from strips and fans.  It does so by feeding the output of transform<br>
&gt; feedback back into the GL pipeline and verifying that the rendered<br>
&gt; image is the same.<br>
&gt;<br>
&gt; Verified using the nVidia proprietary driver for Linux.  The nVidia<br>
&gt; driver passes all tests except &quot;tessellation polygon flat_last&quot;,<br>
&gt; &quot;tessellation quad_strip flat_last&quot;, and &quot;tessellation quads<br>
&gt; flat_last&quot;.  These tests fail because the order in which the driver<br>
&gt; tessellates polygons and quads fails to preserve the correct provoking<br>
&gt; vertex, leading to different results from flatshading.<br>
<br>
</div>Ensuring that provoking vertex is respected seems like a reasonable<br>
requirement, and at least our hardware is built to support it it looks<br>
like.<br>
<br>
I like the test idea, and have just a few little style comments.  I find<br>
the vertex transformations a bit unintuitive compared to most of our<br>
tests, but I&#39;m not really worried.<br>
<div class="im"><br>
&gt; +#include &quot;piglit-util.h&quot;<br>
&gt; +<br>
&gt; +#ifndef M_PI<br>
&gt; +#define M_PI 3.141592653589793<br>
&gt; +#endif<br>
<br>
</div>M_PI?<br>
<div class="im"><br></div></blockquote><div><br></div><div>I&#39;m afraid I don&#39;t understand the question.  Can you elaborate?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">
&gt; +#define BUFFER_SIZE 20<br>
&gt; +<br>
&gt; +#define Elements(array) (sizeof(array)/sizeof(array[0]))<br>
<br>
</div>There&#39;s ARRAY_SIZE available so you don&#39;t have to redefine this.<br></blockquote><div><br></div><div>Ah, ok.  Thanks.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div class="im"><br>
&gt; +/**<br>
&gt; + * Check that two strips of the window match.  Strips are numbered<br>
&gt; + * from the top from 0 to 3.<br>
&gt; + */<br>
&gt; +static GLboolean<br>
&gt; +match_strips(int reference, int compare)<br>
&gt; +{<br>
&gt; +     int reference_offset = (3 - reference) * (piglit_height / 4);<br>
&gt; +     int compare_offset = (3 - compare) * (piglit_height / 4);<br>
&gt; +     int x, y;<br>
&gt; +     for (x = 0; x &lt; piglit_width; ++x) {<br>
&gt; +             for (y = 0; y &lt; piglit_height/4; ++y) {<br>
&gt; +                     float probed[4];<br>
&gt; +                     glReadPixels(x, y + reference_offset, 1, 1,<br>
&gt; +                                  GL_RGBA, GL_FLOAT, &amp;probed);<br>
&gt; +                     if (!piglit_probe_pixel_rgba(x, y + compare_offset,<br>
&gt; +                                                  probed))<br>
&gt; +                             return GL_FALSE;<br>
&gt; +             }<br>
&gt; +     }<br>
&gt; +     return GL_TRUE;<br>
&gt; +}<br>
<br>
</div>It would be nice if you could use piglit_probe_rect_halves_equal_rgba()<br>
or a derivative here.  glReadPixels()ing each pixel one by one sucks for<br>
performance.<br>
<div class="im"><br></div></blockquote><div><br></div><div>Yeah, that makes sense.  I&#39;ll rework the test to use a single glReadPixels() call to read the reference image, and then piglit_probe_image_rgba() to check the other two images.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">
&gt; +                     printf(&quot;Test requires GL_EXT_provoking_vertex &quot;<br>
&gt; +                            &quot;or GL_ARB_provoking_vertex\n&quot;);<br>
&gt; +                     piglit_report_result(PIGLIT_SKIP);<br>
&gt; +                     exit(1);<br>
<br>
</div>piglit_report_result() implies exit()<br>
</blockquote></div><br><div>Ok, thanks.</div>