[Mesa-dev] [PATCH] fbo-depth-array:Check completness with a color texture

Vincent Lejeune vljn at ovi.com
Wed Oct 8 05:33:45 PDT 2014


---
 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



More information about the mesa-dev mailing list