aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChad Versace <chad.versace@intel.com>2011-05-18 19:21:25 -0700
committerChad Versace <chad@chad-versace.us>2011-06-01 19:11:20 -0700
commit763dec4bdae789245ca3f02f0f3d81ecefc68dce (patch)
tree166885a39dd0263c61c7251d2064310d7a86b1a6
parentf89091131775d68352fd69ef7fd01fea30a3d271 (diff)
hiz: Add tests for stencil test
Add the following tests: hiz-stencil-test-fbo-d0-s8 hiz-stencil-test-fbo-d24-s8 hiz-stencil-test-fbo-d24s8 hiz-stencil-test-window-depth0 hiz-stencil-test-window-depth1 These tests check that stencil test works correctly when rendering to various framebuffer configurations, including FBO's and window framebuffers. Signed-off-by: Chad Versace <chad.versace@intel.com>
-rw-r--r--tests/all.tests5
-rw-r--r--tests/hiz/CMakeLists.gl.txt5
-rw-r--r--tests/hiz/hiz-stencil-test-fbo-d0-s8.c65
-rw-r--r--tests/hiz/hiz-stencil-test-fbo-d24-s8.c66
-rw-r--r--tests/hiz/hiz-stencil-test-fbo-d24s8.c65
-rw-r--r--tests/hiz/hiz-stencil-test-window-depth0.c55
-rw-r--r--tests/hiz/hiz-stencil-test-window-depth1.c55
-rw-r--r--tests/hiz/hiz-util.c114
-rw-r--r--tests/hiz/hiz-util.h25
9 files changed, 455 insertions, 0 deletions
diff --git a/tests/all.tests b/tests/all.tests
index 854182b1..a5b54d12 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -1053,6 +1053,11 @@ add_plain_test(hiz, 'hiz-depth-test-fbo-d24-s8')
add_plain_test(hiz, 'hiz-depth-test-fbo-d24s8')
add_plain_test(hiz, 'hiz-depth-test-window-stencil0')
add_plain_test(hiz, 'hiz-depth-test-window-stencil1')
+add_plain_test(hiz, 'hiz-stencil-test-fbo-d0-s8')
+add_plain_test(hiz, 'hiz-stencil-test-fbo-d24-s8')
+add_plain_test(hiz, 'hiz-stencil-test-fbo-d24s8')
+add_plain_test(hiz, 'hiz-stencil-test-window-depth0')
+add_plain_test(hiz, 'hiz-stencil-test-window-depth1')
asmparsertest = Group()
def add_asmparsertest(group, shader):
diff --git a/tests/hiz/CMakeLists.gl.txt b/tests/hiz/CMakeLists.gl.txt
index 05e02dad..d9ba5b2b 100644
--- a/tests/hiz/CMakeLists.gl.txt
+++ b/tests/hiz/CMakeLists.gl.txt
@@ -29,5 +29,10 @@ add_executable(hiz-depth-test-fbo-d24-s8 hiz-depth-test-fbo-d24-s8.c)
add_executable(hiz-depth-test-fbo-d24s8 hiz-depth-test-fbo-d24s8.c)
add_executable(hiz-depth-test-window-stencil0 hiz-depth-test-window-stencil0.c)
add_executable(hiz-depth-test-window-stencil1 hiz-depth-test-window-stencil1.c)
+add_executable(hiz-stencil-test-fbo-d0-s8 hiz-stencil-test-fbo-d0-s8.c)
+add_executable(hiz-stencil-test-fbo-d24-s8 hiz-stencil-test-fbo-d24-s8.c)
+add_executable(hiz-stencil-test-fbo-d24s8 hiz-stencil-test-fbo-d24s8.c)
+add_executable(hiz-stencil-test-window-depth0 hiz-stencil-test-window-depth0.c)
+add_executable(hiz-stencil-test-window-depth1 hiz-stencil-test-window-depth1.c)
# vim: ft=cmake:
diff --git a/tests/hiz/hiz-stencil-test-fbo-d0-s8.c b/tests/hiz/hiz-stencil-test-fbo-d0-s8.c
new file mode 100644
index 00000000..1deade33
--- /dev/null
+++ b/tests/hiz/hiz-stencil-test-fbo-d0-s8.c
@@ -0,0 +1,65 @@
+/*
+ * 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.
+ *
+ * Authors:
+ * Chad Versace <chad.versace@intel.com>
+ */
+
+/**
+ * \file hiz-stencil-test-fbo-d0-s8.c
+ *
+ * Check that stencil testing works correctly when rendering to an FBO with the
+ * following attachments:
+ * - GL_COLOR_ATTACHMENT0: GL_RGBA
+ * - GL_STENCIL_ATTACHMENT: GL_STENCIL_INDEX8
+ *
+ * \author Chad Versace <chad.versace@intel.com>
+ */
+
+#include "piglit-util.h"
+#include "hiz/hiz-util.h"
+
+int piglit_width = 400;
+int piglit_height = 400;
+int piglit_window_mode = GLUT_RGB;
+
+struct hiz_fbo_options fbo_options = {
+ GL_RGBA,
+ 0,
+ GL_STENCIL_INDEX8,
+ 0,
+};
+
+void
+piglit_init(int argc, char **argv)
+{
+ /* empty */
+}
+
+enum piglit_result
+piglit_display()
+{
+ if (hiz_run_test_stencil_test_fbo(&fbo_options))
+ return PIGLIT_PASS;
+ else
+ return PIGLIT_FAIL;
+}
diff --git a/tests/hiz/hiz-stencil-test-fbo-d24-s8.c b/tests/hiz/hiz-stencil-test-fbo-d24-s8.c
new file mode 100644
index 00000000..1767ab77
--- /dev/null
+++ b/tests/hiz/hiz-stencil-test-fbo-d24-s8.c
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ *
+ * Authors:
+ * Chad Versace <chad.versace@intel.com>
+ */
+
+/**
+ * \file hiz-stencil-test-fbo-d24-s8.c
+ *
+ * Check that stencil testing works correctly when rendering to an FBO with the
+ * following attachments:
+ * - GL_COLOR_ATTACHMENT0: GL_RGBA
+ * - GL_DEPTH_ATTACHMENT: GL_DEPTH_COMPONENT24
+ * - GL_STENCIL_ATTACHMENT: GL_STENCIL_INDEX8
+ *
+ * \author Chad Versace <chad.versace@intel.com>
+ */
+
+#include "piglit-util.h"
+#include "hiz/hiz-util.h"
+
+int piglit_width = 400;
+int piglit_height = 400;
+int piglit_window_mode = GLUT_RGB;
+
+struct hiz_fbo_options fbo_options = {
+ GL_RGBA,
+ GL_DEPTH_COMPONENT24,
+ GL_STENCIL_INDEX8,
+ 0,
+};
+
+void
+piglit_init(int argc, char **argv)
+{
+ /* empty */
+}
+
+enum piglit_result
+piglit_display()
+{
+ if (hiz_run_test_stencil_test_fbo(&fbo_options))
+ return PIGLIT_PASS;
+ else
+ return PIGLIT_FAIL;
+}
diff --git a/tests/hiz/hiz-stencil-test-fbo-d24s8.c b/tests/hiz/hiz-stencil-test-fbo-d24s8.c
new file mode 100644
index 00000000..09a30078
--- /dev/null
+++ b/tests/hiz/hiz-stencil-test-fbo-d24s8.c
@@ -0,0 +1,65 @@
+/*
+ * 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.
+ *
+ * Authors:
+ * Chad Versace <chad.versace@intel.com>
+ */
+
+/**
+ * \file hiz-stencil-test-fbo-d24s8.c
+ *
+ * Check that stencil testing works correctly when rendering to an FBO with the
+ * following attachments:
+ * - GL_COLOR_ATTACHMENT0: GL_RGBA
+ * - GL_DEPTH_STENCIL_ATTACHMENT: GL_DEPTH24_STENCIL8
+ *
+ * \author Chad Versace <chad.versace@intel.com>
+ */
+
+#include "piglit-util.h"
+#include "hiz/hiz-util.h"
+
+int piglit_width = 400;
+int piglit_height = 400;
+int piglit_window_mode = GLUT_RGB;
+
+struct hiz_fbo_options fbo_options = {
+ GL_RGBA,
+ 0,
+ 0,
+ GL_DEPTH24_STENCIL8,
+};
+
+void
+piglit_init(int argc, char **argv)
+{
+ /* empty */
+}
+
+enum piglit_result
+piglit_display()
+{
+ if (hiz_run_test_stencil_test_fbo(&fbo_options))
+ return PIGLIT_PASS;
+ else
+ return PIGLIT_FAIL;
+}
diff --git a/tests/hiz/hiz-stencil-test-window-depth0.c b/tests/hiz/hiz-stencil-test-window-depth0.c
new file mode 100644
index 00000000..9555af58
--- /dev/null
+++ b/tests/hiz/hiz-stencil-test-window-depth0.c
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ *
+ * Authors:
+ * Chad Versace <chad.versace@intel.com>
+ */
+
+/**
+ * \file hiz-stencil-test-window-depth0.c
+ * \author Chad Versace <chad.versace@intel.com>
+ *
+ * Check that stencil testing works correctly when rendering to a window
+ * framebuffer for which no depth buffer was requested.
+ */
+
+#include "piglit-util.h"
+#include "hiz/hiz-util.h"
+
+int piglit_width = 400;
+int piglit_height = 400;
+int piglit_window_mode = GLUT_RGB | GLUT_ALPHA | GLUT_STENCIL;
+
+void
+piglit_init(int argc, char **argv)
+{
+ /* empty */
+}
+
+enum piglit_result
+piglit_display()
+{
+ if (hiz_run_test_stencil_test_window())
+ return PIGLIT_PASS;
+ else
+ return PIGLIT_FAIL;
+}
diff --git a/tests/hiz/hiz-stencil-test-window-depth1.c b/tests/hiz/hiz-stencil-test-window-depth1.c
new file mode 100644
index 00000000..d04e1367
--- /dev/null
+++ b/tests/hiz/hiz-stencil-test-window-depth1.c
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ *
+ * Authors:
+ * Chad Versace <chad.versace@intel.com>
+ */
+
+/**
+ * \file hiz-stencil-test-window-depth1.c
+ * \author Chad Versace <chad.versace@intel.com>
+ *
+ * Check that stencil testing works correctly when rendering to a window
+ * framebuffer with a depth buffer.
+ */
+
+#include "piglit-util.h"
+#include "hiz/hiz-util.h"
+
+int piglit_width = 400;
+int piglit_height = 400;
+int piglit_window_mode = GLUT_RGB | GLUT_ALPHA | GLUT_STENCIL | GLUT_DEPTH;
+
+void
+piglit_init(int argc, char **argv)
+{
+ /* empty */
+}
+
+enum piglit_result
+piglit_display()
+{
+ if (hiz_run_test_stencil_test_window())
+ return PIGLIT_PASS;
+ else
+ return PIGLIT_FAIL;
+}
diff --git a/tests/hiz/hiz-util.c b/tests/hiz/hiz-util.c
index 13ce8c7c..60df8c96 100644
--- a/tests/hiz/hiz-util.c
+++ b/tests/hiz/hiz-util.c
@@ -292,3 +292,117 @@ hiz_run_test_depth_test_window()
}
/** \} */
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * \name hiz_run_stencil_test utilties
+ *
+ * Utilities for testing stencil testing.
+ *
+ * \{
+ */
+
+/**
+ * Common functionality needed by hiz_run_test_stencil_test_fbo() and
+ * hiz_run_test_stencil_test_window().
+ */
+static bool
+hiz_run_test_stencil_test_common()
+{
+ static const float *expected_colors[9] = {
+ hiz_green,
+ hiz_green,
+ hiz_grey,
+
+ hiz_green,
+ hiz_blue,
+ hiz_grey,
+
+ hiz_grey,
+ hiz_blue,
+ hiz_grey,
+ };
+
+ const float dx = piglit_width / 3.0;
+ const float dy = piglit_height / 3.0;
+
+ /* Set up depth state. */
+ glDisable(GL_DEPTH_TEST);
+ glClearDepth(hiz_clear_z);
+
+ /* Set up stencil state. */
+ glEnable(GL_STENCIL_TEST);
+ glClearStencil(3); /* 3 is a good canary. */
+ glStencilFunc(GL_LESS, 3, ~0);
+ glStencilOp(GL_INCR, GL_INCR, GL_INCR);
+
+ glClearColor(hiz_grey[0], hiz_grey[1], hiz_grey[2], hiz_grey[3]);
+ glClear(GL_COLOR_BUFFER_BIT
+ | GL_DEPTH_BUFFER_BIT
+ | GL_STENCIL_BUFFER_BIT);
+
+ glViewport(0, 0, piglit_width, piglit_height);
+ piglit_ortho_projection(piglit_width, piglit_height, false);
+
+ /* Draw rect 1. */
+ glColor4fv(hiz_grey);
+ piglit_draw_rect(0 * dx, 0 * dy, /* x, y */
+ 2 * dx, 3 * dy); /* w, h */
+
+ /* Draw rect 2. */
+ glColor4fv(hiz_green);
+ piglit_draw_rect(0 * dx, 0 * dy, /* x, y */
+ 2 * dx, 2 * dy); /* w, h */
+
+ /* Draw rect 3. */
+ glColor4fv(hiz_blue);
+ piglit_draw_rect(1 * dx, 1 * dy, /* x, y */
+ 2 * dx, 2 * dy); /* w, h */
+
+ assert(!glGetError());
+
+ return hiz_probe_color_buffer(expected_colors);
+}
+
+bool
+hiz_run_test_stencil_test_fbo(const struct hiz_fbo_options *fbo_options)
+{
+ bool pass = true;
+ GLuint fbo = 0;
+
+ piglit_require_extension("GL_ARB_framebuffer_object");
+
+ /* Create and bind FBO. */
+ fbo = hiz_make_fbo(fbo_options);
+ assert(fbo != 0);
+ glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo);
+ glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);
+
+ pass = hiz_run_test_stencil_test_common();
+
+ if (!piglit_automatic) {
+ /* Blit the FBO to the window FB so we can see the results. */
+ glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
+ glBlitFramebuffer(0, 0, piglit_width, piglit_height,
+ 0, 0, piglit_width, piglit_height,
+ GL_COLOR_BUFFER_BIT, GL_NEAREST);
+ glutSwapBuffers();
+ glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo);
+ }
+
+ hiz_delete_fbo(fbo);
+
+ return pass;
+}
+
+bool
+hiz_run_test_stencil_test_window()
+{
+ bool pass = hiz_run_test_stencil_test_common();
+ if (!piglit_automatic)
+ glutSwapBuffers();
+ return pass;
+}
+
+/** \} */
diff --git a/tests/hiz/hiz-util.h b/tests/hiz/hiz-util.h
index 55747b26..1aac16f8 100644
--- a/tests/hiz/hiz-util.h
+++ b/tests/hiz/hiz-util.h
@@ -93,3 +93,28 @@ bool hiz_run_test_depth_test_fbo(const struct hiz_fbo_options *options);
* \return True if test passed.
*/
bool hiz_run_test_depth_test_window();
+
+/**
+ * \brief Check that stencil testing works correctly when rendering to an FBO.
+ *
+ * This test probes only the color buffer; it does not probe the stencil
+ * buffer. Stencil test is enabled and depth test disabled.
+ *
+ * This test does not probe the stencil buffer because correct operation of 1)
+ * stencil testing and stencil writes (via glDraw*) and of 2) stencil buffer
+ * reads (via glRead*) are independent. It is possible for 1 to work while
+ * 2 to fail. This test covers only case 1.
+ *
+ * \param options Perform the test with an FBO with the given formats.
+ * \return True if test passed.
+ */
+bool hiz_run_test_stencil_test_fbo(const struct hiz_fbo_options *options);
+
+/**
+ * Check that stencil testing works correctly when rendering to the window
+ * framebuffer.
+ *
+ * \return True if test passed.
+ * \see hiz_run_test_stencil_test_fbo()
+ */
+bool hiz_run_test_stencil_test_window();