This one is wierd since you give glTexImage3D layers * 6, but
textureSize reports back layers on its own.

Tested and passes on nvidia 295.59.

Signed-off-by: Dave Airlie <[email protected]>
---
 tests/texturing/shaders/common.c      |    1 +
 tests/texturing/shaders/textureSize.c |   30 +++++++++++++++++++-----------
 2 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/tests/texturing/shaders/common.c b/tests/texturing/shaders/common.c
index 0e2c4be..aa69a5d 100644
--- a/tests/texturing/shaders/common.c
+++ b/tests/texturing/shaders/common.c
@@ -67,6 +67,7 @@ upload_miplevel_data(GLenum target, int level, void 
*level_image)
                break;
        case GL_TEXTURE_3D:
        case GL_TEXTURE_2D_ARRAY:
+       case GL_TEXTURE_CUBE_MAP_ARRAY:
                glTexImage3D(target, level, internal_format,
                             level_size[level][0],
                             level_size[level][1],
diff --git a/tests/texturing/shaders/textureSize.c 
b/tests/texturing/shaders/textureSize.c
index 1e016bb..f89ff03 100644
--- a/tests/texturing/shaders/textureSize.c
+++ b/tests/texturing/shaders/textureSize.c
@@ -54,6 +54,8 @@ PIGLIT_GL_TEST_MAIN(
 static int lod_location;
 static int vertex_location;
 
+static char *cube_map_array_extension = "";
+
 /**
  * Returns the number of components expected from textureSize().
  */
@@ -71,9 +73,8 @@ sampler_size()
                return 2;
        case GL_TEXTURE_3D:
        case GL_TEXTURE_2D_ARRAY:
-               return 3;
        case GL_TEXTURE_CUBE_MAP_ARRAY:
-               assert(!"Not implemented yet.");
+               return 3;
        default:
                assert(!"Should not get here.");
                return 0;
@@ -107,8 +108,12 @@ piglit_display()
                if (sampler.target == GL_TEXTURE_1D_ARRAY) {
                        expected_color[1] = 0.01 * level_size[l][2];
                } else {
-                       for (i = 1; i < size; i++)
+                       for (i = 1; i < size; i++) {
                                expected_color[i] = 0.01 * level_size[l][i];
+                               /* the ARB_texture_cube_map_array spec 
specifies we get number of layer cubes back not faces * layers */
+                               if (i == 2 && sampler.target == 
GL_TEXTURE_CUBE_MAP_ARRAY)
+                                       expected_color[i] /= 6;
+                       }
                }
                expected_color[3] = 1.0;
 
@@ -136,6 +141,9 @@ set_base_size()
                /* Cube face width/height must be the same size. */
                base_size[0] = base_size[1] = 65;
                base_size[2] = 1;
+       } else if (sampler.target == GL_TEXTURE_CUBE_MAP_ARRAY) {
+               base_size[0] = base_size[1] = 65;
+               base_size[2] = 6;
        } else {
                base_size[0] = 65;
                base_size[1] = has_height() ? 32 : 1;
@@ -210,7 +218,7 @@ generate_GLSL(enum shader_target test_stage)
        switch (test_stage) {
        case VS:
                asprintf(&vs_code,
-                        "#version %d\n"
+                        "#version %d\n%s"
                         "#define ivec1 int\n"
                         "uniform int lod;\n"
                         "uniform %s tex;\n"
@@ -221,7 +229,7 @@ generate_GLSL(enum shader_target test_stage)
                         "    size = textureSize(tex%s);\n"
                         "    gl_Position = vertex;\n"
                         "}\n",
-                        shader_version, sampler.name, size, lod_arg);
+                        shader_version, cube_map_array_extension, 
sampler.name, size, lod_arg);
                asprintf(&fs_code,
                         "#version %d\n"
                         "#define ivec1 int\n"
@@ -243,7 +251,7 @@ generate_GLSL(enum shader_target test_stage)
                         "}\n",
                         shader_version);
                asprintf(&fs_code,
-                        "#version %d\n"
+                        "#version %d\n%s"
                         "#define ivec1 int\n"
                         "uniform int lod;\n"
                         "uniform %s tex;\n"
@@ -252,7 +260,7 @@ generate_GLSL(enum shader_target test_stage)
                         "    ivec%d size = textureSize(tex%s);\n"
                         "    gl_FragColor = vec4(0.01 * size,%s 1);\n"
                         "}\n",
-                        shader_version, sampler.name, size, lod_arg,
+                        shader_version, cube_map_array_extension, 
sampler.name, size, lod_arg,
                         zeroes[3 - size]);
                break;
        default:
@@ -311,12 +319,12 @@ piglit_init(int argc, char **argv)
 
        if (test_stage == UNKNOWN || !sampler_found)
                fail_and_show_usage();
-
-       /* Not implemented yet */
-       assert(sampler.target != GL_TEXTURE_CUBE_MAP_ARRAY);
-
+               
        require_GL_features(test_stage);
 
+       if (sampler.target == GL_TEXTURE_CUBE_MAP_ARRAY)
+               cube_map_array_extension = "#extension 
GL_ARB_texture_cube_map_array : enable\n";
+
        prog = generate_GLSL(test_stage);
        if (!prog)
                piglit_report_result(PIGLIT_FAIL);
-- 
1.7.1

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

Reply via email to