---
 tests/all.tests                       |   12 ++
 tests/texturing/CMakeLists.gl.txt     |    1 +
 tests/texturing/getteximage-targets.c |  221 +++++++++++++++++++++++++++++++++
 3 files changed, 234 insertions(+)
 create mode 100644 tests/texturing/getteximage-targets.c

diff --git a/tests/all.tests b/tests/all.tests
index 9eacc85..bfd22a1 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -545,6 +545,8 @@ add_plain_test(gl11, 'texredefine')
 add_plain_test(gl11, 'texsubimage')
 add_plain_test(gl11, 'texture-al')
 add_concurrent_test(gl11, 'triangle-guardband-viewport')
+add_concurrent_test(gl11, 'getteximage-targets 1D')
+add_concurrent_test(gl11, 'getteximage-targets 2D')
 
 gl10 = Group()
 spec['!OpenGL 1.0'] = gl10
@@ -568,6 +570,7 @@ add_plain_test(gl12, 'tex3d')
 add_plain_test(gl12, 'tex3d-maxsize')
 add_plain_test(gl12, 'teximage-errors')
 add_plain_test(gl12, 'texture-packed-formats')
+add_concurrent_test(gl12, 'getteximage-targets 3D')
 
 gl13 = Group()
 spec['!OpenGL 1.3'] = gl13
