--- tests/all.py | 2 +- tests/fbo/fbo-depth-array.c | 36 ++++++++++++++++++++++++++++++------ 2 files changed, 31 insertions(+), 7 deletions(-)
diff --git a/tests/all.py b/tests/all.py index 586cead..9aa600f 100644 --- a/tests/all.py +++ b/tests/all.py @@ -2831,7 +2831,7 @@ add_shader_test_dir(ext_texture_array, add_msaa_visual_plain_tests(ext_texture_array, 'copyteximage 1D_ARRAY') add_msaa_visual_plain_tests(ext_texture_array, 'copyteximage 2D_ARRAY') add_plain_test(ext_texture_array, 'fbo-array') -for test in ('depth-clear', 'depth-layered-clear', 'depth-draw', 'fs-writes-depth', +for test in ('depth-clear', 'depth-layered-clear', 'depth-stencil-color-clear', 'depth-draw', 'fs-writes-depth', 'stencil-clear', 'stencil-layered-clear', 'stencil-draw', 'fs-writes-stencil'): add_concurrent_test(ext_texture_array, 'fbo-depth-array ' + test) add_plain_test(ext_texture_array, 'array-texture') diff --git a/tests/fbo/fbo-depth-array.c b/tests/fbo/fbo-depth-array.c index 84370e4..dde807d 100644 --- a/tests/fbo/fbo-depth-array.c +++ b/tests/fbo/fbo-depth-array.c @@ -46,6 +46,7 @@ enum { CLEAR, LAYERED_CLEAR, + LAYERED_DEPTH_STENCIL_COLOR_CLEAR, DRAW, FS_WRITES_VALUE, }; @@ -135,11 +136,13 @@ static GLuint program_stencil_output; static GLuint program_texdepth; static GLuint program_texstencil; +static GLuint color_texture; + static float get_depth_value(unsigned layer) { - if (test == LAYERED_CLEAR) + if (test == LAYERED_CLEAR || LAYERED_DEPTH_STENCIL_COLOR_CLEAR) return 0.4; /* constant */ else return (double)(layer+1) / (layers+1); @@ -181,6 +184,10 @@ parse_args(int argc, char **argv) test = LAYERED_CLEAR; puts("Testing layered glClear"); } + else if (!strcmp(argv[i], "depth-stencil-color-layered-clear")) { + test = LAYERED_DEPTH_STENCIL_COLOR_CLEAR; + puts("Testing depth stencil color layered glClear"); + } else if (!strcmp(argv[i], "depth-draw")) { test = DRAW; puts("Testing drawing"); @@ -224,6 +231,14 @@ create_array_fbo(void) int layer; glGenTextures(1, &tex); + glGenTextures(1, &color_texture); + + glBindTexture(GL_TEXTURE_2D_ARRAY, color_texture); + glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, + width, height, layers, 0, + GL_RGBA, GL_UNSIGNED_INT, NULL); + assert(glGetError() == 0); + glBindTexture(GL_TEXTURE_2D_ARRAY, tex); assert(glGetError() == 0); @@ -241,11 +256,19 @@ create_array_fbo(void) /* draw something into each layer of the array texture */ for (layer = 0; layer < layers; layer++) { - if (test == LAYERED_CLEAR) { - glFramebufferTexture(GL_FRAMEBUFFER, - test_stencil ? GL_STENCIL_ATTACHMENT : - GL_DEPTH_ATTACHMENT, - tex, 0); + if (test == LAYERED_CLEAR || test == LAYERED_DEPTH_STENCIL_COLOR_CLEAR) { + if (test == LAYERED_DEPTH_STENCIL_COLOR_CLEAR) { + glFramebufferTexture(GL_FRAMEBUFFER, + GL_COLOR_ATTACHMENT0_EXT, + color_texture, 0); + glFramebufferTexture(GL_FRAMEBUFFER, + GL_DEPTH_STENCIL_ATTACHMENT, + tex, 0); + } else + glFramebufferTexture(GL_FRAMEBUFFER, + test_stencil ? GL_STENCIL_ATTACHMENT : + GL_DEPTH_ATTACHMENT, + tex, 0); status = glCheckFramebufferStatus(GL_FRAMEBUFFER); if (status != GL_FRAMEBUFFER_COMPLETE) { @@ -433,6 +456,7 @@ test_once(void) } glDeleteTextures(1, &tex); + glDeleteTextures(1, &color_texture); assert(glGetError() == 0); return pass; } -- 1.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev