[Piglit] [PATCH 2/2] Transform feedback: eliminate test dependency on tessellation order.
Marek Olšák
maraeo at gmail.com
Tue Nov 8 16:24:28 PST 2011
Acked-by: Marek Olšák <maraeo at gmail.com>
On Wed, Nov 9, 2011 at 1:03 AM, Paul Berry <stereotype441 at gmail.com> wrote:
> The transform feedback tests interleaved.c and position.c were
> assuming that a GL_QUAD whose vertices are ABCD is tessellated into
> triangle ABD followed by triangle BCD. This is not a reliable
> assumption--according to the EXT_transform_feedback spec, "the order
> of tessellation within a primitive is undefined". This was causing
> these tests to fail on the nVidia proprietary Linux driver, which
> tessellates quad ABCD as ABC followed by ACD.
>
> This patch chnges interleaved.c and position.c so that they specify
> triangles explicitly using glDrawElements(GL_TRIANGLES). The expected
> output is the same, but the test behavior no longer depends on how the
> driver tessellates quads.
>
> Fixes bogus failures on nVidia:
> - interleaved-attribs
> - position-readback-bufferbase
> - position-readback-bufferbase-discard
> - position-readback-bufferrange
> - position-readback-bufferrange-discard
> - position-render-bufferrange
> - position-render-bufferrange-discard
> ---
> tests/spec/ext_transform_feedback/interleaved.c | 5 ++++-
> tests/spec/ext_transform_feedback/position.c | 5 ++++-
> 2 files changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/tests/spec/ext_transform_feedback/interleaved.c b/tests/spec/ext_transform_feedback/interleaved.c
> index 0975943..01c6c82 100644
> --- a/tests/spec/ext_transform_feedback/interleaved.c
> +++ b/tests/spec/ext_transform_feedback/interleaved.c
> @@ -115,6 +115,9 @@ enum piglit_result piglit_display(void)
> 20, 20,
> 20, 10
> };
> + static const unsigned indices[] = {
> + 0, 1, 3, 1, 2, 3
> + };
> static const float expected[] = {
> 0.550000, 0.660000, 0.770000,
> 1.000000, 0.900000, 0.800000, 0.700000,
> @@ -161,7 +164,7 @@ enum piglit_result piglit_display(void)
> glEnable(GL_RASTERIZER_DISCARD);
> piglit_BeginTransformFeedback(GL_TRIANGLES);
> glVertexPointer(2, GL_FLOAT, 0, verts);
> - glDrawArrays(GL_QUADS, 0, 4);
> + glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, indices);
> piglit_EndTransformFeedback();
> glDisable(GL_RASTERIZER_DISCARD);
>
> diff --git a/tests/spec/ext_transform_feedback/position.c b/tests/spec/ext_transform_feedback/position.c
> index 2fbd88f..95a5b35 100644
> --- a/tests/spec/ext_transform_feedback/position.c
> +++ b/tests/spec/ext_transform_feedback/position.c
> @@ -180,6 +180,9 @@ enum piglit_result piglit_display(void)
> -0.375000, 0.250000, 0.000000, 1.000000,
> -0.375000, -0.375000, 0.000000, 1.000000,
> };
> + static const unsigned indices[] = {
> + 0, 1, 3, 1, 2, 3
> + };
> static const float clearcolor[] = {0.2, 0.2, 0.2};
> static const float white[] = {1, 1, 1};
> static const float red[] = {1, 0, 0};
> @@ -206,7 +209,7 @@ enum piglit_result piglit_display(void)
> piglit_BeginTransformFeedback(GL_TRIANGLES);
> glBindBuffer(GL_ARRAY_BUFFER, 0);
> glVertexPointer(2, GL_FLOAT, 0, verts);
> - glDrawArrays(GL_QUADS, 0, 4);
> + glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, indices);
> piglit_EndTransformFeedback();
> if (discard)
> glDisable(GL_RASTERIZER_DISCARD_EXT);
> --
> 1.7.6.4
>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit
>
More information about the Piglit
mailing list