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 <[email protected]>
Signed-off-by: Jon Ashburn <[email protected]>
---
 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

_______________________________________________
Piglit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to