On 13 January 2012 16:18, Paul Berry <span dir="ltr">&lt;<a href="mailto:stereotype441@gmail.com">stereotype441@gmail.com</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">
I had previously been holding off on this because of concurrency bugs<br>
in the Mesa i965 implementation of transform feedback, but those bugs<br>
have long since been fixed.<br>
<br>
Verified on both the Mesa i965 (Sandy Bridge) and the nVidia<br>
proprietary Linux driver.<br>
---<br>
 tests/all.tests                                  |  100 +++++++++++-----------<br>
 tests/spec/ext_transform_feedback/interleaved.c  |    2 +-<br>
 tests/spec/ext_transform_feedback/max-varyings.c |    2 +-<br>
 tests/spec/ext_transform_feedback/output-type.c  |    2 +-<br>
 tests/spec/ext_transform_feedback/position.c     |    2 +-<br>
 tests/spec/ext_transform_feedback/separate.c     |    2 +-<br>
 6 files changed, 55 insertions(+), 55 deletions(-)<br>
<br>
diff --git a/tests/all.tests b/tests/all.tests<br>
index 2e5c7a3..5712783 100644<br>
--- a/tests/all.tests<br>
+++ b/tests/all.tests<br>
@@ -1419,8 +1419,8 @@ for mode in [&#39;interleaved_ok_base&#39;, &#39;interleaved_ok_range&#39;,<br>
              &#39;bind_offset_offset_2&#39;, &#39;bind_offset_offset_3&#39;,<br>
              &#39;bind_offset_offset_5&#39;, &#39;not_a_program&#39;]:<br>
         test_name = &#39;api-errors {0}&#39;.format(mode)<br>
-        ext_transform_feedback[test_name] = PlainExecTest(<br>
-                &#39;ext_transform_feedback-{0} -auto&#39;.format(test_name))<br>
+        ext_transform_feedback[test_name] = concurrent_test(<br>
+                &#39;ext_transform_feedback-{0}&#39;.format(test_name))<br>
 for varying in [&#39;gl_Color&#39;, &#39;gl_SecondaryColor&#39;, &#39;gl_TexCoord&#39;,<br>
                 &#39;gl_FogFragCoord&#39;, &#39;gl_Position&#39;, &#39;gl_PointSize&#39;,<br>
                 &#39;gl_ClipVertex&#39;, &#39;gl_ClipDistance&#39;,<br>
@@ -1433,8 +1433,8 @@ for varying in [&#39;gl_Color&#39;, &#39;gl_SecondaryColor&#39;, &#39;gl_TexCoord&#39;,<br>
                 &#39;gl_ClipDistance[7]-no-subscript&#39;,<br>
                 &#39;gl_ClipDistance[8]-no-subscript&#39;]:<br>
         test_name = &#39;builtin-varyings {0}&#39;.format(varying)<br>
-        ext_transform_feedback[test_name] = PlainExecTest(<br>
-                &#39;ext_transform_feedback-{0} -auto&#39;.format(test_name))<br>
+        ext_transform_feedback[test_name] = concurrent_test(<br>
+                &#39;ext_transform_feedback-{0}&#39;.format(test_name))<br>
 ext_transform_feedback[&#39;discard-api&#39;] = concurrent_test(&#39;ext_transform_feedback-discard-api&#39;)<br>
 ext_transform_feedback[&#39;discard-bitmap&#39;] = concurrent_test(&#39;ext_transform_feedback-discard-bitmap&#39;)<br>
 ext_transform_feedback[&#39;discard-clear&#39;] = concurrent_test(&#39;ext_transform_feedback-discard-clear&#39;)<br>
@@ -1443,50 +1443,50 @@ ext_transform_feedback[&#39;discard-drawarrays&#39;] = concurrent_test(&#39;ext_transform_fe<br>
 ext_transform_feedback[&#39;discard-drawpixels&#39;] = concurrent_test(&#39;ext_transform_feedback-discard-drawpixels&#39;)<br>
 for mode in [&#39;main_binding&#39;, &#39;indexed_binding&#39;, &#39;buffer_start&#39;, &#39;buffer_size&#39;]:<br>
         test_name = &#39;get-buffer-state {0}&#39;.format(mode)<br>
-        ext_transform_feedback[test_name] = PlainExecTest(<br>
-                &#39;ext_transform_feedback-{0} -auto&#39;.format(test_name))<br>
+        ext_transform_feedback[test_name] = concurrent_test(<br>
+                &#39;ext_transform_feedback-{0}&#39;.format(test_name))<br>
 ext_transform_feedback[&#39;immediate-reuse&#39;] = concurrent_test(&#39;ext_transform_feedback-immediate-reuse&#39;)<br>
 for mode in [&#39;output&#39;, &#39;prims_generated&#39;, &#39;prims_written&#39;]:<br>
         test_name = &#39;intervening-read {0}&#39;.format(mode)<br>
-        ext_transform_feedback[test_name] = PlainExecTest(<br>
-                &#39;ext_transform_feedback-{0} -auto&#39;.format(test_name))<br>
-ext_transform_feedback[&#39;max-varyings&#39;] = PlainExecTest([&#39;ext_transform_feedback-max-varyings&#39;, &#39;-auto&#39;])<br>
-ext_transform_feedback[&#39;overflow-edge-cases&#39;] = PlainExecTest([&#39;ext_transform_feedback-overflow-edge-cases&#39;, &#39;-auto&#39;])<br>
-ext_transform_feedback[&#39;position-readback-bufferbase&#39;] =               PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;])<br>
-ext_transform_feedback[&#39;position-readback-bufferbase-discard&#39;] =       PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;discard&#39;])<br>
-ext_transform_feedback[&#39;position-readback-bufferoffset&#39;] =             PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;offset&#39;])<br>
-ext_transform_feedback[&#39;position-readback-bufferoffset-discard&#39;] =     PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;offset&#39;, &#39;discard&#39;])<br>
-ext_transform_feedback[&#39;position-readback-bufferrange&#39;] =              PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;range&#39;])<br>
-ext_transform_feedback[&#39;position-readback-bufferrange-discard&#39;] =      PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;range&#39;, &#39;discard&#39;])<br>
-<br>
-ext_transform_feedback[&#39;position-render-bufferbase&#39;] =                         PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;render&#39;])<br>
-ext_transform_feedback[&#39;position-render-bufferbase-discard&#39;] =                 PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;render&#39;, &#39;discard&#39;])<br>
-ext_transform_feedback[&#39;position-render-bufferoffset&#39;] =               PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;render&#39;, &#39;offset&#39;])<br>
-ext_transform_feedback[&#39;position-render-bufferoffset-discard&#39;] =       PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;render&#39;, &#39;offset&#39;, &#39;discard&#39;])<br>
-ext_transform_feedback[&#39;position-render-bufferrange&#39;] =                PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;render&#39;, &#39;range&#39;])<br>
-ext_transform_feedback[&#39;position-render-bufferrange-discard&#39;] =        PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;render&#39;, &#39;range&#39;, &#39;discard&#39;])<br>
-<br>
-ext_transform_feedback[&#39;query-primitives_generated-bufferbase&#39;] =              PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;primgen&#39;])<br>
-ext_transform_feedback[&#39;query-primitives_generated-bufferbase-discard&#39;] =      PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;primgen&#39;, &#39;discard&#39;])<br>
-ext_transform_feedback[&#39;query-primitives_generated-bufferoffset&#39;] =            PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;primgen&#39;, &#39;offset&#39;])<br>
-ext_transform_feedback[&#39;query-primitives_generated-bufferoffset-discard&#39;] =    PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;primgen&#39;, &#39;offset&#39;, &#39;discard&#39;])<br>

-ext_transform_feedback[&#39;query-primitives_generated-bufferrange&#39;] =             PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;primgen&#39;, &#39;range&#39;])<br>
-ext_transform_feedback[&#39;query-primitives_generated-bufferrange-discard&#39;] =     PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;primgen&#39;, &#39;range&#39;, &#39;discard&#39;])<br>

-<br>
-ext_transform_feedback[&#39;query-primitives_written-bufferbase&#39;] =                PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;primwritten&#39;])<br>
-ext_transform_feedback[&#39;query-primitives_written-bufferbase-discard&#39;] =        PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;primwritten&#39;, &#39;discard&#39;])<br>
-ext_transform_feedback[&#39;query-primitives_written-bufferoffset&#39;] =              PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;primwritten&#39;, &#39;offset&#39;])<br>
-ext_transform_feedback[&#39;query-primitives_written-bufferoffset-discard&#39;] =      PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;primwritten&#39;, &#39;offset&#39;, &#39;discard&#39;])<br>

-ext_transform_feedback[&#39;query-primitives_written-bufferrange&#39;] =               PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;primwritten&#39;, &#39;range&#39;])<br>
-ext_transform_feedback[&#39;query-primitives_written-bufferrange-discard&#39;] =       PlainExecTest([&#39;ext_transform_feedback-position&#39;, &#39;-auto&#39;, &#39;primwritten&#39;, &#39;range&#39;, &#39;discard&#39;])<br>

-<br>
-ext_transform_feedback[&#39;interleaved-attribs&#39;] = PlainExecTest([&#39;ext_transform_feedback-interleaved&#39;, &#39;-auto&#39;])<br>
-ext_transform_feedback[&#39;separate-attribs&#39;] = PlainExecTest([&#39;ext_transform_feedback-separate&#39;, &#39;-auto&#39;])<br>
+        ext_transform_feedback[test_name] = concurrent_test(<br>
+                &#39;ext_transform_feedback-{0}&#39;.format(test_name))<br>
+ext_transform_feedback[&#39;max-varyings&#39;] = concurrent_test(&#39;ext_transform_feedback-max-varyings&#39;)<br>
+ext_transform_feedback[&#39;overflow-edge-cases&#39;] = concurrent_test(&#39;ext_transform_feedback-overflow-edge-cases&#39;)<br>
+ext_transform_feedback[&#39;position-readback-bufferbase&#39;] =               concurrent_test(&#39;ext_transform_feedback-position&#39;)<br>
+ext_transform_feedback[&#39;position-readback-bufferbase-discard&#39;] =       concurrent_test(&#39;ext_transform_feedback-position discard&#39;)<br>
+ext_transform_feedback[&#39;position-readback-bufferoffset&#39;] =             concurrent_test(&#39;ext_transform_feedback-position offset&#39;)<br>
+ext_transform_feedback[&#39;position-readback-bufferoffset-discard&#39;] =     concurrent_test(&#39;ext_transform_feedback-position offset discard&#39;)<br>
+ext_transform_feedback[&#39;position-readback-bufferrange&#39;] =              concurrent_test(&#39;ext_transform_feedback-position range&#39;)<br>
+ext_transform_feedback[&#39;position-readback-bufferrange-discard&#39;] =      concurrent_test(&#39;ext_transform_feedback-position range discard&#39;)<br>
+<br>
+ext_transform_feedback[&#39;position-render-bufferbase&#39;] =                         concurrent_test(&#39;ext_transform_feedback-position render&#39;)<br>
+ext_transform_feedback[&#39;position-render-bufferbase-discard&#39;] =                 concurrent_test(&#39;ext_transform_feedback-position render discard&#39;)<br>
+ext_transform_feedback[&#39;position-render-bufferoffset&#39;] =               concurrent_test(&#39;ext_transform_feedback-position render offset&#39;)<br>
+ext_transform_feedback[&#39;position-render-bufferoffset-discard&#39;] =       concurrent_test(&#39;ext_transform_feedback-position render offset discard&#39;)<br>
+ext_transform_feedback[&#39;position-render-bufferrange&#39;] =                concurrent_test(&#39;ext_transform_feedback-position render range&#39;)<br>
+ext_transform_feedback[&#39;position-render-bufferrange-discard&#39;] =        concurrent_test(&#39;ext_transform_feedback-position render range discard&#39;)<br>
+<br>
+ext_transform_feedback[&#39;query-primitives_generated-bufferbase&#39;] =              concurrent_test(&#39;ext_transform_feedback-position primgen&#39;)<br>
+ext_transform_feedback[&#39;query-primitives_generated-bufferbase-discard&#39;] =      concurrent_test(&#39;ext_transform_feedback-position primgen discard&#39;)<br>
+ext_transform_feedback[&#39;query-primitives_generated-bufferoffset&#39;] =            concurrent_test(&#39;ext_transform_feedback-position primgen offset&#39;)<br>
+ext_transform_feedback[&#39;query-primitives_generated-bufferoffset-discard&#39;] =    concurrent_test(&#39;ext_transform_feedback-position primgen offset discard&#39;)<br>
+ext_transform_feedback[&#39;query-primitives_generated-bufferrange&#39;] =             concurrent_test(&#39;ext_transform_feedback-position primgen range&#39;)<br>
+ext_transform_feedback[&#39;query-primitives_generated-bufferrange-discard&#39;] =     concurrent_test(&#39;ext_transform_feedback-position primgen range discard&#39;)<br>
+<br>
+ext_transform_feedback[&#39;query-primitives_written-bufferbase&#39;] =                concurrent_test(&#39;ext_transform_feedback-position primwritten&#39;)<br>
+ext_transform_feedback[&#39;query-primitives_written-bufferbase-discard&#39;] =        concurrent_test(&#39;ext_transform_feedback-position primwritten discard&#39;)<br>
+ext_transform_feedback[&#39;query-primitives_written-bufferoffset&#39;] =              concurrent_test(&#39;ext_transform_feedback-position primwritten offset&#39;)<br>
+ext_transform_feedback[&#39;query-primitives_written-bufferoffset-discard&#39;] =      concurrent_test(&#39;ext_transform_feedback-position primwritten offset discard&#39;)<br>
+ext_transform_feedback[&#39;query-primitives_written-bufferrange&#39;] =               concurrent_test(&#39;ext_transform_feedback-position primwritten range&#39;)<br>
+ext_transform_feedback[&#39;query-primitives_written-bufferrange-discard&#39;] =       concurrent_test(&#39;ext_transform_feedback-position primwritten range discard&#39;)<br>
+<br>
+ext_transform_feedback[&#39;interleaved-attribs&#39;] = concurrent_test(&#39;ext_transform_feedback-interleaved&#39;)<br>
+ext_transform_feedback[&#39;separate-attribs&#39;] = concurrent_test(&#39;ext_transform_feedback-separate&#39;)<br>
 for drawcall in [&#39;arrays&#39;, &#39;elements&#39;]:<br>
         for mode in [&#39;triangles&#39;, &#39;lines&#39;, &#39;points&#39;]:<br>
                 test_name = &#39;order {0} {1}&#39;.format(drawcall, mode)<br>
-                ext_transform_feedback[test_name] = PlainExecTest(<br>
-                        &#39;ext_transform_feedback-{0} -auto&#39;.format(test_name))<br>
+                ext_transform_feedback[test_name] = concurrent_test(<br>
+                        &#39;ext_transform_feedback-{0}&#39;.format(test_name))<br>
 for draw_mode in [&#39;points&#39;, &#39;lines&#39;, &#39;line_loop&#39;, &#39;line_strip&#39;,<br>
                   &#39;triangles&#39;, &#39;triangle_strip&#39;, &#39;triangle_fan&#39;,<br>
                   &#39;quads&#39;, &#39;quad_strip&#39;, &#39;polygon&#39;]:<br>
@@ -1496,12 +1496,12 @@ for draw_mode in [&#39;points&#39;, &#39;lines&#39;, &#39;line_loop&#39;, &#39;line_strip&#39;,<br>
                         continue<br>
                 test_name = &#39;tessellation {0} {1}&#39;.format(<br>
                         draw_mode, shade_mode)<br>
-                ext_transform_feedback[test_name] = PlainExecTest(<br>
-                        &#39;ext_transform_feedback-{0} -auto&#39;.format(test_name))<br>
+                ext_transform_feedback[test_name] = concurrent_test(<br>
+                        &#39;ext_transform_feedback-{0}&#39;.format(test_name))<br>
 for alignment in [0, 4, 8, 12]:<br>
         test_name = &#39;alignment {0}&#39;.format(alignment)<br>
-        ext_transform_feedback[test_name] = PlainExecTest(<br>
-                &#39;ext_transform_feedback-{0} -auto&#39;.format(test_name))<br>
+        ext_transform_feedback[test_name] = concurrent_test(<br>
+                &#39;ext_transform_feedback-{0}&#39;.format(test_name))<br>
<br>
 for output_type in [&#39;float&#39;, &#39;vec2&#39;, &#39;vec3&#39;, &#39;vec4&#39;, &#39;mat2&#39;, &#39;mat2x3&#39;,<br>
                     &#39;mat2x4&#39;, &#39;mat3x2&#39;, &#39;mat3&#39;, &#39;mat3x4&#39;, &#39;mat4x2&#39;, &#39;mat4x3&#39;,<br>
@@ -1509,13 +1509,13 @@ for output_type in [&#39;float&#39;, &#39;vec2&#39;, &#39;vec3&#39;, &#39;vec4&#39;, &#39;mat2&#39;, &#39;mat2x3&#39;,<br>
                     &#39;uvec3&#39;, &#39;uvec4&#39;]:<br>
         for suffix in [&#39;&#39;, &#39;[2]&#39;, &#39;[2]-no-subscript&#39;]:<br>
                 test_name = &#39;output-type {0}{1}&#39;.format(output_type, suffix)<br>
-                ext_transform_feedback[test_name] = PlainExecTest(<br>
-                        &#39;ext_transform_feedback-{0} -auto&#39;.format(test_name))<br>
+                ext_transform_feedback[test_name] = concurrent_test(<br>
+                        &#39;ext_transform_feedback-{0}&#39;.format(test_name))<br>
<br>
 for mode in [&#39;discard&#39;, &#39;buffer&#39;, &#39;prims_generated&#39;, &#39;prims_written&#39;]:<br>
         test_name = &#39;generatemipmap {0}&#39;.format(mode)<br>
-        ext_transform_feedback[test_name] = PlainExecTest(<br>
-                &#39;ext_transform_feedback-{0} -auto -fbo&#39;.format(test_name))<br>
+        ext_transform_feedback[test_name] = concurrent_test(<br>
+                &#39;ext_transform_feedback-{0}&#39;.format(test_name))<br>
<br>
 arb_transform_feedback2 = Group()<br>
 spec[&#39;ARB_transform_feedback2&#39;] = arb_transform_feedback2<br>
diff --git a/tests/spec/ext_transform_feedback/interleaved.c b/tests/spec/ext_transform_feedback/interleaved.c<br>
index 01c6c82..3f84d36 100644<br>
--- a/tests/spec/ext_transform_feedback/interleaved.c<br>
+++ b/tests/spec/ext_transform_feedback/interleaved.c<br>
@@ -185,7 +185,7 @@ enum piglit_result piglit_display(void)<br>
<br>
        assert(glGetError() == 0);<br>
<br>
-       glutSwapBuffers();<br>
+       piglit_present_results();<br>
<br>
        return pass ? PIGLIT_PASS : PIGLIT_FAIL;<br>
 }<br>
diff --git a/tests/spec/ext_transform_feedback/max-varyings.c b/tests/spec/ext_transform_feedback/max-varyings.c<br>
index d2c474a..064cb9f 100644<br>
--- a/tests/spec/ext_transform_feedback/max-varyings.c<br>
+++ b/tests/spec/ext_transform_feedback/max-varyings.c<br>
@@ -277,7 +277,7 @@ piglit_display(void)<br>
                }<br>
        }<br>
<br>
-       glutSwapBuffers();<br>
+       piglit_present_results();<br>
<br>
        if (!pass)<br>
                return PIGLIT_FAIL;<br>
diff --git a/tests/spec/ext_transform_feedback/output-type.c b/tests/spec/ext_transform_feedback/output-type.c<br>
index 10e7a8b..20a46b0 100644<br>
--- a/tests/spec/ext_transform_feedback/output-type.c<br>
+++ b/tests/spec/ext_transform_feedback/output-type.c<br>
@@ -1349,7 +1349,7 @@ enum piglit_result piglit_display(void)<br>
<br>
        assert(glGetError() == 0);<br>
<br>
-       glutSwapBuffers();<br>
+       piglit_present_results();<br>
<br>
        return pass ? PIGLIT_PASS : PIGLIT_FAIL;<br>
 }<br>
diff --git a/tests/spec/ext_transform_feedback/position.c b/tests/spec/ext_transform_feedback/position.c<br>
index 95a5b35..51dfc58 100644<br>
--- a/tests/spec/ext_transform_feedback/position.c<br>
+++ b/tests/spec/ext_transform_feedback/position.c<br>
@@ -278,7 +278,7 @@ enum piglit_result piglit_display(void)<br>
<br>
        assert(glGetError() == 0);<br>
<br>
-       glutSwapBuffers();<br>
+       piglit_present_results();<br>
<br>
        return pass ? PIGLIT_PASS : PIGLIT_FAIL;<br>
 }<br>
diff --git a/tests/spec/ext_transform_feedback/separate.c b/tests/spec/ext_transform_feedback/separate.c<br>
index 666e9be..da5beba 100644<br>
--- a/tests/spec/ext_transform_feedback/separate.c<br>
+++ b/tests/spec/ext_transform_feedback/separate.c<br>
@@ -169,7 +169,7 @@ enum piglit_result piglit_display(void)<br>
<br>
        assert(glGetError() == 0);<br>
<br>
-       glutSwapBuffers();<br>
+       piglit_present_results();<br>
<br>
        return pass ? PIGLIT_PASS : PIGLIT_FAIL;<br>
 }<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.7.6.5<br>
<br>
</font></span></blockquote></div><br>Any comments on this?  I&#39;d like to push it today.<br>