diff options
author | Laura Ekstrand <laura@jlekstrand.net> | 2015-02-12 16:37:38 -0800 |
---|---|---|
committer | Laura Ekstrand <laura@jlekstrand.net> | 2015-04-02 17:57:41 -0700 |
commit | 01d67cd7def18183322f68248211cd5c76b7b54b (patch) | |
tree | 2b955f0a306a977f6c69e5c46d292c1504897948 | |
parent | cddd1e0093fc651f165e76e18f0e1d06511ed7d7 (diff) |
arb_direct_state_access: Remove over-complicated getcompressedtextureimage test.
-rw-r--r-- | tests/all.py | 2 | ||||
-rw-r--r-- | tests/spec/arb_direct_state_access/CMakeLists.gl.txt | 1 | ||||
-rw-r--r-- | tests/spec/arb_direct_state_access/getcompressedtextureimage.c | 447 |
3 files changed, 0 insertions, 450 deletions
diff --git a/tests/all.py b/tests/all.py index 64e582746..68a96232b 100644 --- a/tests/all.py +++ b/tests/all.py @@ -4229,8 +4229,6 @@ with profile.group_manager( 'gettextureimage-targets') g(['arb_direct_state_access-compressedtextureimage GL_COMPRESSED_RGBA_FXT1_3DFX'], 'compressedtextureimage GL_COMPRESSED_RGBA_FXT1_3DFX') - g(['arb_direct_state_access-getcompressedtextureimage'], - 'getcompressedtextureimage') g(['arb_direct_state_access-texture-storage-multisample'], 'texture-storage-multisample') g(['arb_direct_state_access-texture-buffer'], 'texture-buffer') diff --git a/tests/spec/arb_direct_state_access/CMakeLists.gl.txt b/tests/spec/arb_direct_state_access/CMakeLists.gl.txt index ae79f8838..ed3cf2cee 100644 --- a/tests/spec/arb_direct_state_access/CMakeLists.gl.txt +++ b/tests/spec/arb_direct_state_access/CMakeLists.gl.txt @@ -40,7 +40,6 @@ piglit_add_executable (arb_direct_state_access-gettextureimage-luminance gettext piglit_add_executable (arb_direct_state_access-gettextureimage-simple gettextureimage-simple.c) piglit_add_executable (arb_direct_state_access-gettextureimage-targets gettextureimage-targets.c) piglit_add_executable (arb_direct_state_access-compressedtextureimage compressedtextureimage.c) -piglit_add_executable (arb_direct_state_access-getcompressedtextureimage getcompressedtextureimage.c) piglit_add_executable (arb_direct_state_access-texture-storage-multisample texture-storage-multisample.c) piglit_add_executable (arb_direct_state_access-texture-buffer texture-buffer.c) piglit_add_executable (arb_direct_state_access-create-samplers create-samplers.c) diff --git a/tests/spec/arb_direct_state_access/getcompressedtextureimage.c b/tests/spec/arb_direct_state_access/getcompressedtextureimage.c deleted file mode 100644 index 786d2fc02..000000000 --- a/tests/spec/arb_direct_state_access/getcompressedtextureimage.c +++ /dev/null @@ -1,447 +0,0 @@ -/* - * Copyright © 2012 Marek Olšák <maraeo@gmail.com> - * Copyright © 2014 Intel Corporation - * - * 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. - */ - -/** - * @file getcompressedtextureimage-targets.c - * - * Adapted for testing glGetCompressedTextureImage in ARB_direct_state_access - * by Laura Ekstrand <laura@jlekstrand.net>, November 2014. - */ - -#include "piglit-util-gl.h" - -PIGLIT_GL_TEST_CONFIG_BEGIN - - config.window_width = 216; - config.supports_gl_compat_version = 10; - - config.window_visual = PIGLIT_GL_VISUAL_RGBA | - PIGLIT_GL_VISUAL_DOUBLE; - -PIGLIT_GL_TEST_CONFIG_END - -#define IMAGE_WIDTH 32 -#define IMAGE_HEIGHT 32 -#define IMAGE_SIZE (IMAGE_WIDTH * IMAGE_HEIGHT * 4) -#define DISPLAY_GAP 4 - -static void -show_image(GLubyte *data, int num_layers, const char *title) -{ - GLuint name; - int i; - char junk[50]; - - if (!piglit_automatic) { - /* Create the texture handle. */ - glCreateTextures(GL_TEXTURE_2D, 1, &name); - glTextureStorage2D(name, 1, GL_RGBA8, IMAGE_WIDTH, - IMAGE_HEIGHT); - glTextureParameteri(name, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTextureParameteri(name, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glEnable(GL_TEXTURE_2D); - glBindTextureUnit(0, name); - - /* Draw the layers, separated by some space */ - glClear(GL_COLOR_BUFFER_BIT); - for (i = 0; i < num_layers; ++i) { - int x = (IMAGE_WIDTH + DISPLAY_GAP) * (i % 6); - int y = (IMAGE_HEIGHT + DISPLAY_GAP) * (i / 6); - glTextureSubImage2D(name, 0, 0, 0, - IMAGE_WIDTH, IMAGE_HEIGHT, - GL_RGBA, GL_UNSIGNED_BYTE, - data + i * IMAGE_SIZE); - piglit_draw_rect_tex(x, y, IMAGE_WIDTH, IMAGE_HEIGHT, - 0, 0, 1, 1); - } - - /* Make the title. */ - printf("****** %s ******\n", title); - - piglit_present_results(); - - /* Pause. */ - printf("Enter any char to continue.\n>>>>>>"); - scanf("%s", junk); - printf("\n"); - - glDeleteTextures(1, &name); - } -} - -static GLubyte * -make_layer_data(int num_layers) -{ - int x, y, z; - GLubyte *layer_data = - malloc(num_layers * IMAGE_SIZE * sizeof(GLubyte)); - int num_channels = IMAGE_SIZE/(IMAGE_WIDTH * IMAGE_HEIGHT); - - for (z = 0; z < num_layers; z++) { - /* Get some data, but make sure the faces are different */ - GLubyte *data = piglit_rgbw_image_ubyte(IMAGE_WIDTH, - IMAGE_HEIGHT, true); - for (y = 0; y < IMAGE_HEIGHT; ++y) { - for (x = 0; x < IMAGE_WIDTH; ++x) { - int idx = num_channels*(IMAGE_WIDTH*y + x); - data[idx+0] *= ((float) (z + 1)/ (float) num_layers); - data[idx+1] *= ((float) (z + 1)/ (float) num_layers); - data[idx+2] *= ((float) (z + 1)/ (float) num_layers); - } - } - - /* Copy in the data */ - memcpy(layer_data + IMAGE_SIZE * z, data, IMAGE_SIZE); - - free(data); - } - - /* Show the first layer of the completed layer data. */ - show_image(layer_data, num_layers, "Test Data"); - - return layer_data; -} - -static bool -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("GetCompressedTextureImage() 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]); - return false; - } - } - return true; -} - -static enum piglit_result -getTexImage(bool doPBO, GLenum target, GLubyte *data, - GLenum internalformat, int tolerance) -{ - int i; - int num_layers=1, num_faces=1, layer_size; - GLubyte *data2 = NULL; - GLubyte *dataGet; - GLuint packPBO; - bool pass = true; - GLuint name; - GLint compressed; - GLint comp_size; - - /* Upload the data. */ - switch (target) { - - /* These are all targets that can be compressed according to - * _mesa_target_can_be_compressed */ - - case GL_TEXTURE_2D: - glCreateTextures(target, 1, &name); - glTextureStorage2D(name, 1, internalformat, IMAGE_WIDTH, - IMAGE_HEIGHT); - glTextureSubImage2D(name, 0, 0, 0, IMAGE_WIDTH, IMAGE_HEIGHT, - GL_RGBA, GL_UNSIGNED_BYTE, data); - layer_size = IMAGE_SIZE; - break; - - case GL_TEXTURE_CUBE_MAP: - num_faces = 6; - glCreateTextures(target, 1, &name); - /* This is invalid. You must use 2D storage call for cube. */ - glTextureStorage3D(name, 1, internalformat, - IMAGE_WIDTH, IMAGE_HEIGHT, num_faces); - pass &= piglit_check_gl_error(GL_INVALID_ENUM); - glTextureStorage2D(name, 1, internalformat, - IMAGE_WIDTH, IMAGE_HEIGHT); - /* This is legal. */ - glTextureSubImage3D(name, 0, 0, 0, 0, IMAGE_WIDTH, - IMAGE_HEIGHT, num_faces, GL_RGBA, - GL_UNSIGNED_BYTE, data); - layer_size = IMAGE_SIZE; - break; - - case GL_TEXTURE_2D_ARRAY: - case GL_TEXTURE_CUBE_MAP_ARRAY: - num_layers = 6 * 3; - glCreateTextures(target, 1, &name); - glTextureStorage3D(name, 1, internalformat, IMAGE_WIDTH, - IMAGE_HEIGHT, num_layers); - glTextureSubImage3D(name, 0, 0, 0, 0, - IMAGE_WIDTH, IMAGE_HEIGHT, num_layers, - GL_RGBA, GL_UNSIGNED_BYTE, data); - layer_size = IMAGE_SIZE; - break; - - default: - puts("Invalid texture target."); - return PIGLIT_FAIL; - - } - - /* Make sure the driver has compressed the image. */ - glGetTextureLevelParameteriv(name, 0, GL_TEXTURE_COMPRESSED, - &compressed); - printf("\tIs the texture compressed? %s.\n", - compressed ? "yes" : "no"); - - glGetTextureLevelParameteriv(name, 0, - GL_TEXTURE_COMPRESSED_IMAGE_SIZE, - &comp_size); - /* The OpenGL 4.5 core spec - * (30.10.2014) Section 8.11 Texture Queries says: - * "For GetTextureLevelParameter* only, texture may also be a - * cube map texture object. In this case the query is always - * performed for face zero (the TEXTURE_CUBE_MAP_POSITIVE_X - * face), since there is no way to specify another face." - */ - if (target == GL_TEXTURE_CUBE_MAP) - comp_size *= num_faces; - printf("\tThe size of the texture in bytes is %d.\n", comp_size); - - /* Show the uncompressed data. */ - show_image(data, num_layers * num_faces, "Data Before Compression"); - - - /* Setup the PBO or data array to read into from - * glGetCompressedTextureImage */ - if (doPBO) { - glGenBuffers(1, &packPBO); - glBindBuffer(GL_PIXEL_PACK_BUFFER, packPBO); - /* Make the buffer big enough to hold uncompressed data. */ - glBufferData(GL_PIXEL_PACK_BUFFER, layer_size * num_faces * - num_layers * sizeof(GLubyte), - NULL, GL_STREAM_READ); - } else { - glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); - data2 = malloc(layer_size * num_faces * num_layers * - sizeof(GLubyte)); - memset(data2, 123, layer_size * num_faces * num_layers * - sizeof(GLubyte)); - } - pass = piglit_check_gl_error(GL_NO_ERROR) && pass; - assert(num_layers * num_faces * layer_size <= 18 * IMAGE_SIZE); - - - /* Download the compressed texture image. */ - if (doPBO) - glGetCompressedTextureImage(name, 0, comp_size, NULL); - else - glGetCompressedTextureImage(name, 0, comp_size, data2); - pass = piglit_check_gl_error(GL_NO_ERROR) && pass; - - if (doPBO) - dataGet = (GLubyte *) glMapBufferRange( - GL_PIXEL_PACK_BUFFER, 0, - comp_size, - GL_MAP_READ_BIT); - else - dataGet = data2; - - /* Re-upload the texture in compressed form. */ - switch (target) { - case GL_TEXTURE_2D: - glCompressedTextureSubImage2D(name, 0, 0, 0, - IMAGE_WIDTH, IMAGE_HEIGHT, - internalformat, comp_size, - dataGet); - break; - - case GL_TEXTURE_CUBE_MAP: - glCompressedTextureSubImage3D(name, 0, 0, 0, 0, - IMAGE_WIDTH, IMAGE_HEIGHT, - num_faces, - internalformat, comp_size, - dataGet); - break; - - case GL_TEXTURE_2D_ARRAY: - case GL_TEXTURE_CUBE_MAP_ARRAY: - glCompressedTextureSubImage3D(name, 0, 0, 0, 0, - IMAGE_WIDTH, IMAGE_HEIGHT, - num_layers, - internalformat, comp_size, - dataGet); - break; - } - - - /* Get the uncompressed version for comparison. */ - if (doPBO) { - glUnmapBuffer(GL_PIXEL_PACK_BUFFER); - glGetTextureImage(name, 0, GL_RGBA, GL_UNSIGNED_BYTE, - layer_size * num_layers * num_faces * sizeof(GLubyte), - NULL); - } - else { - glGetTextureImage(name, 0, GL_RGBA, GL_UNSIGNED_BYTE, - layer_size * num_layers * num_faces * sizeof(GLubyte), - data2); - } - pass = piglit_check_gl_error(GL_NO_ERROR) && pass; - if (doPBO) - dataGet = (GLubyte *) glMapBufferRange( - GL_PIXEL_PACK_BUFFER, 0, - layer_size * num_layers * - num_faces * sizeof(GLubyte), - GL_MAP_READ_BIT); - else - dataGet = data2; - - /* Examine the image after pulling it off the graphics card. */ - show_image(dataGet, num_layers * num_faces, "Data After Compression"); - - /* Do the comparison */ - for (i = 0; i < num_faces * num_layers; i++) { - pass = compare_layer(i, layer_size, tolerance, dataGet, - data + (i * layer_size)) && pass; - dataGet += layer_size; - } - - if (doPBO) { - glUnmapBuffer(GL_PIXEL_PACK_BUFFER); - glDeleteBuffers(1, &packPBO); - } - - glDeleteTextures(1, &name); - free(data2); - - return pass ? PIGLIT_PASS : PIGLIT_FAIL; -} - -struct target_and_mask { - GLenum target; - bool mask; -}; - -static struct target_and_mask targets[] = { - {GL_TEXTURE_2D, 1}, - {GL_TEXTURE_CUBE_MAP, 1}, - {GL_TEXTURE_2D_ARRAY, 1}, - {GL_TEXTURE_CUBE_MAP_ARRAY, 1}, -}; - -static void -clear_target_mask(GLenum target) -{ - int i; - for (i = 0; i < ARRAY_SIZE(targets); ++i) { - if (targets[i].target == target) { - targets[i].mask = 0; - } - } -} - -void -piglit_init(int argc, char **argv) -{ - piglit_require_extension("GL_ARB_direct_state_access"); - piglit_require_extension("GL_ARB_texture_storage"); - - if (!piglit_is_extension_supported("GL_ARB_texture_cube_map")) - clear_target_mask(GL_TEXTURE_CUBE_MAP); - if (!piglit_is_extension_supported("GL_EXT_texture_array")) { - clear_target_mask(GL_TEXTURE_2D_ARRAY); - } - if (!piglit_is_extension_supported("GL_ARB_texture_cube_map_array")) - clear_target_mask(GL_TEXTURE_CUBE_MAP_ARRAY); - - glClearColor(0.5, 0.5, 0.5, 1); - piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE); -} - -enum piglit_result -piglit_display(void) -{ - int i; - GLenum internalformat = GL_COMPRESSED_RGBA_FXT1_3DFX; - int tolerance = 8; - GLubyte *data; - enum piglit_result subtest; - enum piglit_result result = PIGLIT_PASS; - - piglit_require_extension("GL_3DFX_texture_compression_FXT1"); - - data = make_layer_data(18); - - for (i = 0; i < ARRAY_SIZE(targets); ++i) { - if (!targets[i].mask) - continue; - - printf("Testing %s into PBO\n", - piglit_get_gl_enum_name(targets[i].target)); - subtest = getTexImage(true, targets[i].target, data, - internalformat, tolerance); - piglit_report_subtest_result(subtest, "getTexImage %s PBO", - piglit_get_gl_enum_name( - targets[i].target)); - if (subtest == PIGLIT_FAIL) - result = PIGLIT_FAIL; - - printf("\n"); /* Separate tests with some white space. */ - - printf("Testing %s into client array\n", - piglit_get_gl_enum_name(targets[i].target)); - subtest = getTexImage(false, targets[i].target, data, - internalformat, tolerance); - piglit_report_subtest_result(subtest, "getTexImage %s", - piglit_get_gl_enum_name( - targets[i].target)); - if (subtest == PIGLIT_FAIL) - result = PIGLIT_FAIL; - - printf("\n\n"); /* Separate targets with some white space. */ - - if (!piglit_check_gl_error(GL_NO_ERROR)) - result = PIGLIT_FAIL; - } - - /* 1D targets can't be compressed in Mesa right now, - * but here is a trivial test for the entry point. */ - glCompressedTextureSubImage1D(250, 0, 0, 60, - internalformat, 60*4*8, - NULL); - - if (!piglit_check_gl_error(GL_INVALID_OPERATION)) /* Bad texture */ - subtest = PIGLIT_FAIL; - else - subtest = PIGLIT_PASS; - piglit_report_subtest_result(subtest, "Compressed Texture" - " Sub Image 1D"); - if (subtest == PIGLIT_FAIL) - result = PIGLIT_FAIL; - - free(data); - - return result; -} - |