diff options
author | Anuj Phogat <anuj.phogat@gmail.com> | 2012-01-06 13:17:54 -0800 |
---|---|---|
committer | Anuj Phogat <anuj.phogat@gmail.com> | 2012-01-16 11:41:01 -0800 |
commit | 01deb8e0fe963641a09ecffc64aeabfbf70cef45 (patch) | |
tree | 16cf72e20562ccdb826e2125bd630e867a97dbf4 /tests/bugs | |
parent | 4b7aa38cb5c9458c10c5db6f8c2dd23613363098 (diff) |
Add test verifying glDrawBuffer with different buffer modes
This test works by calling glDrawBuffer function for each color buffer mode
and testing the buffer's color value against expected value
Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Ian Romanick <idr@freedesktop.org>
Diffstat (limited to 'tests/bugs')
-rw-r--r-- | tests/bugs/CMakeLists.gl.txt | 1 | ||||
-rw-r--r-- | tests/bugs/drawbuffer-modes.c | 163 |
2 files changed, 164 insertions, 0 deletions
diff --git a/tests/bugs/CMakeLists.gl.txt b/tests/bugs/CMakeLists.gl.txt index bce05322e..5c1864e02 100644 --- a/tests/bugs/CMakeLists.gl.txt +++ b/tests/bugs/CMakeLists.gl.txt @@ -16,6 +16,7 @@ link_libraries ( add_executable (crash-cubemap-order crash-cubemap-order.c) add_executable (crash-texparameter-before-teximage crash-texparameter-before-teximage.c) +add_executable (drawbuffer-modes drawbuffer-modes.c) add_executable (fdo9833 fdo9833.c) add_executable (fdo10370 fdo10370.c) add_executable (fdo14575 fdo14575.c) diff --git a/tests/bugs/drawbuffer-modes.c b/tests/bugs/drawbuffer-modes.c new file mode 100644 index 000000000..240782731 --- /dev/null +++ b/tests/bugs/drawbuffer-modes.c @@ -0,0 +1,163 @@ +/* Copyright © 2011 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 drawbuffer-modes.c + * Verify the functionality of glDrawBuffer() function with different color + * buffer modes in default framebuffer + * + * This test works by calling glDrawBuffer function for each color buffer mode + * and testing the buffer's color value against expected value. All the calls + * should ensure no error. + * + * This test case also verifies the fix for Bug 44153: + * https://bugs.freedesktop.org/show_bug.cgi?id=44153 + * + * \Author Yi Sun <yi.sun@intel.com>, Anuj Phogat <anuj.phogat@gmail.com> + */ +#include "piglit-util.h" +int piglit_width = 100, piglit_height = 100; +int piglit_window_mode = GLUT_RGB | GLUT_DOUBLE; + +float color[7][4] = { + { 0.1, 0.2, 0.3, 1.0 }, + { 0.2, 0.3, 0.4, 1.0 }, + { 0.3, 0.4, 0.5, 1.0 }, + { 0.4, 0.5, 0.6, 1.0 }, + { 0.5, 0.6, 0.7, 1.0 }, + { 0.6, 0.7, 0.8, 1.0 }, + { 1.0, 1.0, 1.0, 1.0 } }; + +int bufferlist[] = { + GL_FRONT_AND_BACK, + GL_BACK, GL_FRONT, + GL_LEFT, + GL_BACK_LEFT, + GL_FRONT_LEFT, + GL_NONE }; + +enum piglit_result +piglit_display(void) +{ + bool pass = true; + bool pixel_probe = true; + int i; + GLfloat probe[4]; + for ( i = 0; i < ARRAY_SIZE(bufferlist); i++) { + glDrawBuffer(bufferlist[i]); + glClear(GL_COLOR_BUFFER_BIT); + glColor4fv(color[i]); + piglit_draw_rect(20, 20, 50, 50); + pass = piglit_check_gl_error(GL_NO_ERROR) + && pass; + switch (bufferlist[i]) { + case GL_FRONT_AND_BACK: + glReadBuffer(GL_BACK_LEFT); + pass = piglit_probe_rect_rgba(20, 20, 50, 50, + color[i]) + && pass; + glReadBuffer(GL_FRONT_LEFT); + pass = pass && + piglit_probe_rect_rgba(20, 20, 50, 50, + color[i]); + break; + case GL_LEFT: + glReadBuffer(GL_BACK_LEFT); + pass = piglit_probe_rect_rgba(20, 20, 50, 50, + color[i]) + && pass; + glReadBuffer(GL_FRONT_LEFT); + pass = piglit_probe_rect_rgba(20, 20, 50, 50, + color[i]) + && pass; + break; + case GL_BACK: + case GL_BACK_LEFT: + glReadBuffer(bufferlist[i]); + pass = piglit_probe_rect_rgba(20, 20, 50, 50, + color[i]) + && pass; + /* This should not modify GL_FRONT_LEFT buffer */ + glReadBuffer(GL_FRONT_LEFT); + pixel_probe = piglit_probe_pixel_rgba_silent(25, 25, + color[i], + probe); + pass = !pixel_probe && pass; + if(pixel_probe) + printf("glDrawBuffer(GL_BACK) modifies" + " GL_FRONT_LEFT buffer\n"); + break; + case GL_FRONT: + case GL_FRONT_LEFT: + glReadBuffer(bufferlist[i]); + pass = piglit_probe_rect_rgba(20, 20, 50, 50, + color[i]) + && pass; + /* This should not modify GL_BACK_LEFT buffer */ + glReadBuffer(GL_BACK_LEFT); + pixel_probe = piglit_probe_pixel_rgba_silent(25, 25, + color[i], + probe); + pass = !pixel_probe && pass; + if(pixel_probe) + printf("glDrawBuffer(GL_FRONT) modifies" + " GL_BACK_LEFT buffer\n"); + break; + case GL_NONE: + /* Drawing to a buffer GL_NONE should not + * modify any existing buffers + */ + glReadBuffer(GL_BACK_LEFT); + pixel_probe = piglit_probe_pixel_rgba_silent(25, 25, + color[i], + probe); + pass = !pixel_probe && pass; + if(pixel_probe) + printf("glDrawBuffer(GL_NONE) modifies" + " GL_BACK_LEFT buffer\n"); + glReadBuffer(GL_FRONT_LEFT); + pixel_probe = piglit_probe_pixel_rgba_silent(25, 25, + color[i], + probe); + pass = !pixel_probe && pass; + if (pixel_probe) + printf("glDrawBuffer(GL_NONE) modifies" + " GL_FRONT_LEFT buffer\n"); + break; + } + pass = piglit_check_gl_error(GL_NO_ERROR) + && pass; + } + return (pass ? PIGLIT_PASS : PIGLIT_FAIL); +} + +void piglit_init(int argc, char **argv) +{ + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + glOrtho(0, piglit_width, 0, piglit_height, -1, 1); + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glLoadIdentity(); + glClearColor(0.2, 0.2, 0.2, 1.0); +} |