diff options
author | Chad Versace <chad.versace@intel.com> | 2011-05-18 19:21:25 -0700 |
---|---|---|
committer | Chad Versace <chad@chad-versace.us> | 2011-06-01 19:11:20 -0700 |
commit | 763dec4bdae789245ca3f02f0f3d81ecefc68dce (patch) | |
tree | 166885a39dd0263c61c7251d2064310d7a86b1a6 | |
parent | f89091131775d68352fd69ef7fd01fea30a3d271 (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.tests | 5 | ||||
-rw-r--r-- | tests/hiz/CMakeLists.gl.txt | 5 | ||||
-rw-r--r-- | tests/hiz/hiz-stencil-test-fbo-d0-s8.c | 65 | ||||
-rw-r--r-- | tests/hiz/hiz-stencil-test-fbo-d24-s8.c | 66 | ||||
-rw-r--r-- | tests/hiz/hiz-stencil-test-fbo-d24s8.c | 65 | ||||
-rw-r--r-- | tests/hiz/hiz-stencil-test-window-depth0.c | 55 | ||||
-rw-r--r-- | tests/hiz/hiz-stencil-test-window-depth1.c | 55 | ||||
-rw-r--r-- | tests/hiz/hiz-util.c | 114 | ||||
-rw-r--r-- | tests/hiz/hiz-util.h | 25 |
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(); |