[Piglit] [PATCH piglit] shaders: Test using an int vertex attrib value that looks like NaN

Matt Turner mattst88 at gmail.com
Wed Jan 7 17:25:57 PST 2015


On Wed, Jan 7, 2015 at 4:07 AM, Neil Roberts <neil at linux.intel.com> wrote:
> Adds a test which tries setting a uint attrib value to 0x7f817f81.
> If this value were interpreted as a float then it would look like a
> signalling NaN. If this is passed through an x87 register then it
> would get converted to a quiet NaN on store.
>
> Currently Mesa does this on 32-bit builds (possibly only with
> optimisations turned on) so the test fails. The code is in Mesa main
> so it should fail on all drivers.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=82668
> ---
>
> This patch has been sitting as an attachment in the bug report for a
> while but I think it would be a good idea to land it in master.
>
>  tests/all.py                       |   1 +
>  tests/shaders/CMakeLists.gl.txt    |   1 +
>  tests/shaders/glsl-vs-int-attrib.c | 115 +++++++++++++++++++++++++++++++++++++
>  3 files changed, 117 insertions(+)
>  create mode 100644 tests/shaders/glsl-vs-int-attrib.c
>
> diff --git a/tests/all.py b/tests/all.py
> index 051b157..c62749b 100644
> --- a/tests/all.py
> +++ b/tests/all.py
> @@ -496,6 +496,7 @@ add_concurrent_test(shaders, 'useshaderprogram-bad-type')
>  add_concurrent_test(shaders, 'useshaderprogram-bad-program')
>  add_concurrent_test(shaders, 'useshaderprogram-flushverts-1')
>  add_concurrent_test(shaders, 'point-vertex-id')
> +add_concurrent_test(shaders, 'glsl-vs-int-attrib')
>  for subtest in ('interstage', 'intrastage', 'vs-gs'):
>      cmdline = 'version-mixing {0}'.format(subtest)
>      shaders[cmdline] = PiglitGLTest(cmdline, run_concurrent=True)
> diff --git a/tests/shaders/CMakeLists.gl.txt b/tests/shaders/CMakeLists.gl.txt
> index c827256..3efc6bf 100644
> --- a/tests/shaders/CMakeLists.gl.txt
> +++ b/tests/shaders/CMakeLists.gl.txt
> @@ -168,5 +168,6 @@ piglit_add_executable (useshaderprogram-bad-type useshaderprogram-bad-type.c)
>  piglit_add_executable (useshaderprogram-bad-program useshaderprogram-bad-program.c)
>  piglit_add_executable (useshaderprogram-flushverts-1 useshaderprogram-flushverts-1.c)
>  piglit_add_executable (version-mixing version-mixing.c)
> +piglit_add_executable (glsl-vs-int-attrib glsl-vs-int-attrib.c)
>
>  # vim: ft=cmake:
> diff --git a/tests/shaders/glsl-vs-int-attrib.c b/tests/shaders/glsl-vs-int-attrib.c
> new file mode 100644
> index 0000000..9668866
> --- /dev/null
> +++ b/tests/shaders/glsl-vs-int-attrib.c
> @@ -0,0 +1,115 @@
> +/*
> + * Copyright (c) 2014 Intel Corporation
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the "Software"),
> + * to deal in the Software without restriction, including without limitation
> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice (including the next
> + * paragraph) shall be included in all copies or substantial portions of the
> + * Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> + * IN THE SOFTWARE.
> + */
> +
> +/** @file glsl-vs-int-attrib.c
> + *
> + * Tests that we can set an integer vertex attribute to a value that
> + * looks like a signalling NaN if it were interpreted as a float. If
> + * an implementation passes this through a floating point variable it
> + * might incorrectly get corrupted to a quiet NaN.
> + */
> +
> +#include "piglit-util-gl.h"
> +
> +PIGLIT_GL_TEST_CONFIG_BEGIN
> +
> +       config.supports_gl_compat_version = 20;
> +
> +       config.window_visual = PIGLIT_GL_VISUAL_RGB | PIGLIT_GL_VISUAL_DOUBLE;
> +
> +PIGLIT_GL_TEST_CONFIG_END
> +
> +/* This value looks like a signalling NaN if it were interpreted as a
> + * float */
> +#define TEST_VALUE 0x7f817f81
> +
> +#define STR(x) #x
> +#define STRINGIFY(x) STR(x)
> +
> +static const char
> +vertex_source[] =
> +       "#version 130\n"
> +       "\n"
> +       "attribute vec4 piglit_vertex;\n"
> +       "attribute uint a_value;\n"
> +       "\n"
> +       "void\n"
> +       "main()\n"
> +       "{\n"
> +       "  if (a_value == " STRINGIFY(TEST_VALUE) "u)\n"
> +       "    gl_FrontColor = vec4(1.0, 0.0, 0.0, 1.0);\n"

We usually do green for pass and red for fail.

With that changed,

Reviewed-by: Matt Turner <mattst88 at gmail.com>

> +       "  else\n"
> +       "    gl_FrontColor = vec4(0.0, 1.0, 0.0, 1.0);\n"
> +       "  gl_Position = piglit_vertex;\n"
> +       "}\n";
> +
> +static const float red[] = { 1.0f, 0.0f, 0.0f };


More information about the Piglit mailing list