[Piglit] [PATCH v2] gl-4.5/named-framebuffer-read-buffer-errors: add test
Anuj Phogat
anuj.phogat at gmail.com
Fri Feb 3 02:40:29 UTC 2017
On Tue, Jan 31, 2017 at 1:38 AM, Alejandro PiƱeiro <apinheiro at igalia.com> wrote:
> All spec quotes come from OpenGL 4.5 spec, section 18.2.1
> "Selecting Buffers for Reading", page 502 (524 on PDF).
>
> Note that the errors are the same that with glReadBuffer,
> so we are testing this method too, although indirectly.
>
> v2 (Anuj):
> * Move logic to piglit_init (as we are not drawing anything)
> * Fit all lines under 80 character limit.
> ---
> tests/all.py | 1 +
> tests/spec/gl-4.5/CMakeLists.gl.txt | 1 +
> .../gl-4.5/named-framebuffer-read-buffer-errors.c | 186 +++++++++++++++++++++
> 3 files changed, 188 insertions(+)
> create mode 100644 tests/spec/gl-4.5/named-framebuffer-read-buffer-errors.c
>
> diff --git a/tests/all.py b/tests/all.py
> index be0fbaa..43e413e 100644
> --- a/tests/all.py
> +++ b/tests/all.py
> @@ -1315,6 +1315,7 @@ with profile.test_list.group_manager(
> PiglitGLTest,
> grouptools.join('spec', '!opengl 4.5')) as g:
> g(['gl-4.5-named-framebuffer-draw-buffers-errors'], 'named-framebuffer-draw-buffers-errors')
> + g(['gl-4.5-named-framebuffer-read-buffer-errors'], 'named-framebuffer-read-buffer-errors')
>
> with profile.test_list.group_manager(
> PiglitGLTest,
> diff --git a/tests/spec/gl-4.5/CMakeLists.gl.txt b/tests/spec/gl-4.5/CMakeLists.gl.txt
> index 3ea3b65..93736c9 100644
> --- a/tests/spec/gl-4.5/CMakeLists.gl.txt
> +++ b/tests/spec/gl-4.5/CMakeLists.gl.txt
> @@ -9,5 +9,6 @@ link_libraries (
> )
>
> piglit_add_executable (gl-4.5-named-framebuffer-draw-buffers-errors named-framebuffer-draw-buffers-errors.c)
> +piglit_add_executable (gl-4.5-named-framebuffer-read-buffer-errors named-framebuffer-read-buffer-errors.c)
>
> # vim: ft=cmake:
> diff --git a/tests/spec/gl-4.5/named-framebuffer-read-buffer-errors.c b/tests/spec/gl-4.5/named-framebuffer-read-buffer-errors.c
> new file mode 100644
> index 0000000..c4f2d34
> --- /dev/null
> +++ b/tests/spec/gl-4.5/named-framebuffer-read-buffer-errors.c
> @@ -0,0 +1,186 @@
> +/**
> + * Copyright 2017 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 named-framebuffer-read-buffer-errors.c
> + *
> + * Test that NamedFramebufferReadBuffer() returns correct error
> + * message for different values.
> + *
> + * All spec quotes come from OpenGL 4.5 spec, section 18.2.1
> + * "Selecting Buffers for Reading", page 502 (524 on PDF).
> + *
> + * Note that for 4.5, they are the same errors that for ReadBuffer, so
> + * we get that method tested it, although indirectly. Also some spec
> + * quotes could mention ReadBuffer too.
> + *
> + * From OpenGL 4.5, section 18.2.1 "Selecting Buffers for Reading",
> + * page 502:
> + *
> + * "When reading pixels from a color buffer of a framebuffer object,
> + * the buffer selected for reading is termed the read buffer, and is
> + * controlled with the commands:
> + *
> + * void ReadBuffer( enum src );
> + * void NamedFramebufferReadBuffer( uint framebuffer, enum src );
> + *
> + * For ReadBuffer, the target framebuffer object is that bound to
> + * READ_- FRAMEBUFFER . For NamedFramebufferReadBuffer, framebuffer
> + * is zero or the name of the target framebuffer object. If
> + * framebuffer is zero, then the default read framebuffer is
> + * affected."
> + */
> +
> +#include "piglit-util-gl.h"
> +
> +PIGLIT_GL_TEST_CONFIG_BEGIN
> +
> + config.supports_gl_core_version = 45;
> +
> + config.window_visual = PIGLIT_GL_VISUAL_RGBA |
> + PIGLIT_GL_VISUAL_DOUBLE;
> +
> +PIGLIT_GL_TEST_CONFIG_END
> +
> +static const GLenum table_17_4[] = {
> + GL_NONE,
> + GL_FRONT_LEFT,
> + GL_FRONT_RIGHT,
> + GL_BACK_LEFT,
> + GL_BACK_RIGHT,
> + GL_FRONT,
> + GL_BACK,
> + GL_LEFT,
> + GL_RIGHT,
> + GL_FRONT_AND_BACK
> +};
> +
> +void
> +piglit_init(int argc, char **argv)
> +{
> + bool pass = true;
> + GLuint framebuffer;
> + GLuint default_framebuffer = 0;
> + bool subtest_pass;
> + int i;
> +
> + glCreateFramebuffers(1, &framebuffer);
> + piglit_check_gl_error(GL_NO_ERROR);
> +
> + /*
> + * "An INVALID_OPERATION error is generated by
> + * NamedFramebuffer- ReadBuffer if framebuffer is not zero or
> + * the name of an existing framebuffer object.
> + */
> + glNamedFramebufferReadBuffer(5, GL_BACK);
> + SUBTEST(GL_INVALID_OPERATION, pass, "INVALID_OPERATION if framebuffer "
> + "is not zero or the name of an existing framebuffer");
> +
> + /*
> + * "An INVALID_ENUM error is generated if src is not one of the values in
> + * tables 17.4 or 17.5."
> + */
> + subtest_pass = true;
> + glNamedFramebufferReadBuffer(default_framebuffer, GL_RED);
> + subtest_pass = subtest_pass && piglit_check_gl_error(GL_INVALID_ENUM);
> + glNamedFramebufferReadBuffer(framebuffer, GL_RED);
> + subtest_pass = subtest_pass && piglit_check_gl_error(GL_INVALID_ENUM);
> + SUBTESTCONDITION(subtest_pass, pass, "INVALID_ENUM error is generated "
> + "if any value in bufs is not one of the values in "
> + "tables 17.4 or 17.5.");
> + /*
> + * "An INVALID_OPERATION error is generated if the default
> + * framebuffer is affected and src is a value (other than
> + * NONE) that does not indicate any of the color buffers
> + * allocated to the default framebuffer."
> + *
> + * So for the default framebuffer the value returned should be
> + * NO_ERROR or INVALID_OPERATION.
> + */
> + subtest_pass = true;
> + for (i = 0; i < ARRAY_SIZE(table_17_4); i++) {
> + GLenum err = 0;
> +
> + glNamedFramebufferReadBuffer(default_framebuffer, table_17_4[i]);
> + err = glGetError();
> + if (err != GL_NO_ERROR && err != GL_INVALID_OPERATION) {
> + printf("Expected GL_NO_ERROR or GL_INVALID_OPERATION "
> + "with %s but received: %s\n",
> + piglit_get_gl_enum_name(table_17_4[i]),
> + piglit_get_gl_error_name(err));
> + subtest_pass = false;
> + }
> + }
> + SUBTESTCONDITION(subtest_pass, pass, "An INVALID_OPERATION error is "
> + "generated if the default framebuffer is affected "
> + "and src is a value (other than NONE) that does not "
> + "indicate any of the color buffers allocated to the "
> + "default framebuffer.");
> +
> + /*
> + * "An INVALID_OPERATION error is generated if a framebuffer
> + * object is affected, and src is one of the constants from
> + * table 17.4 (other than NONE , or COLOR_ATTACHMENTm where m
> + * is greater than or equal to the value of
> + * MAX_COLOR_ATTACHMENTS ).
> + */
> + int max_attachments;
> + glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &max_attachments);
> + subtest_pass = true;
> +
> + /* Starting at 1, as GL_NONE is valid */
> + for (i = 1; i < ARRAY_SIZE(table_17_4); i++) {
> + GLenum err = 0;
> +
> + glNamedFramebufferReadBuffer(framebuffer, table_17_4[i]);
> + err = glGetError();
> + if (err != GL_INVALID_OPERATION) {
> + printf("Expected GL_INVALID_OPERATION with"
> + " %s but received: %s\n",
> + piglit_get_gl_enum_name(table_17_4[i]),
> + piglit_get_gl_error_name(err));
> + subtest_pass = false;
> + }
> + }
> +
> + glNamedFramebufferReadBuffer(framebuffer,
> + GL_COLOR_ATTACHMENT0 + max_attachments);
> + subtest_pass = subtest_pass &&
> + piglit_check_gl_error(GL_INVALID_OPERATION);
> + SUBTESTCONDITION(subtest_pass, pass, "An INVALID_OPERATION error is "
> + "generated if a framebuffer object is affected, and "
> + "src is one of the constants from table 17.4 (other "
> + "than NONE, or COLOR_ATTACHMENTm where m is greater "
> + "than or equal to the value of MAX_COLOR_ATTACHMENTS)");
> +
> + /* clean up */
> + glDeleteFramebuffers(1, &framebuffer);
> +
> + piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
> +}
> +
> +enum piglit_result
> +piglit_display(void)
> +{
> + /* UNREACHED */
> + return PIGLIT_FAIL;
> +}
> --
> 2.9.3
>
Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>
More information about the Piglit
mailing list