summaryrefslogtreecommitdiff
path: root/tests/bugs
diff options
context:
space:
mode:
authorAnuj Phogat <anuj.phogat@gmail.com>2012-01-06 13:17:54 -0800
committerAnuj Phogat <anuj.phogat@gmail.com>2012-01-16 11:41:01 -0800
commit01deb8e0fe963641a09ecffc64aeabfbf70cef45 (patch)
tree16cf72e20562ccdb826e2125bd630e867a97dbf4 /tests/bugs
parent4b7aa38cb5c9458c10c5db6f8c2dd23613363098 (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.txt1
-rw-r--r--tests/bugs/drawbuffer-modes.c163
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);
+}