@@ -1109,6 +1112,7 @@ add_shader_test_dir(arb_texture_rectangle,
 arb_texture_rectangle['copyteximage RECT'] = PlainExecTest(['copyteximage', 
'-auto', 'RECT'])
 add_concurrent_test(arb_texture_rectangle, '1-1-linear-texture')
 add_plain_test(arb_texture_rectangle, 'texrect-many')
+add_concurrent_test(arb_texture_rectangle, 'getteximage-targets RECT')
 
 arb_texture_storage = Group()
 spec['ARB_texture_storage'] = arb_texture_storage
@@ -1623,6 +1627,8 @@ ext_texture_array['copyteximage 2D_ARRAY'] = 
PlainExecTest(['copyteximage', '-au
 add_plain_test(ext_texture_array, 'fbo-array')
 add_plain_test(ext_texture_array, 'fbo-depth-array')
 add_plain_test(ext_texture_array, 'array-texture')
+add_concurrent_test(ext_texture_array, 'getteximage-targets 1D_ARRAY')
+add_concurrent_test(ext_texture_array, 'getteximage-targets 2D_ARRAY')
 
 arb_texture_cube_map = Group()
 spec['ARB_texture_cube_map'] = arb_texture_cube_map
@@ -1633,6 +1639,7 @@ arb_texture_cube_map['cubemap npot'] = 
PlainExecTest(['cubemap', '-auto', 'npot'
 add_plain_test(arb_texture_cube_map, 'cubemap-shader')
 arb_texture_cube_map['cubemap-shader lod'] = PlainExecTest(['cubemap-shader', 
'-auto', 'lod'])
 arb_texture_cube_map['cubemap-shader bias'] = PlainExecTest(['cubemap-shader', 
'-auto', 'bias'])
+add_concurrent_test(arb_texture_cube_map, 'getteximage-targets CUBE')
 
 arb_texture_cube_map_array = Group()
 spec['ARB_texture_cube_map_array'] = arb_texture_cube_map_array
@@ -1642,6 +1649,7 @@ add_plain_test(arb_texture_cube_map_array, 
'arb_texture_cube_map_array-cubemap')
 add_plain_test(arb_texture_cube_map_array, 
'arb_texture_cube_map_array-cubemap-lod')
 add_plain_test(arb_texture_cube_map_array, 
'arb_texture_cube_map_array-fbo-cubemap-array')
 add_plain_test(arb_texture_cube_map_array, 
'arb_texture_cube_map_array-sampler-cube-array-shadow')
+add_concurrent_test(arb_texture_cube_map_array, 'getteximage-targets 
CUBE_ARRAY')
 textureSize_samplers_atcma = ['samplerCubeArray', 'isamplerCubeArray', 
'usamplerCubeArray', 'samplerCubeArrayShadow' ];
 
 import_glsl_parser_tests(arb_texture_cube_map_array,
@@ -1693,6 +1701,10 @@ add_plain_test(ext_texture_compression_s3tc, 
'gen-compressed-teximage')
 add_concurrent_test(ext_texture_compression_s3tc, 's3tc-errors')
 add_plain_test(ext_texture_compression_s3tc, 's3tc-teximage')
 add_plain_test(ext_texture_compression_s3tc, 's3tc-texsubimage')
+add_concurrent_test(ext_texture_compression_s3tc, 'getteximage-targets S3TC 
2D')
+add_concurrent_test(ext_texture_compression_s3tc, 'getteximage-targets S3TC 
2D_ARRAY')
+add_concurrent_test(ext_texture_compression_s3tc, 'getteximage-targets S3TC 
CUBE')
+add_concurrent_test(ext_texture_compression_s3tc, 'getteximage-targets S3TC 
CUBE_ARRAY')
 
 ati_texture_compression_3dc = Group()
 spec['ATI_texture_compression_3dc'] = ati_texture_compression_3dc
diff --git a/tests/texturing/CMakeLists.gl.txt 
b/tests/texturing/CMakeLists.gl.txt
index 9a9ac62..c9e5d11 100644
--- a/tests/texturing/CMakeLists.gl.txt
+++ b/tests/texturing/CMakeLists.gl.txt
@@ -30,6 +30,7 @@ piglit_add_executable (gen-texsubimage gen-texsubimage.c)
 piglit_add_executable (getteximage-formats getteximage-formats.c)
 piglit_add_executable (getteximage-simple getteximage-simple.c)
 piglit_add_executable (getteximage-luminance getteximage-luminance.c)
+piglit_add_executable (getteximage-targets getteximage-targets.c)
 piglit_add_executable (incomplete-texture incomplete-texture.c)
 piglit_add_executable (fragment-and-vertex-texturing 
fragment-and-vertex-texturing.c)
 piglit_add_executable (levelclamp levelclamp.c)
diff --git a/tests/texturing/getteximage-targets.c 
b/tests/texturing/getteximage-targets.c
new file mode 100644
index 0000000..09a8e33
--- /dev/null
+++ b/tests/texturing/getteximage-targets.c
@@ -0,0 +1,221 @@
+/*
+ * Copyright © 2012 Marek Olšák <mar...@gmail.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#include "piglit-util-gl-common.h"
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+       config.supports_gl_compat_version = 10;
+
+       config.window_visual = PIGLIT_GL_VISUAL_RGBA | PIGLIT_GL_VISUAL_ALPHA |
+                              PIGLIT_GL_VISUAL_DOUBLE;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+enum piglit_result
+piglit_display(void)
+{
+       /* UNREACHABLE */
+       return PIGLIT_FAIL;
+}
+
+#define IMAGE_WIDTH 32
+#define IMAGE_HEIGHT 32
+#define IMAGE_SIZE (IMAGE_WIDTH*IMAGE_HEIGHT*4)
+
+static void init_layer_data(GLubyte *layer_data, int num_layers)
+{
+       int x, y, z, i, j;
+
+       for (z = 0; z < num_layers; z++) {
+               GLubyte *data = layer_data + IMAGE_SIZE*z;
+
+               for (x = 0; x < IMAGE_WIDTH; x += 4) {
+                       for (y = 0; y < IMAGE_HEIGHT; y += 4) {
+                               int r = (x+1) * 255 / (IMAGE_WIDTH - 1);
+                               int g = (y+1) * 255 / (IMAGE_HEIGHT - 1);
+                               int b = (z+1) * 255 / (num_layers-1);
+                               int a = x ^ y ^ z;
+
+                               /* each 4x4 block constains only one color (for 
S3TC) */
+                               for (i = 0; i < 4; i++) {
+                                       for (j = 0; j < 4; j++) {
+                                               data[((y+j)*IMAGE_WIDTH + 
x+i)*4 + 0] = r;
+                                               data[((y+j)*IMAGE_WIDTH + 
x+i)*4 + 1] = g;
+                                               data[((y+j)*IMAGE_WIDTH + 
x+i)*4 + 2] = b;
+                                               data[((y+j)*IMAGE_WIDTH + 
x+i)*4 + 3] = a;
+                                       }
+                               }
+                       }
+               }
+       }
+}
+
+static void compare_layer(int layer, int num_elements, int tolerance,
+                         GLubyte *data, GLubyte *expected)
+{
+       int i;
+
+       for (i = 0; i < num_elements; ++i) {
+               if (abs((int)data[i] - (int)expected[i]) > tolerance) {
+                       printf("GetTexImage() returns incorrect data in byte %i 
for layer %i\n",
+                              i, layer);
+                       printf("    corresponding to (%i,%i), channel %i\n",
+                              (i / 4) / IMAGE_WIDTH, (i / 4) % IMAGE_HEIGHT, i 
% 4);
+                       printf("    expected: %i\n", expected[i]);
+                       printf("    got: %i\n", data[i]);
+                       piglit_report_result(PIGLIT_FAIL);
+               }
+       }
+}
+
+void piglit_init(int argc, char **argv)
+{
+       int i, tolerance = 0, num_layers;
+       GLenum target = GL_TEXTURE_2D;
+       GLenum internalformat = GL_RGBA8;
+       GLubyte data[18][IMAGE_SIZE], data2[18][IMAGE_SIZE];
+
+       for (i = 1; i < argc; i++) {
+               if (strcmp(argv[i], "1D") == 0) {
+                       target = GL_TEXTURE_1D;
+               }
+               if (strcmp(argv[i], "3D") == 0) {
+                       target = GL_TEXTURE_3D;
+                       piglit_require_gl_version(12);
+               }
+               if (strcmp(argv[i], "RECT") == 0) {
+                       target = GL_TEXTURE_RECTANGLE;
+                       piglit_require_extension("GL_ARB_texture_rectangle");
+               }
+               if (strcmp(argv[i], "CUBE") == 0) {
+                       target = GL_TEXTURE_CUBE_MAP;
+                       piglit_require_extension("GL_ARB_texture_cube_map");
+               }
+               if (strcmp(argv[i], "1D_ARRAY") == 0) {
+                       target = GL_TEXTURE_1D_ARRAY;
+                       piglit_require_extension("GL_EXT_texture_array");
+               }
+               if (strcmp(argv[i], "2D_ARRAY") == 0) {
+                       target = GL_TEXTURE_2D_ARRAY;
+                       piglit_require_extension("GL_EXT_texture_array");
+               }
+               if (strcmp(argv[i], "CUBE_ARRAY") == 0) {
+                       target = GL_TEXTURE_CUBE_MAP_ARRAY;
+                       
piglit_require_extension("GL_ARB_texture_cube_map_array");
+               }
+               if (strcmp(argv[i], "S3TC") == 0) {
+                       internalformat = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
+                       tolerance = 8;
+                       
piglit_require_extension("GL_EXT_texture_compression_s3tc");
+                       puts("Testing S3TC.");
+               }
+       }
+
+       init_layer_data(data[0], 18);
+       memset(data2, 123, sizeof(data2));
+
+       printf("Testing %s\n", piglit_get_gl_enum_name(target));
+
+       switch (target) {
+       case GL_TEXTURE_1D:
+               glTexImage1D(GL_TEXTURE_1D, 0, internalformat, IMAGE_WIDTH, 0,
+                            GL_RGBA, GL_UNSIGNED_BYTE, data);
+               glGetTexImage(GL_TEXTURE_1D, 0, GL_RGBA, GL_UNSIGNED_BYTE, 
data2);
+               piglit_check_gl_error(GL_NO_ERROR);
+               compare_layer(0, 128, tolerance, data2[0], data[0]);
+               piglit_report_result(PIGLIT_PASS);
+
+       case GL_TEXTURE_2D:
+       case GL_TEXTURE_RECTANGLE:
+               glTexImage2D(target, 0, internalformat, IMAGE_WIDTH, 
IMAGE_HEIGHT, 0,
+                            GL_RGBA, GL_UNSIGNED_BYTE, data);
+               glGetTexImage(target, 0, GL_RGBA, GL_UNSIGNED_BYTE, data2);
+               piglit_check_gl_error(GL_NO_ERROR);
+               compare_layer(0, IMAGE_SIZE, tolerance, data2[0], data[0]);
+               piglit_report_result(PIGLIT_PASS);
+
+       case GL_TEXTURE_3D:
+               num_layers = 16;
+               glTexImage3D(GL_TEXTURE_3D, 0, internalformat,
+                            IMAGE_WIDTH, IMAGE_HEIGHT, num_layers, 0, GL_RGBA,
+                            GL_UNSIGNED_BYTE, data);
+               glGetTexImage(GL_TEXTURE_3D, 0,
+                             GL_RGBA, GL_UNSIGNED_BYTE, data2);
+               piglit_check_gl_error(GL_NO_ERROR);
+               for (i = 0; i < num_layers; i++) {
+                       compare_layer(i, IMAGE_SIZE, tolerance, data2[i], 
data[i]);
+               }
+               piglit_report_result(PIGLIT_PASS);
+
+       case GL_TEXTURE_CUBE_MAP:
+               for (i = 0; i < 6; i++) {
+                       glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0,
+                                    internalformat, IMAGE_WIDTH, IMAGE_HEIGHT, 
0, GL_RGBA,
+                                    GL_UNSIGNED_BYTE, data[i]);
+               }
+               for (i = 0; i < 6; i++) {
+                       glGetTexImage(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0,
+                                     GL_RGBA, GL_UNSIGNED_BYTE, data2[i]);
+                       piglit_check_gl_error(GL_NO_ERROR);
+                       compare_layer(i, IMAGE_SIZE, tolerance, data2[i], 
data[i]);
+               }
+               piglit_report_result(PIGLIT_PASS);
+
+       case GL_TEXTURE_1D_ARRAY:
+               num_layers = 7;
+               glTexImage2D(GL_TEXTURE_1D_ARRAY, 0, internalformat, 
IMAGE_WIDTH, num_layers, 0,
+                            GL_RGBA, GL_UNSIGNED_BYTE, data);
+               glGetTexImage(GL_TEXTURE_1D_ARRAY, 0, GL_RGBA, 
GL_UNSIGNED_BYTE, data2);
+               piglit_check_gl_error(GL_NO_ERROR);
+               compare_layer(0, IMAGE_WIDTH*4*num_layers, tolerance, data2[0], 
data[0]);
+               piglit_report_result(PIGLIT_PASS);
+
+       case GL_TEXTURE_2D_ARRAY:
+               num_layers = 7;
+               glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, internalformat,
+                            IMAGE_WIDTH, IMAGE_HEIGHT, num_layers, 0, GL_RGBA, 
GL_UNSIGNED_BYTE, data);
+               glGetTexImage(GL_TEXTURE_2D_ARRAY, 0,
+                             GL_RGBA, GL_UNSIGNED_BYTE, data2);
+               piglit_check_gl_error(GL_NO_ERROR);
+               for (i = 0; i < num_layers; i++) {
+                       compare_layer(i, IMAGE_SIZE, tolerance, data2[i], 
data[i]);
+               }
+               piglit_report_result(PIGLIT_PASS);
+
+       case GL_TEXTURE_CUBE_MAP_ARRAY:
+               num_layers = 6*3;
+               glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, internalformat,
+                            IMAGE_WIDTH, IMAGE_HEIGHT, num_layers, 0, GL_RGBA, 
GL_UNSIGNED_BYTE, data);
+               glGetTexImage(GL_TEXTURE_CUBE_MAP_ARRAY, 0,
+                             GL_RGBA, GL_UNSIGNED_BYTE, data2);
+               piglit_check_gl_error(GL_NO_ERROR);
+               for (i = 0; i < num_layers; i++) {
+                       compare_layer(i, IMAGE_SIZE, tolerance, data2[i], 
data[i]);
+               }
+               piglit_report_result(PIGLIT_PASS);
+       }
+
+       puts("Invalid texture target.");
+       piglit_report_result(PIGLIT_FAIL);
+}
-- 
1.7.10.4

_______________________________________________
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to