[Piglit] [PATCH v2] ARB_texture_view: Add multisample texture target testing

Jon Ashburn jon at lunarg.com
Tue Nov 12 12:26:39 PST 2013


The "targets"  test is extended to include testing of
GL_TEXTURE_2D_MULTISAMPLE and GL_TEXTURE_2D_MULTISAMPLE_ARRAY.
This will test making valid and invalid texture views of these two
multisample targets and ensuring the correct GL error is set.

Reviewed-by: Brian Paul <brianp at vmware.com>
Signed-off-by: Jon Ashburn <jon at lunarg.com>
---
 tests/spec/arb_texture_view/targets.c | 53 +++++++++++++++++++++++++++--------
 1 file changed, 41 insertions(+), 12 deletions(-)

diff --git a/tests/spec/arb_texture_view/targets.c b/tests/spec/arb_texture_view/targets.c
index 2c2e5c5..b000751 100644
--- a/tests/spec/arb_texture_view/targets.c
+++ b/tests/spec/arb_texture_view/targets.c
@@ -94,9 +94,8 @@ test_target_errors(GLenum target)
 	GLuint tex;
 	enum piglit_result pass = true;
 	GLenum legalTargets[4];
-	unsigned int numTargets;
+	unsigned int numTargets, numIllegalTargets;
 	GLenum illegalTargets[] = {
-		/* skip multisample */
 		GL_TEXTURE_1D,
 		GL_TEXTURE_2D,
 		GL_TEXTURE_3D,
@@ -105,7 +104,14 @@ test_target_errors(GLenum target)
 		GL_TEXTURE_1D_ARRAY,
 		GL_TEXTURE_2D_ARRAY,
 		GL_TEXTURE_CUBE_MAP_ARRAY,
+		GL_TEXTURE_2D_MULTISAMPLE,
+		GL_TEXTURE_2D_MULTISAMPLE_ARRAY
 	};
+	
+	if (piglit_is_extension_supported("GL_ARB_texture_storage_multisample"))
+		numIllegalTargets = ARRAY_SIZE(illegalTargets);
+	else
+		numIllegalTargets =  ARRAY_SIZE(illegalTargets) -2;
 
 	glGenTextures(1, &tex);   /* orig tex */
 	glBindTexture(target, tex);
