[Piglit] [PATCH 1/7] textureSize: add GL_ARB_texture_cube_map_array support.
Dave Airlie
airlied at gmail.com
Wed Sep 5 20:34:46 PDT 2012
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 <airlied at redhat.com>
---
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
More information about the Piglit
mailing list