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

Chris Forbes chrisf at ijw.co.nz
Wed Jan 7 12:19:49 PST 2015


Subtle..

Reviewed-by: Chris Forbes <chrisf at ijw.co.nz>
On Jan 8, 2015 1: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"
> +       "  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 };
> +
> +static bool
> +run_test(void)
> +{
> +       GLuint prog;
> +       GLint attrib;
> +       bool pass;
> +
> +       prog = piglit_build_simple_program(vertex_source,
> +                                          NULL /* fs_source */);
> +       glUseProgram(prog);
> +
> +       attrib = glGetAttribLocation(prog, "a_value");
> +       glVertexAttribI1ui(attrib, TEST_VALUE);
> +
> +       piglit_draw_rect(-1, -1, 2, 2);
> +       pass = piglit_probe_pixel_rgb(0, 0, red);
> +
> +       glUseProgram(0);
> +       glDeleteProgram(prog);
> +
> +       return pass;
> +}
> +
> +void
> +piglit_init(int argc, char **argv)
> +{
> +       bool pass;
> +
> +       /* We need to be able to call glVertexAttribI1ui */
> +       if (piglit_get_gl_version() < 30
> +           && !piglit_is_extension_supported("GL_EXT_gpu_shader4")) {
> +               printf("OpenGL 3.0 or GL_EXT_gpu_shader4 is required.\n");
> +               piglit_report_result(PIGLIT_SKIP);
> +       }
> +
> +       piglit_require_GLSL_version(130);
> +
> +       pass = run_test();
> +
> +       piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
> +}
> +
> +enum piglit_result
> +piglit_display(void)
> +{
> +       /* unused */
> +       return PIGLIT_FAIL;
> +}
> --
> 1.9.3
>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/piglit/attachments/20150108/9561e4d1/attachment.html>


More information about the Piglit mailing list