[Piglit] [PATCH 1/3] GL 3.2: Test for INVALID_ENUM when DrawBuffers() is passed incorrect color buffers

Paul Berry stereotype441 at gmail.com
Thu Aug 8 14:24:19 PDT 2013


On 6 August 2013 10:29, Nicholas Mack <nichmack at gmail.com> wrote:

> ---
>  tests/spec/gl-3.2/CMakeLists.gl.txt     |   1 +
>  tests/spec/gl-3.2/draw-buffers-errors.c | 116
> ++++++++++++++++++++++++++++++++
>  2 files changed, 117 insertions(+)
>  create mode 100644 tests/spec/gl-3.2/draw-buffers-errors.c
>
> diff --git a/tests/spec/gl-3.2/CMakeLists.gl.txt
> b/tests/spec/gl-3.2/CMakeLists.gl.txt
> index c6c99b8..49e9279 100644
> --- a/tests/spec/gl-3.2/CMakeLists.gl.txt
> +++ b/tests/spec/gl-3.2/CMakeLists.gl.txt
> @@ -10,5 +10,6 @@ link_libraries (
>  )
>
>  piglit_add_executable (gl-3.2-minmax minmax.c)
> +piglit_add_executable (gl-3.2-draw-buffers-errors draw-buffers-errors.c)
>
>  # vim: ft=cmake:
> diff --git a/tests/spec/gl-3.2/draw-buffers-errors.c
> b/tests/spec/gl-3.2/draw-buffers-errors.c
> new file mode 100644
> index 0000000..dae753a
> --- /dev/null
> +++ b/tests/spec/gl-3.2/draw-buffers-errors.c
> @@ -0,0 +1,116 @@
> +/**
> + * Copyright © 2013 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.
> + */
> +
> +/**
> + * Test that DrawBuffers() returns correct error message for different
> values
> + *
> + * Section 4.2.1(Selecting a Buffer for Writing) of OpenGL 3.2 Core says:
> + *
> + * "For both the default framebuffer and framebuffer objects, the
> constants
> + *  FRONT, BACK, LEFT, RIGHT, and FRONT_AND_BACK are not valid in the bufs
> + *  array passed to DrawBuffers, and will result in the error
> INVALID_ENUM."
> + *
> + * "If the GL is bound to the default framebuffer and DrawBuffers is
> supplied
> + *  with a constant (other than NONE) that does not indicate any of the
> color
> + *  buffers allocated to the GL context by the window system, the error
> + *  INVALID_OPERATION will be generated."
> + *
> + */
> +
> +#include "piglit-util-gl-common.h"
> +
> +PIGLIT_GL_TEST_CONFIG_BEGIN
> +
> +       config.supports_gl_compat_version = 10;
> +
> +       config.window_visual = PIGLIT_GL_VISUAL_DOUBLE;
> +
> +PIGLIT_GL_TEST_CONFIG_END
> +
> +
> +static GLenum invalids[]={GL_FRONT,
> +                       GL_BACK,
> +                       GL_LEFT,
> +                       GL_RIGHT,
> +                       GL_FRONT_AND_BACK};
> +
> +static GLenum valids[] = {GL_NONE,
> +                       GL_FRONT_LEFT,
> +                       GL_FRONT_RIGHT,
> +                       GL_BACK_LEFT,
> +                       GL_BACK_RIGHT};
> +
> +enum piglit_result
> +piglit_display(void)
> +{
> +       bool pass = true;
> +       int i = 0;
> +
> +       glClearColor(0, 1, 0 , 1);
> +       glClear(GL_COLOR_BUFFER_BIT);
> +
> +//             printf("Expected GL_WAIT_FAILED but returned: %s\n",
> +//                     piglit_get_gl_enum_name(status1));
> +//             pass = false;
> +
> +       for (i = 0; i < 5; i++) {
> +               GLenum err = 0;
> +               glDrawBuffers(1, &valids[i]);
> +               err = glGetError();
> +               /* err = INVALID_OPERATION if that color buffer is not
> +               allocated to the window system */
>

Sorry, I accidentally hit send too early.

The above comment should be formatted like so:

        /* err = INVALID_OPERATION if that color buffer is not
         * allocated to the window system
         */



> +               if(err != GL_NONE && err != GL_INVALID_OPERATION) {
> +                       printf("Expected GL_NONE or GL_INVALID_OPERATION
> with"
> +                               " %s but received: %s\n",
> +                               piglit_get_gl_enum_name(valids[i]),
> +                               piglit_get_gl_enum_name(err));
> +                       pass = false;
> +               }
> +       }
> +
> +       for (i = 0; i < 5; i++) {
> +               GLenum err = 0;
> +               glDrawBuffers(1, &invalids[i]);
> +               err = glGetError();
> +               if(err != GL_INVALID_ENUM) {
> +                       printf("Expected GL_INVALID_ENUM with %s but "
> +                               "received: %s\n",
> +                               piglit_get_gl_enum_name(invalids[i]),
> +                               piglit_get_gl_enum_name(err));
> +                       pass = false;
> +               }
> +       }
> +
> +       if(!pass) {
> +               glClearColor(1, 0, 0 , 1);
> +               glClear(GL_COLOR_BUFFER_BIT);
> +       }
> +
> +       piglit_present_results();
>

It's not necessary to render anything for an API test like this one.  I'd
recommend dropping the calls to glClearColor(), glClear(), and
piglit_present_results().

With those items fixed (and the issues from my previous email), this test
is:

Reviewed-by: Paul Berry <stereotype441 at gmail.com>

>
> +
> +       return pass ? PIGLIT_PASS : PIGLIT_FAIL;
> +}
> +void
> +piglit_init(int argc, char **argv)
> +{
> +}
> --
> 1.8.3.1
>
> _______________________________________________
> 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/20130808/36df5360/attachment.html>


More information about the Piglit mailing list