diff options
author | Jordan Justen <jordan.l.justen@intel.com> | 2013-05-31 18:59:57 -0700 |
---|---|---|
committer | Jordan Justen <jordan.l.justen@intel.com> | 2013-07-18 23:10:35 -0700 |
commit | f7661d71279893dfe4647d1d9015fe12f4faa55c (patch) | |
tree | c303d0d848e93fc3becce62323e690ee7f1c53df | |
parent | 3ffcb9dbf2518a68893db374d1bfe837c37ca43d (diff) |
depthstencil-different-lod: test attaching depth lod=1, stencil lod=0depthstencil-different-lod
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
-rw-r--r-- | tests/texturing/CMakeLists.gl.txt | 1 | ||||
-rw-r--r-- | tests/texturing/depthstencil-different-lod.c | 190 |
2 files changed, 191 insertions, 0 deletions
diff --git a/tests/texturing/CMakeLists.gl.txt b/tests/texturing/CMakeLists.gl.txt index 0534c88a2..966911059 100644 --- a/tests/texturing/CMakeLists.gl.txt +++ b/tests/texturing/CMakeLists.gl.txt @@ -22,6 +22,7 @@ piglit_add_executable (crossbar crossbar.c) piglit_add_executable (cubemap cubemap.c) piglit_add_executable (cubemap-shader cubemap-shader.c) piglit_add_executable (depth-level-clamp depth-level-clamp.c) +piglit_add_executable (depthstencil-different-lod depthstencil-different-lod.c) piglit_add_executable (depthstencil-render-miplevels depthstencil-render-miplevels.cpp) piglit_add_executable (gen-compressed-teximage gen-compressed-teximage.c) piglit_add_executable (gen-nonzero-unit gen-nonzero-unit.c) diff --git a/tests/texturing/depthstencil-different-lod.c b/tests/texturing/depthstencil-different-lod.c new file mode 100644 index 000000000..1ec71a080 --- /dev/null +++ b/tests/texturing/depthstencil-different-lod.c @@ -0,0 +1,190 @@ +/* + * Copyright © 2012 - 2013 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 multiple-depths.cpp + * + * Test that rendering to multiple textures with different depths + * works properly. + * + * This test operates by + */ + +#include "piglit-util-gl-common.h" + +PIGLIT_GL_TEST_CONFIG_BEGIN + + config.supports_gl_compat_version = 10; + + config.window_width = 256; + config.window_height = 256; + config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGB; + +PIGLIT_GL_TEST_CONFIG_END + +void +piglit_init(int argc, char **argv) +{ +} + +static void +clear_fbo_depthstencil(void) +{ + glFramebufferTexture2D(GL_FRAMEBUFFER, + GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, + 0, 0); + glFramebufferTexture2D(GL_FRAMEBUFFER, + GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, + 0, 0); +} + +static const char *scenario; + +static void +show_fbo_status_and_clear_fbo(void) +{ + GLenum status; + + status = glCheckFramebufferStatus(GL_FRAMEBUFFER); + printf("%-30s -> FBO status: %s\n", scenario, piglit_get_gl_enum_name(status)); + clear_fbo_depthstencil(); +} + +enum piglit_result +piglit_display() +{ + bool pass = true; + GLuint fbo; + GLuint tex1; + GLuint tex2; + GLuint rb1; + GLuint rb2; + + glEnable(GL_TEXTURE_2D); + + glGenTextures(1, &tex1); + glGenTextures(1, &tex2); + assert(tex1 && tex2); + + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, tex1); + + printf("Texture / Renderbuffer information:\n"); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, 4, 4, 0, + GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, NULL); + glTexImage2D(GL_TEXTURE_2D, 1, GL_DEPTH24_STENCIL8, 2, 2, 0, + GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, NULL); + glTexImage2D(GL_TEXTURE_2D, 2, GL_DEPTH24_STENCIL8, 1, 1, 0, + GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, NULL); + printf("tex1: GL_DEPTH24_STENCIL8 4x4\n"); + + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D, tex2); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, 1, 1, 0, + GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, NULL); + printf("tex2: GL_DEPTH24_STENCIL8 1x1\n"); + + glGenFramebuffers(1, &fbo); + assert(fbo); + glBindFramebuffer(GL_FRAMEBUFFER, fbo); + + glGenRenderbuffers(1, &rb1); + glGenRenderbuffers(1, &rb2); + assert(rb1 && rb2); + + glBindRenderbuffer(GL_RENDERBUFFER, rb1); + glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, 2, 2); + printf("rb1: GL_DEPTH_COMPONENT16 2x2\n"); + + glBindRenderbuffer(GL_RENDERBUFFER, rb2); + glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, 2, 2); + printf("rb2: GL_STENCIL_INDEX8 2x2\n"); + + printf("\nScenarios of interest:\n"); + + scenario = "d=tex1-lod2, s=tex1-lod0"; + glFramebufferTexture2D(GL_FRAMEBUFFER, + GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, + tex1, 2); + glFramebufferTexture2D(GL_FRAMEBUFFER, + GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, + tex1, 0); + show_fbo_status_and_clear_fbo(); + + scenario = "d=tex1-lod1, s=tex2-lod0"; + glFramebufferTexture2D(GL_FRAMEBUFFER, + GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, + tex1, 1); + glFramebufferTexture2D(GL_FRAMEBUFFER, + GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, + tex2, 0); + show_fbo_status_and_clear_fbo(); + + scenario = "d=tex1-lod1, s=rb2"; + glFramebufferTexture2D(GL_FRAMEBUFFER, + GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, + tex1, 1); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, + GL_STENCIL_ATTACHMENT, + GL_RENDERBUFFER, + rb2); + show_fbo_status_and_clear_fbo(); + + scenario = "d=rb1, s=tex1-lod1"; + glFramebufferRenderbuffer(GL_FRAMEBUFFER, + GL_DEPTH_ATTACHMENT, + GL_RENDERBUFFER, + rb1); + glFramebufferTexture2D(GL_FRAMEBUFFER, + GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, + tex1, 1); + show_fbo_status_and_clear_fbo(); + + scenario = "d=rb1, s=rb2"; + glFramebufferRenderbuffer(GL_FRAMEBUFFER, + GL_DEPTH_ATTACHMENT, + GL_RENDERBUFFER, + rb1); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, + GL_STENCIL_ATTACHMENT, + GL_RENDERBUFFER, + rb2); + show_fbo_status_and_clear_fbo(); + + printf("\nExpected to pass:\n"); + + scenario = "d=s=tex1-lod0"; + glFramebufferTexture2D(GL_FRAMEBUFFER, + GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, + tex1, 0); + show_fbo_status_and_clear_fbo(); + + glDeleteTextures(1, &tex1); + glDeleteTextures(1, &tex2); + glDeleteRenderbuffers(1, &rb1); + glDeleteRenderbuffers(1, &rb2); + glDeleteFramebuffers(1, &fbo); + + exit(pass ? 0 : -1); +} |