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