@@ -113,34 +119,33 @@ test_target_errors(GLenum target)
 	switch (target) {
 	case GL_TEXTURE_1D:
 		glTexStorage1D(target, levels, GL_RGBA8, width);
-		numTargets = 2;
-		update_valid_arrays(legalTargets, illegalTargets,
-				    ARRAY_SIZE(illegalTargets),
+		numTargets = update_valid_arrays(legalTargets, illegalTargets,
+				    numIllegalTargets,
 				    GL_TEXTURE_1D, GL_TEXTURE_1D_ARRAY, 0);
 		break;
 	case GL_TEXTURE_1D_ARRAY:
 		glTexStorage2D(target, levels, GL_RGBA8, width, height);
 		numTargets = update_valid_arrays(legalTargets, illegalTargets,
-				    ARRAY_SIZE(illegalTargets),
+				    numIllegalTargets,
 				    GL_TEXTURE_1D, GL_TEXTURE_1D_ARRAY, 0);
 		break;
 	case GL_TEXTURE_2D:
 		glTexStorage2D(target, levels, GL_RGBA8, width, height);
 		numTargets = update_valid_arrays(legalTargets, illegalTargets,
-				    ARRAY_SIZE(illegalTargets),
+				    numIllegalTargets,
 				    GL_TEXTURE_2D, GL_TEXTURE_2D_ARRAY, 0);
 		break;
 	case  GL_TEXTURE_RECTANGLE:
 		glTexStorage2D(target, levels, GL_RGBA8, width, height);
 		numTargets = update_valid_arrays(legalTargets, illegalTargets,
-				    ARRAY_SIZE(illegalTargets),
+				    numIllegalTargets,
 				    GL_TEXTURE_RECTANGLE, 0);
 		break;
 	case GL_TEXTURE_CUBE_MAP:
 		width = height;
 		glTexStorage2D(target, levels, GL_RGBA8, width, height);
 		numTargets = update_valid_arrays(legalTargets, illegalTargets,
-				    ARRAY_SIZE(illegalTargets),
+				    numIllegalTargets,
 				    GL_TEXTURE_CUBE_MAP, GL_TEXTURE_2D,
 				    GL_TEXTURE_2D_ARRAY,
 				    GL_TEXTURE_CUBE_MAP_ARRAY, 0);
@@ -148,7 +153,7 @@ test_target_errors(GLenum target)
 	case GL_TEXTURE_3D:
 		glTexStorage3D(target, levels, GL_RGBA8, width, height, depth);
 		numTargets = update_valid_arrays(legalTargets, illegalTargets,
-				    ARRAY_SIZE(illegalTargets),
+				    numIllegalTargets,
 				    GL_TEXTURE_3D, 0);
 		break;
 	case GL_TEXTURE_CUBE_MAP_ARRAY:
@@ -156,11 +161,27 @@ test_target_errors(GLenum target)
 		height = width;
 		glTexStorage3D(target, levels, GL_RGBA8, width, height, depth*6);
 		numTargets = update_valid_arrays(legalTargets, illegalTargets,
-				    ARRAY_SIZE(illegalTargets),
+				    numIllegalTargets,
 				    GL_TEXTURE_CUBE_MAP, GL_TEXTURE_2D,
 				    GL_TEXTURE_2D_ARRAY,
 				    GL_TEXTURE_CUBE_MAP_ARRAY, 0);
 		break;
+	case GL_TEXTURE_2D_MULTISAMPLE:
+		glTexStorage2DMultisample(target, 2, GL_RGBA8, width, height,
+					  GL_TRUE);
+		numTargets = update_valid_arrays(legalTargets, illegalTargets,
+				    numIllegalTargets,
+				    GL_TEXTURE_2D_MULTISAMPLE,
+				    GL_TEXTURE_2D_MULTISAMPLE_ARRAY, 0);
+		break;
+	case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
+		glTexStorage3DMultisample(target, 4, GL_RGBA8, width, height,
+					  depth, GL_TRUE);
+		numTargets = update_valid_arrays(legalTargets, illegalTargets,
+				    numIllegalTargets,
+				    GL_TEXTURE_2D_MULTISAMPLE,
+				    GL_TEXTURE_2D_MULTISAMPLE_ARRAY, 0);
+		break;
 	default:
 		assert(0);
 		break;
@@ -178,7 +199,7 @@ test_target_errors(GLenum target)
 					  GL_RG16, tex, levels);
 	/* ensure TextureView  of illegal targets returns an error */
 	pass = pass && check_target_array(GL_INVALID_OPERATION,
-					  ARRAY_SIZE(illegalTargets),
+					  numIllegalTargets,
 					  illegalTargets,
 					  GL_RG16, tex, levels);
 err_out:
@@ -212,6 +233,7 @@ piglit_init(int argc, char **argv)
 	piglit_require_extension("GL_ARB_texture_cube_map_array");
 	piglit_require_extension("GL_EXT_texture_array");
 	piglit_require_extension("GL_ARB_texture_rectangle");
+
 	if (piglit_get_gl_version() < 31)
 	    piglit_require_extension("GL_ARB_texture_cube_map");
 
@@ -228,6 +250,13 @@ piglit_init(int argc, char **argv)
 		"2D Array tex target validity");
 	X(test_target_errors(GL_TEXTURE_CUBE_MAP_ARRAY),
 		"Cubemap Array tex target validity");
+	if (piglit_is_extension_supported("GL_ARB_texture_storage_multisample")) {
+
+		X(test_target_errors(GL_TEXTURE_2D_MULTISAMPLE),
+		  "Multisample 2D tex target validity");
+		X(test_target_errors(GL_TEXTURE_2D_MULTISAMPLE_ARRAY),
+		  "Multisample 2D array tex target validity");
+	}
 #undef X
     pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
     piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
-- 
1.8.1.2



More information about the Piglit mailing list