On 30/06/17 14:49, Timothy Arceri wrote:
In the bug for porting glean tests to piglit this is
listed as "covered by Piglit" "Check & Remove".

Since that list was made we also now have a public CTS.

This is another of the extra slow glean tests. Can we
assume this is all covered and remove?

For the record, a quick grep shows that all the extensions used in this test are covered in piglit at least in some form.


https://bugs.freedesktop.org/show_bug.cgi?id=65676
---
  tests/all.py                  |    1 -
  tests/glean/CMakeLists.gl.txt |    1 -
  tests/glean/tpixelformats.cpp | 1675 -----------------------------------------
  tests/glean/tpixelformats.h   |   98 ---
  4 files changed, 1775 deletions(-)
  delete mode 100644 tests/glean/tpixelformats.cpp
  delete mode 100644 tests/glean/tpixelformats.h

diff --git a/tests/all.py b/tests/all.py
index 4d19da1..c5d0672 100644
--- a/tests/all.py
+++ b/tests/all.py
@@ -292,21 +292,20 @@ for basedir in [os.path.join(TESTS_DIR, 'apitrace', 
'traces')]:
  MSAA_SAMPLE_COUNTS = ['2', '4', '6', '8', '16', '32']
with profile.test_list.group_manager(GleanTest, 'glean') as g:
      g('basic')
      g('api2')
      g('makeCurrent')
      g('bufferObject')
      g('depthStencil')
      g('fbo')
      g('getString')
-    g('pixelFormats')
      g('pointSprite')
      # exactRGBA is not included intentionally, because it's too strict and
      # the equivalent functionality is covered by other tests
      g('shaderAPI')
      g('texCombine')
      g('texCube')
      g('texEnv')
      g('texgen')
      g('texCombine4')
      g('texture_srgb')
diff --git a/tests/glean/CMakeLists.gl.txt b/tests/glean/CMakeLists.gl.txt
index 9bbf324..7a9ccb0 100644
--- a/tests/glean/CMakeLists.gl.txt
+++ b/tests/glean/CMakeLists.gl.txt
@@ -27,21 +27,20 @@ piglit_add_executable (glean
        options.cpp
        rc.cpp
        tapi2.cpp
        tbasic.cpp
        tbinding.cpp
        test.cpp
        tfbo.cpp
        tfragprog1.cpp
        tglsl1.cpp
        tmultitest.cpp
-       tpixelformats.cpp
        tpointsprite.cpp
        tshaderapi.cpp
        ttexcombine.cpp
        ttexcombine4.cpp
        ttexcube.cpp
        ttexenv.cpp
        ttexgen.cpp
        ttexture_srgb.cpp
        ttexunits.cpp
        tvertarraybgra.cpp
diff --git a/tests/glean/tpixelformats.cpp b/tests/glean/tpixelformats.cpp
deleted file mode 100644
index d9818dc..0000000
--- a/tests/glean/tpixelformats.cpp
+++ /dev/null
@@ -1,1675 +0,0 @@
-// BEGIN_COPYRIGHT -*- glean -*-
-//
-// Copyright (C) 1999  Allen Akin   All Rights Reserved.
-//
-// 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 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 ALLEN AKIN 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.
-//
-// END_COPYRIGHT
-
-
-#include <stdlib.h>
-#include <cassert>
-#include <cmath>
-#include "tpixelformats.h"
-#include "../util/rgb9e5.h"
-#include "piglit-util-gl.h"
-
-
-// Set to 1 to help debug test failures:
-// Also, when a test failure is found, rearrange the order of the
-// formats, types, internformats below so the failure case comes first.
-#define DEBUG 0
-
-
-// just for extra debugging
-// Maybe add fragment program path as a 3rd envMode (below) someday.
-#define USE_FRAG_PROG 0
-
-#define abort() do { printf("%s:%i\n", __FUNCTION__, __LINE__); abort(); } 
while (0)
-
-namespace GLEAN {
-
-
-struct NameTokenComps {
-       const char *Name;
-       GLenum Token;
-       GLuint Components;
-};
-
-
-static const NameTokenComps Types[] =
-{
-       { "GL_UNSIGNED_BYTE", GL_UNSIGNED_BYTE, 0 },
-       { "GL_BYTE", GL_BYTE, 0 },
-       { "GL_UNSIGNED_INT", GL_UNSIGNED_INT, 0 },
-       { "GL_SHORT", GL_SHORT, 0 },
-       { "GL_UNSIGNED_SHORT", GL_UNSIGNED_SHORT, 0 },
-       { "GL_INT", GL_INT, 0 },
-       { "GL_FLOAT", GL_FLOAT, 0 },
-       { "GL_HALF_FLOAT_ARB", GL_HALF_FLOAT_ARB, 0 },
-
-       { "GL_UNSIGNED_INT_8_8_8_8", GL_UNSIGNED_INT_8_8_8_8, 4 },
-       { "GL_UNSIGNED_INT_8_8_8_8_REV", GL_UNSIGNED_INT_8_8_8_8_REV, 4 },
-       { "GL_UNSIGNED_INT_10_10_10_2", GL_UNSIGNED_INT_10_10_10_2, 4 },
-       { "GL_UNSIGNED_INT_2_10_10_10_REV", GL_UNSIGNED_INT_2_10_10_10_REV, 4 },
-       { "GL_UNSIGNED_SHORT_5_5_5_1", GL_UNSIGNED_SHORT_5_5_5_1, 4 },
-       { "GL_UNSIGNED_SHORT_1_5_5_5_REV", GL_UNSIGNED_SHORT_1_5_5_5_REV, 4 },
-       { "GL_UNSIGNED_SHORT_4_4_4_4", GL_UNSIGNED_SHORT_4_4_4_4, 4 },
-       { "GL_UNSIGNED_SHORT_4_4_4_4_REV", GL_UNSIGNED_SHORT_4_4_4_4_REV, 4 },
-       { "GL_UNSIGNED_SHORT_5_6_5", GL_UNSIGNED_SHORT_5_6_5, 3 },
-       { "GL_UNSIGNED_SHORT_5_6_5_REV", GL_UNSIGNED_SHORT_5_6_5_REV, 3 },
-       { "GL_UNSIGNED_BYTE_3_3_2", GL_UNSIGNED_BYTE_3_3_2, 3 },
-       { "GL_UNSIGNED_BYTE_2_3_3_REV", GL_UNSIGNED_BYTE_2_3_3_REV, 3 },
-
-       { "GL_UNSIGNED_INT_5_9_9_9_REV", GL_UNSIGNED_INT_5_9_9_9_REV, 3 }
-};
-
-#define NUM_TYPES (sizeof(Types) / sizeof(Types[0]))
-
-
-static const NameTokenComps Formats[] =
-{
-       { "GL_RGBA", GL_RGBA, 4 },
-       { "GL_BGRA", GL_BGRA, 4 },
-       { "GL_RGB", GL_RGB, 3 },
-       { "GL_BGR", GL_BGR, 3 },
-       { "GL_RED", GL_RED, 1 },
-       { "GL_GREEN", GL_GREEN, 1 },
-       { "GL_BLUE", GL_BLUE, 1 },
-       { "GL_ALPHA", GL_ALPHA, 1 },
-       { "GL_LUMINANCE", GL_LUMINANCE, 1 },
-       { "GL_LUMINANCE_ALPHA", GL_LUMINANCE_ALPHA, 2 },
-       { "GL_ABGR_EXT", GL_ABGR_EXT, 4 },
-       { "GL_RG", GL_RG, 2 }
-};
-
-#define NUM_FORMATS (sizeof(Formats) / sizeof(Formats[0]))
-
-
-static const NameTokenComps InternalFormats[] =
-{
-       { "glDrawPixels", 0, 4 },  // special case for glDrawPixels
-
-       { "4", 4, 4 },
-       { "GL_RGBA", GL_RGBA, 4 },
-       { "GL_RGBA2", GL_RGBA2, 4 },
-       { "GL_RGBA4", GL_RGBA4, 4 },
-       { "GL_RGB5_A1", GL_RGB5_A1, 4 },
-       { "GL_RGBA8", GL_RGBA8, 4 },
-       { "GL_RGB10_A2", GL_RGB10_A2, 4 },
-       { "GL_RGBA12", GL_RGBA12, 4 },
-       { "GL_RGBA16", GL_RGBA16, 4 },
-       { "GL_SRGB_ALPHA_EXT", GL_SRGB_ALPHA_EXT, 4 },
-       { "GL_SRGB8_ALPHA8_EXT", GL_SRGB8_ALPHA8_EXT, 4 },
-
-       { "3", 3, 3 },
-       { "GL_RGB", GL_RGB, 3 },
-       { "GL_R3_G3_B2", GL_R3_G3_B2, 3 },
-       { "GL_RGB4", GL_RGB4, 3 },
-       { "GL_RGB5", GL_RGB5, 3 },
-       { "GL_RGB8", GL_RGB8, 3 },
-       { "GL_RGB10", GL_RGB10, 3 },
-       { "GL_RGB12", GL_RGB12, 3 },
-       { "GL_RGB16", GL_RGB16, 3 },
-       { "GL_SRGB_EXT", GL_SRGB_EXT, 3 },
-       { "GL_SRGB8_EXT", GL_SRGB8_EXT, 3 },
-
-       { "2", 2, 2 },
-       { "GL_LUMINANCE_ALPHA", GL_LUMINANCE_ALPHA, 2 },
-       { "GL_LUMINANCE4_ALPHA4", GL_LUMINANCE4_ALPHA4, 1 },
-       { "GL_LUMINANCE6_ALPHA2", GL_LUMINANCE6_ALPHA2, 1 },
-       { "GL_LUMINANCE8_ALPHA8", GL_LUMINANCE8_ALPHA8, 1 },
-       { "GL_LUMINANCE12_ALPHA4", GL_LUMINANCE12_ALPHA4, 1 },
-       { "GL_LUMINANCE12_ALPHA12", GL_LUMINANCE12_ALPHA12, 1 },
-       { "GL_LUMINANCE16_ALPHA16", GL_LUMINANCE16_ALPHA16, 1 },
-       { "GL_SLUMINANCE_ALPHA_EXT", GL_SLUMINANCE_ALPHA_EXT, 3 },
-       { "GL_SLUMINANCE8_ALPHA8_EXT", GL_SLUMINANCE8_ALPHA8_EXT, 3 },
-
-       { "1", 1, 1 },
-       { "GL_LUMINANCE", GL_LUMINANCE, 1 },
-       { "GL_LUMINANCE4", GL_LUMINANCE4, 1 },
-       { "GL_LUMINANCE8", GL_LUMINANCE8, 1 },
-       { "GL_LUMINANCE12", GL_LUMINANCE12, 1 },
-       { "GL_LUMINANCE16", GL_LUMINANCE16, 1 },
-       { "GL_SLUMINANCE_EXT", GL_SLUMINANCE_EXT, 3 },
-       { "GL_SLUMINANCE8_EXT", GL_SLUMINANCE8_EXT, 3 },
-
-       { "GL_ALPHA", GL_ALPHA, 1 },
-       { "GL_ALPHA4", GL_ALPHA4, 1 },
-       { "GL_ALPHA8", GL_ALPHA8, 1 },
-       { "GL_ALPHA12", GL_ALPHA12, 1 },
-       { "GL_ALPHA16", GL_ALPHA16, 1 },
-
-       { "GL_INTENSITY", GL_INTENSITY, 1 },
-       { "GL_INTENSITY4", GL_INTENSITY4, 1 },
-       { "GL_INTENSITY8", GL_INTENSITY8, 1 },
-       { "GL_INTENSITY12", GL_INTENSITY12, 1 },
-       { "GL_INTENSITY16", GL_INTENSITY16, 1 },
-
-       { "GL_RED", GL_RED, 1 },
-       { "GL_RG", GL_RG, 2 },
-       { "GL_R8", GL_R8, 1 },
-       { "GL_RG8", GL_RG8, 2 },
-       { "GL_R16", GL_R16, 1},
-       { "GL_RG16", GL_RG16, 2 },
-       { "GL_R16F", GL_R16F, 1 },
-       { "GL_RG16F", GL_RG16F, 2 },
-       { "GL_R32F", GL_R32F, 1},
-       { "GL_RG32F", GL_RG32F, 2 },
-
-       { "GL_RED_SNORM", GL_RED_SNORM, 1 },
-       { "GL_RG_SNORM", GL_RG_SNORM, 2 },
-       { "GL_RGB_SNORM", GL_RGB_SNORM, 3 },
-       { "GL_RGBA_SNORM", GL_RGBA_SNORM, 4 },
-       { "GL_ALPHA_SNORM", GL_ALPHA_SNORM, 1 },
-       { "GL_LUMINANCE_SNORM", GL_LUMINANCE_SNORM, 1 },
-       { "GL_LUMINANCE_ALPHA_SNORM", GL_LUMINANCE_ALPHA_SNORM, 2 },
-       { "GL_INTENSITY_SNORM", GL_INTENSITY_SNORM, 1 },
-
-       { "GL_R8_SNORM", GL_R8_SNORM, 1 },
-       { "GL_RG8_SNORM", GL_RG8_SNORM, 2 },
-       { "GL_RGB8_SNORM", GL_RGB8_SNORM, 3 },
-       { "GL_RGBA8_SNORM", GL_RGBA8_SNORM, 4 },
-       { "GL_ALPHA8_SNORM", GL_ALPHA8_SNORM, 1 },
-       { "GL_LUMINANCE8_SNORM", GL_LUMINANCE8_SNORM, 1 },
-       { "GL_LUMINANCE8_ALPHA8_SNORM", GL_LUMINANCE8_ALPHA8_SNORM, 2 },
-       { "GL_INTENSITY8_SNORM", GL_INTENSITY8_SNORM, 1 },
-
-       { "GL_R16_SNORM", GL_R16_SNORM, 1 },
-       { "GL_RG16_SNORM", GL_RG16_SNORM, 2 },
-       { "GL_RGB16_SNORM", GL_RGB16_SNORM, 3 },
-       { "GL_RGBA16_SNORM", GL_RGBA16_SNORM, 4 },
-       { "GL_ALPHA16_SNORM", GL_ALPHA16_SNORM, 1 },
-       { "GL_LUMINANCE16_SNORM", GL_LUMINANCE16_SNORM, 1 },
-       { "GL_LUMINANCE16_ALPHA16_SNORM", GL_LUMINANCE16_ALPHA16_SNORM, 2 },
-       { "GL_INTENSITY16_SNORM", GL_INTENSITY16_SNORM, 1 },
-
-       { "GL_RGB9_E5", GL_RGB9_E5, 3 }
-
-       // XXX maybe add compressed formats too...
-};
-
-#define NUM_INT_FORMATS (sizeof(InternalFormats) / sizeof(InternalFormats[0]))
-
-
-static const char *EnvModes[] = {
-       "GL_REPLACE",
-       "GL_COMBINE_ARB"
-};
-
-
-// Return four bitmasks indicating which bits correspond to the
-// 1st, 2nd, 3rd and 4th components in a packed datatype.
-// Set all masks to zero for non-packed types.
-static void
-ComponentMasks(GLenum datatype, GLuint masks[4])
-{
-       switch (datatype) {
-       case GL_UNSIGNED_BYTE:
-       case GL_BYTE:
-       case GL_UNSIGNED_SHORT:
-       case GL_SHORT:
-       case GL_UNSIGNED_INT:
-       case GL_INT:
-       case GL_FLOAT:
-       case GL_HALF_FLOAT_ARB:
-       case GL_UNSIGNED_INT_5_9_9_9_REV: /* special case, handled separately */
-               masks[0] =
-               masks[1] =
-               masks[2] =
-               masks[3] = 0x0;
-               break;
-       case GL_UNSIGNED_INT_8_8_8_8:
-               masks[0] = 0xff000000;
-               masks[1] = 0x00ff0000;
-               masks[2] = 0x0000ff00;
-               masks[3] = 0x000000ff;
-               break;
-       case GL_UNSIGNED_INT_8_8_8_8_REV:
-               masks[0] = 0x000000ff;
-               masks[1] = 0x0000ff00;
-               masks[2] = 0x00ff0000;
-               masks[3] = 0xff000000;
-               break;
-       case GL_UNSIGNED_INT_10_10_10_2:
-               masks[0] = 0xffc00000;
-               masks[1] = 0x003ff000;
-               masks[2] = 0x00000ffc;
-               masks[3] = 0x00000003;
-               break;
-       case GL_UNSIGNED_INT_2_10_10_10_REV:
-               masks[0] = 0x000003ff;
-               masks[1] = 0x000ffc00;
-               masks[2] = 0x3ff00000;
-               masks[3] = 0xc0000000;
-               break;
-       case GL_UNSIGNED_SHORT_5_5_5_1:
-               masks[0] = 0xf800;
-               masks[1] = 0x07c0;
-               masks[2] = 0x003e;
-               masks[3] = 0x0001;
-               break;
-       case GL_UNSIGNED_SHORT_1_5_5_5_REV:
-               masks[0] = 0x001f;
-               masks[1] = 0x03e0;
-               masks[2] = 0x7c00;
-               masks[3] = 0x8000;
-               break;
-       case GL_UNSIGNED_SHORT_4_4_4_4:
-               masks[0] = 0xf000;
-               masks[1] = 0x0f00;
-               masks[2] = 0x00f0;
-               masks[3] = 0x000f;
-               break;
-       case GL_UNSIGNED_SHORT_4_4_4_4_REV:
-               masks[0] = 0x000f;
-               masks[1] = 0x00f0;
-               masks[2] = 0x0f00;
-               masks[3] = 0xf000;
-               break;
-       case GL_UNSIGNED_SHORT_5_6_5:
-               masks[0] = 0xf800;
-               masks[1] = 0x07e0;
-               masks[2] = 0x001f;
-               masks[3] = 0;
-               break;
-       case GL_UNSIGNED_SHORT_5_6_5_REV:
-               masks[0] = 0x001f;
-               masks[1] = 0x07e0;
-               masks[2] = 0xf800;
-               masks[3] = 0;
-               break;
-       case GL_UNSIGNED_BYTE_3_3_2:
-               masks[0] = 0xe0;
-               masks[1] = 0x1c;
-               masks[2] = 0x03;
-               masks[3] = 0;
-               break;
-       case GL_UNSIGNED_BYTE_2_3_3_REV:
-               masks[0] = 0x07;
-               masks[1] = 0x38;
-               masks[2] = 0xc0;
-               masks[3] = 0;
-               break;
-       default:
-               abort();
-       }
-}
-
-
-// Return four values indicating the ordering of the Red, Green, Blue and
-// Alpha components for the given image format.
-// For example: GL_BGRA = {2, 1, 0, 3}.
-static void
-ComponentPositions(GLenum format, GLint pos[4])
-{
-       switch (format) {
-       case GL_RGBA:
-               pos[0] = 0;
-               pos[1] = 1;
-               pos[2] = 2;
-               pos[3] = 3;
-               break;
-       case GL_BGRA:
-               pos[0] = 2;
-               pos[1] = 1;
-               pos[2] = 0;
-               pos[3] = 3;
-               break;
-       case GL_RGB:
-               pos[0] = 0;
-               pos[1] = 1;
-               pos[2] = 2;
-               pos[3] = -1;
-               break;
-       case GL_BGR:
-               pos[0] = 2;
-               pos[1] = 1;
-               pos[2] = 0;
-               pos[3] = -1;
-               break;
-       case GL_LUMINANCE:
-               pos[0] = 0;
-               pos[1] = -1;
-               pos[2] = -1;
-               pos[3] = -1;
-               break;
-       case GL_LUMINANCE_ALPHA:
-               pos[0] = 0;
-               pos[1] = -1;
-               pos[2] = -1;
-               pos[3] = 1;
-               break;
-       case GL_RED:
-               pos[0] = 0;
-               pos[1] = -1;
-               pos[2] = -1;
-               pos[3] = -1;
-               break;
-       case GL_GREEN:
-               pos[0] = -1;
-               pos[1] = 0;
-               pos[2] = -1;
-               pos[3] = -1;
-               break;
-       case GL_BLUE:
-               pos[0] = -1;
-               pos[1] = -1;
-               pos[2] = 0;
-               pos[3] = -1;
-               break;
-       case GL_ALPHA:
-               pos[0] = -1;
-               pos[1] = -1;
-               pos[2] = -1;
-               pos[3] = 0;
-               break;
-       case GL_ABGR_EXT:
-               pos[0] = 3;
-               pos[1] = 2;
-               pos[2] = 1;
-               pos[3] = 0;
-               break;
-       case GL_RG:
-               pos[0] = 0;
-               pos[1] = 1;
-               pos[2] = -1;
-               pos[3] = -1;
-               break;
-       default:
-               abort();
-       }
-}
-
-
-// Given a texture internal format, return the corresponding base format.
-static GLenum
-BaseTextureFormat(GLint intFormat)
-{
-       switch (intFormat) {
-       case 0:
-               return 0;  // for glDrawPixels
-       case GL_ALPHA:
-       case GL_ALPHA4:
-       case GL_ALPHA8:
-       case GL_ALPHA12:
-       case GL_ALPHA16:
-       case GL_ALPHA_SNORM:
-       case GL_ALPHA8_SNORM:
-       case GL_ALPHA16_SNORM:
-               return GL_ALPHA;
-       case 1:
-       case GL_LUMINANCE:
-       case GL_LUMINANCE4:
-       case GL_LUMINANCE8:
-       case GL_LUMINANCE12:
-       case GL_LUMINANCE16:
-       case GL_LUMINANCE_SNORM:
-       case GL_LUMINANCE8_SNORM:
-       case GL_LUMINANCE16_SNORM:
-               return GL_LUMINANCE;
-       case 2:
-       case GL_LUMINANCE_ALPHA:
-       case GL_LUMINANCE4_ALPHA4:
-       case GL_LUMINANCE6_ALPHA2:
-       case GL_LUMINANCE8_ALPHA8:
-       case GL_LUMINANCE12_ALPHA4:
-       case GL_LUMINANCE12_ALPHA12:
-       case GL_LUMINANCE16_ALPHA16:
-       case GL_LUMINANCE_ALPHA_SNORM:
-       case GL_LUMINANCE8_ALPHA8_SNORM:
-       case GL_LUMINANCE16_ALPHA16_SNORM:
-               return GL_LUMINANCE_ALPHA;
-       case GL_INTENSITY:
-       case GL_INTENSITY4:
-       case GL_INTENSITY8:
-       case GL_INTENSITY12:
-       case GL_INTENSITY16:
-       case GL_INTENSITY_SNORM:
-       case GL_INTENSITY8_SNORM:
-       case GL_INTENSITY16_SNORM:
-               return GL_INTENSITY;
-
-       case GL_RED:
-       case GL_R8:
-       case GL_R16:
-       case GL_R16F:
-       case GL_R32F:
-       case GL_RED_SNORM:
-       case GL_R8_SNORM:
-       case GL_R16_SNORM:
-               return GL_RED;
-
-       case GL_RG:
-       case GL_RG8:
-       case GL_RG16:
-       case GL_RG16F:
-       case GL_RG32F:
-       case GL_RG_SNORM:
-       case GL_RG8_SNORM:
-       case GL_RG16_SNORM:
-               return GL_RG;
-
-       case 3:
-       case GL_RGB:
-       case GL_R3_G3_B2:
-       case GL_RGB4:
-       case GL_RGB5:
-       case GL_RGB8:
-       case GL_RGB10:
-       case GL_RGB12:
-       case GL_RGB16:
-       case GL_RGB_SNORM:
-       case GL_RGB8_SNORM:
-       case GL_RGB16_SNORM:
-       case GL_RGB9_E5:
-               return GL_RGB;
-       case 4:
-       case GL_RGBA:
-       case GL_RGBA2:
-       case GL_RGBA4:
-       case GL_RGB5_A1:
-       case GL_RGBA8:
-       case GL_RGB10_A2:
-       case GL_RGBA12:
-       case GL_RGBA16:
-       case GL_RGBA_SNORM:
-       case GL_RGBA8_SNORM:
-       case GL_RGBA16_SNORM:
-               return GL_RGBA;
-
-       case GL_SRGB_EXT:
-       case GL_SRGB8_EXT:
-       case GL_COMPRESSED_SRGB_EXT:
-       case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
-               return GL_RGB;
-       case GL_SRGB_ALPHA_EXT:
-       case GL_SRGB8_ALPHA8_EXT:
-       case GL_COMPRESSED_SRGB_ALPHA_EXT:
-       case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
-       case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
-       case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
-               return GL_RGBA;
-       case GL_SLUMINANCE_ALPHA_EXT:
-       case GL_SLUMINANCE8_ALPHA8_EXT:
-       case GL_COMPRESSED_SLUMINANCE_EXT:
-       case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT:
-               return GL_LUMINANCE_ALPHA;
-       case GL_SLUMINANCE_EXT:
-       case GL_SLUMINANCE8_EXT:
-               return GL_LUMINANCE;
-       default:
-               abort();
-       }
-}
-
-
-
-
-// Return number components in the given datatype.  This is 3 or 4 for
-// packed types and zero for non-packed types
-// Ex: GL_UNSIGNED_SHORT_5_5_5_1 = 4
-// Ex: GL_INT = 0
-static int
-NumberOfComponentsInPackedType(GLenum datatype)
-{
-       for (unsigned i = 0; i < NUM_TYPES; i++) {
-               if (Types[i].Token == datatype)
-                       return Types[i].Components;
-       }
-       abort();
-}
-
-
-static int
-IsPackedType(GLenum datatype)
-{
-       return NumberOfComponentsInPackedType(datatype) > 0;
-}
-
-
-// Return number components in the given image format.
-// Ex: GL_BGR = 3
-static int
-NumberOfComponentsInFormat(GLenum format)
-{
-       for (unsigned i = 0; i < NUM_FORMATS; i++) {
-               if (Formats[i].Token == format)
-                       return Formats[i].Components;
-       }
-       abort();
-}
-
-
-// Return size, in bytes, of given datatype.
-static int
-SizeofType(GLenum datatype)
-{
-       switch (datatype) {
-       case GL_UNSIGNED_INT_10_10_10_2:
-       case GL_UNSIGNED_INT_2_10_10_10_REV:
-       case GL_UNSIGNED_INT_8_8_8_8:
-       case GL_UNSIGNED_INT_8_8_8_8_REV:
-       case GL_UNSIGNED_INT_5_9_9_9_REV:
-       case GL_UNSIGNED_INT:
-       case GL_INT:
-       case GL_FLOAT:
-               return 4;
-       case GL_UNSIGNED_SHORT_5_5_5_1:
-       case GL_UNSIGNED_SHORT_1_5_5_5_REV:
-       case GL_UNSIGNED_SHORT_4_4_4_4:
-       case GL_UNSIGNED_SHORT_4_4_4_4_REV:
-       case GL_UNSIGNED_SHORT_5_6_5:
-       case GL_UNSIGNED_SHORT_5_6_5_REV:
-       case GL_UNSIGNED_SHORT:
-       case GL_SHORT:
-       case GL_HALF_FLOAT_ARB:
-               return 2;
-       case GL_UNSIGNED_BYTE_3_3_2:
-       case GL_UNSIGNED_BYTE_2_3_3_REV:
-       case GL_UNSIGNED_BYTE:
-       case GL_BYTE:
-               return 1;
-       default:
-               abort();
-       }
-}
-
-
-// Check if the given image format and datatype are compatible.
-// Also check for types/formats defined by GL extensions here.
-bool
-PixelFormatsTest::CompatibleFormatAndType(GLenum format, GLenum datatype) const
-{
-       // Special case: GL_BGR can't be used with packed types!
-       // This has to do with putting the most color bits in red and green,
-       // not blue.
-       if (format == GL_BGR && IsPackedType(datatype))
-               return false;
-
-       if (datatype == GL_HALF_FLOAT_ARB && !haveHalfFloat)
-               return false;
-
-       if (format == GL_ABGR_EXT && !haveABGR)
-               return false;
-
-       // Special case: GL_ABGR_EXT can't be used with packed types
-       // because the packed formats specs (which were all written after the
-       // GL_EXT_abgr) explicitly say that the packed formats can only be used
-       // with GL_RGB, GL_BGR, GL_RGBA, or GL_BGRA and do not mention
-       // GL_ABGR_EXT.
-       if (format == GL_ABGR_EXT && IsPackedType(datatype))
-               return false;
-
-       if (format == GL_RG && !haveRG)
-               return false;
-
-       if (datatype == GL_UNSIGNED_INT_5_9_9_9_REV && !haveTexSharedExp)
-               return false;
-
-       const int formatComps = NumberOfComponentsInFormat(format);
-       const int typeComps = NumberOfComponentsInPackedType(datatype);
-       return formatComps == typeComps || typeComps == 0;
-}
-
-
-bool
-PixelFormatsTest::SupportedIntFormat(GLint intFormat) const
-{
-       switch (intFormat) {
-       case GL_SRGB_ALPHA_EXT:
-       case GL_SRGB8_ALPHA8_EXT:
-       case GL_SRGB_EXT:
-       case GL_SRGB8_EXT:
-       case GL_SLUMINANCE_ALPHA_EXT:
-       case GL_SLUMINANCE8_ALPHA8_EXT:
-       case GL_SLUMINANCE_EXT:
-       case GL_SLUMINANCE8_EXT:
-               return haveSRGB;
-       case GL_RED:
-       case GL_RG:
-       case GL_R8:
-       case GL_RG8:
-       case GL_R16:
-       case GL_RG16:
-               return haveRG;
-       case GL_R16F:
-       case GL_RG16F:
-       case GL_R32F:
-       case GL_RG32F:
-               return haveRG && haveFloat;
-       case GL_RED_SNORM:
-       case GL_R8_SNORM:
-       case GL_R16_SNORM:
-       case GL_RG_SNORM:
-       case GL_RG8_SNORM:
-       case GL_RG16_SNORM:
-       case GL_RGB_SNORM:
-       case GL_RGB8_SNORM:
-       case GL_RGB16_SNORM:
-       case GL_RGBA_SNORM:
-       case GL_RGBA8_SNORM:
-       case GL_RGBA16_SNORM:
-       case GL_ALPHA_SNORM:
-       case GL_ALPHA8_SNORM:
-       case GL_ALPHA16_SNORM:
-       case GL_LUMINANCE_SNORM:
-       case GL_LUMINANCE8_SNORM:
-       case GL_LUMINANCE16_SNORM:
-       case GL_LUMINANCE_ALPHA_SNORM:
-       case GL_LUMINANCE8_ALPHA8_SNORM:
-       case GL_LUMINANCE16_ALPHA16_SNORM:
-       case GL_INTENSITY_SNORM:
-       case GL_INTENSITY8_SNORM:
-       case GL_INTENSITY16_SNORM:
-               return haveSnorm;
-       case GL_RGB9_E5:
-               return haveTexSharedExp;
-       default:
-
-               return true;
-       }
-}
-
-
-// Determine if the ith pixel is in the upper-right quadrant of the
-// rectangle of size 'width' x 'height'.
-static bool
-IsUpperRight(int i, int width, int height)
-{
-       const int y = i / width, x = i % width;
-       return (x >= width / 2 && y >= height / 2);
-}
-
-
-
-// Create an image buffer and fill it so that a single image channel is
-// the max value (1.0) while the other channels are zero.  For example,
-// if fillComponent==2 and we're filling a four-component image, the
-// pixels will be (0, 0, max, 0).
-//
-// We always leave the upper-right quadrant black/zero.  This is to help
-// detect any image conversion issues related to stride, packing, etc.
-static GLubyte *
-MakeImage(int width, int height, GLenum format, GLenum type,
-                 int fillComponent)
-{
-       assert(fillComponent < 4);
-
-       if (type == GL_UNSIGNED_INT_5_9_9_9_REV) {
-               GLubyte *image = new GLubyte [width * height * 4];
-               int i;
-
-               assert(format == GL_RGB);
-
-               GLuint *ui = (GLuint *) image;
-               for (i = 0; i < width * height; i++) {
-                       float p[3] = {0, 0, 0};
-
-                       if (!IsUpperRight(i, width, height))
-                               p[fillComponent] =  1;
-
-                       ui[i] = float3_to_rgb9e5(p);
-               }
-
-               return image;
-       }
-       else if (IsPackedType(type)) {
-               const int bpp = SizeofType(type);
-               GLubyte *image = new GLubyte [width * height * bpp];
-               GLuint masks[4];
-               int pos[4];
-               int i;
-
-               ComponentMasks(type, masks);
-               ComponentPositions(format, pos);
-
-               const GLuint value = masks[fillComponent];
-
-               switch (bpp) {
-               case 1:
-                       for (i = 0; i < width * height; i++) {
-                               if (IsUpperRight(i, width, height))
-                                       image[i] = 0;
-                               else
-                                       image[i] = (GLubyte) value;
-                       }
-                       break;
-               case 2:
-                       {
-                               GLushort *image16 = (GLushort *) image;
-                               for (i = 0; i < width * height; i++) {
-                                       if (IsUpperRight(i, width, height))
-                                               image16[i] = 0;
-                                       else
-                                               image16[i] = (GLushort) value;
-                               }
-                       }
-                       break;
-               case 4:
-                       {
-                               GLuint *image32 = (GLuint *) image;
-                               for (i = 0; i < width * height; i++) {
-                                       if (IsUpperRight(i, width, height))
-                                               image32[i] = 0;
-                                       else
-                                               image32[i] = (GLuint) value;
-                               }
-                       }
-                       break;
-               default:
-                       abort();
-               }
-
-               return image;
-       }
-       else {
-               const int comps = NumberOfComponentsInFormat(format);
-               const int bpp = comps * SizeofType(type);
-               assert(bpp > 0);
-               GLubyte *image = new GLubyte [width * height * bpp];
-               int i;
-
-               switch (type) {
-               case GL_UNSIGNED_BYTE:
-                       for (i = 0; i < width * height * comps; i++) {
-                               if (i % comps == fillComponent && 
!IsUpperRight(i/comps, width, height))
-                                       image[i] = 0xff;
-                               else
-                                       image[i] = 0x0;
-                       }
-                       break;
-               case GL_BYTE:
-                       {
-                               GLbyte *b = (GLbyte *) image;
-                               for (i = 0; i < width * height * comps; i++) {
-                                       if (i % comps == fillComponent && 
!IsUpperRight(i/comps, width, height))
-                                               b[i] = 0x7f;
-                                       else
-                                               b[i] = 0x0;
-                               }
-                       }
-                       break;
-               case GL_UNSIGNED_SHORT:
-                       {
-                               GLushort *us = (GLushort *) image;
-                               for (i = 0; i < width * height * comps; i++) {
-                                       if (i % comps == fillComponent && 
!IsUpperRight(i/comps, width, height))
-                                               us[i] = 0xffff;
-                                       else
-                                               us[i] = 0x0;
-                               }
-                       }
-                       break;
-               case GL_SHORT:
-                       {
-                               GLshort *s = (GLshort *) image;
-                               for (i = 0; i < width * height * comps; i++) {
-                                       if (i % comps == fillComponent && 
!IsUpperRight(i/comps, width, height))
-                                               s[i] = 0x7fff;
-                                       else
-                                               s[i] = 0x0;
-                               }
-                       }
-                       break;
-               case GL_UNSIGNED_INT:
-                       {
-                               GLuint *ui = (GLuint *) image;
-                               for (i = 0; i < width * height * comps; i++) {
-                                       if (i % comps == fillComponent && 
!IsUpperRight(i/comps, width, height))
-                                               ui[i] = 0xffffffff;
-                                       else
-                                               ui[i] = 0x0;
-                               }
-                       }
-                       break;
-               case GL_INT:
-                       {
-                               GLint *in = (GLint *) image;
-                               for (i = 0; i < width * height * comps; i++) {
-                                       if (i % comps == fillComponent && 
!IsUpperRight(i/comps, width, height))
-                                               in[i] = 0x7fffffff;
-                                       else
-                                               in[i] = 0x0;
-                               }
-                       }
-                       break;
-               case GL_FLOAT:
-                       {
-                               GLfloat *f = (GLfloat *) image;
-                               for (i = 0; i < width * height * comps; i++) {
-                                       if (i % comps == fillComponent && 
!IsUpperRight(i/comps, width, height))
-                                               f[i] = 1.0;
-                                       else
-                                               f[i] = 0.0;
-                               }
-                       }
-                       break;
-               case GL_HALF_FLOAT_ARB:
-                       {
-                               GLhalfARB *f = (GLhalfARB *) image;
-                               for (i = 0; i < width * height * comps; i++) {
-                                       if (i % comps == fillComponent && 
!IsUpperRight(i/comps, width, height))
-                                               f[i] = 0x3c00;  /* == 1.0 */
-                                       else
-                                               f[i] = 0;
-                               }
-                       }
-                       break;
-               default:
-                       abort();
-               }
-               return image;
-       }
-}
-
-
-bool
-PixelFormatsTest::CheckError(const char *where) const
-{
-       GLint err = glGetError();
-       if (err) {
-               char msg[1000];
-               sprintf(msg, "GL Error: %s (0x%x) in %s\n",
-                               piglit_get_gl_error_name(err), err, where);
-               env->log << msg;
-               return true;
-       }
-       return false;
-}
-
-
-// Draw the given image, either as a texture quad or glDrawPixels.
-// Return true for success, false if GL error detected.
-bool
-PixelFormatsTest::DrawImage(int width, int height,
-                                                       GLenum format, GLenum 
type, GLint intFormat,
-                                                       const GLubyte *image) 
const
-{
-       if (intFormat) {
-               glEnable(GL_TEXTURE_2D);
-               glViewport(0, 0, width, height);
-               glTexImage2D(GL_TEXTURE_2D, 0, intFormat, width, height, 0,
-                                        format, type, image);
-               if (CheckError("glTexImage2D"))
-                       return false;
-#if USE_FRAG_PROG
-               glEnable(GL_FRAGMENT_PROGRAM_ARB);
-#endif
-               glBegin(GL_POLYGON);
-               glTexCoord2f(0, 0);  glVertex2f(-1, -1);
-               glTexCoord2f(1, 0);  glVertex2f(1, -1);
-               glTexCoord2f(1, 1);  glVertex2f(1, 1);
-               glTexCoord2f(0, 1);  glVertex2f(-1, 1);
-               glEnd();
-               glDisable(GL_TEXTURE_2D);
-#if USE_FRAG_PROG
-               glDisable(GL_FRAGMENT_PROGRAM_ARB);
-#endif
-       }
-       else {
-               // glDrawPixels
-               glDrawPixels(width, height, format, type, image);
-               if (CheckError("glDrawPixels"))
-                       return false;
-       }
-       return true;
-}
-
-
-static bool
-ColorsEqual(const GLubyte img[4], const GLubyte expected[4])
-{
-       const int tolerance = 1;
-       if ((abs(img[0] - expected[0]) > tolerance) ||
-               (abs(img[1] - expected[1]) > tolerance) ||
-               (abs(img[2] - expected[2]) > tolerance) ||
-               (abs(img[3] - expected[3]) > tolerance)) {
-               return false;
-       }
-       else {
-               return true;
-       }
-}
-
-
-// Compute the expected RGBA color we're expecting to find with glReadPixels
-// if the texture was defined with the given image format and texture
-// internal format.  'testChan' indicates which of the srcFormat's image
-// channels was set (to 1.0) when the image was filled.
-void
-PixelFormatsTest::ComputeExpected(GLenum srcFormat, int testChan,
-                                                                 GLint 
intFormat, GLubyte exp[4]) const
-{
-       const GLenum baseIntFormat = BaseTextureFormat(intFormat);
-
-       switch (srcFormat) {
-
-       case GL_RGBA:
-       case GL_BGRA:
-       case GL_ABGR_EXT:
-               assert(testChan < 4);
-               switch (baseIntFormat) {
-               case 0: // == glReadPixels
-                       // fallthrough
-               case GL_RGBA:
-                       exp[0] = 0;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[3] = 0;
-                       exp[testChan] = 255;
-                       break;
-               case GL_RGB:
-                       exp[0] = 0;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[testChan] = 255;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_RG:
-                       exp[0] = 0;
-                       exp[1] = 0;
-                       exp[testChan] = 255;
-                       exp[2] = 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_RED:
-                       exp[0] = testChan == 0 ? 255 : 0;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_ALPHA:
-                       exp[0] = 0;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[3] = testChan == 3 ? 255 : 0;
-                       break;
-               case GL_LUMINANCE:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] = testChan == 0 ? 255 : 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_LUMINANCE_ALPHA:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] = testChan == 0 ? 255 : 0;
-                       exp[3] = testChan == 3 ? 255 : 0;
-                       break;
-               case GL_INTENSITY:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] =
-                       exp[3] = testChan == 0 ? 255 : 0;
-                       break;
-               default:
-                       abort();
-               }
-               break;
-
-       case GL_RGB:
-       case GL_BGR:
-               assert(testChan < 3);
-               switch (baseIntFormat) {
-               case 0:
-               case GL_RGBA:
-                       exp[0] = 0;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[testChan] = 255;
-                       exp[3] = 255; // texture's alpha
-                       break;
-               case GL_RGB:
-                       exp[0] = 0;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[testChan] = 255;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_RG:
-                       exp[0] = 0;
-                       exp[1] = 0;
-                       exp[testChan] = 255;
-                       exp[2] = 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_RED:
-                       exp[0] = testChan == 0 ? 255 : 0;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_ALPHA:
-                       exp[0] = 0;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[3] = 255; // texture's alpha
-                       break;
-               case GL_LUMINANCE:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] = testChan == 0 ? 255 : 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_LUMINANCE_ALPHA:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] = testChan == 0 ? 255 : 0;
-                       exp[3] = 255;  // texture's alpha
-                       break;
-               case GL_INTENSITY:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] =
-                       exp[3] = testChan == 0 ? 255 : 0;
-                       break;
-               default:
-                       abort();
-               }
-               break;
-
-       case GL_RG:
-               assert(testChan < 2);
-               switch (baseIntFormat) {
-               case 0:
-               case GL_RGBA:
-                       exp[0] = 0;
-                       exp[1] = 0;
-                       exp[testChan] = 255;
-                       exp[2] = 0;
-                       exp[3] = 255; // texture's alpha
-                       break;
-               case GL_RGB:
-                       exp[0] = 0;
-                       exp[1] = 0;
-                       exp[testChan] = 255;
-                       exp[2] = 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_RG:
-                       exp[0] = 0;
-                       exp[1] = 0;
-                       exp[testChan] = 255;
-                       exp[2] = 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_RED:
-                       exp[0] = testChan == 0 ? 255 : 0;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_ALPHA:
-                       exp[0] = 0;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[3] = 255; // texture's alpha
-                       break;
-               case GL_LUMINANCE:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] = testChan == 0 ? 255 : 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_LUMINANCE_ALPHA:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] = testChan == 0 ? 255 : 0;
-                       exp[3] = 255;  // texture's alpha
-                       break;
-               case GL_INTENSITY:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] =
-                       exp[3] = testChan == 0 ? 255 : 0;
-                       break;
-               default:
-                       abort();
-               }
-               break;
-
-       case GL_RED:
-               assert(testChan == 0);
-               switch (baseIntFormat) {
-               case 0:
-               case GL_RGBA:
-                       exp[0] = 255;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[3] = 255; // texture's alpha
-                       break;
-               case GL_RGB:
-                       exp[0] = 255;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_RG:
-                       exp[0] = 255;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_RED:
-                       exp[0] = 255;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_ALPHA:
-                       exp[0] = 0;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[3] = 255; // texture's alpha
-                       break;
-               case GL_LUMINANCE:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] = 255;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_LUMINANCE_ALPHA:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] = 255;
-                       exp[3] = 255; // texture's alpha
-                       break;
-               case GL_INTENSITY:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] = 255;
-                       exp[3] = 255; // texture's alpha
-                       break;
-               default:
-                       abort();
-               }
-               break;
-
-       case GL_GREEN:
-       case GL_BLUE:
-               assert(testChan == 0);
-               switch (baseIntFormat) {
-               case 0:
-               case GL_RGBA:
-                       exp[0] = 0;
-                       exp[1] = 255;
-                       exp[2] = 0;
-                       exp[3] = 255; // texture's alpha
-                       break;
-               case GL_RGB:
-                       exp[0] = 0;
-                       exp[1] = 255;
-                       exp[2] = 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_ALPHA:
-                       exp[0] = 0;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[3] = 255; // texture's alpha
-                       break;
-               case GL_LUMINANCE:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] = 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_LUMINANCE_ALPHA:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] = 0;
-                       exp[3] = 255; // texture's alpha
-                       break;
-               case GL_INTENSITY:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] = 0;
-                       exp[3] = 0; // texture's alpha
-                       break;
-               default:
-                       abort();
-               }
-               break;
-
-       case GL_ALPHA:
-               assert(testChan == 0);
-               switch (baseIntFormat) {
-               case 0:
-               case GL_RGBA:
-                       exp[0] = 0;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[3] = 255; // texture's alpha
-                       break;
-               case GL_RGB:
-                       exp[0] = 0;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_ALPHA:
-                       exp[0] = 0;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[3] = 255; // texture's alpha
-                       break;
-               case GL_LUMINANCE:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] = 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_LUMINANCE_ALPHA:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] = 0;
-                       exp[3] = 255; // texture's alpha
-                       break;
-               case GL_INTENSITY:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] = 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               default:
-                       abort();
-               }
-               break;
-
-       case GL_LUMINANCE:
-               assert(testChan == 0);
-               switch (baseIntFormat) {
-               case 0:
-               case GL_RGBA:
-                       exp[0] = 255;
-                       exp[1] = 255;
-                       exp[2] = 255;
-                       exp[3] = 255; // texture's alpha
-                       break;
-               case GL_RGB:
-                       exp[0] = 255;
-                       exp[1] = 255;
-                       exp[2] = 255;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_RG:
-                       exp[0] = 255;
-                       exp[1] = 255;
-                       exp[2] = 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_RED:
-                       exp[0] = 255;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_ALPHA:
-                       exp[0] = 0;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[3] = 255; // texture's alpha
-                       break;
-               case GL_LUMINANCE:
-                       exp[0] = 255;
-                       exp[1] = 255;
-                       exp[2] = 255;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_LUMINANCE_ALPHA:
-                       exp[0] = 255;
-                       exp[1] = 255;
-                       exp[2] = 255;
-                       exp[3] = 255; // texture's alpha
-                       break;
-               case GL_INTENSITY:
-                       exp[0] = 255;
-                       exp[1] = 255;
-                       exp[2] = 255;
-                       exp[3] = 255; // texture's alpha
-                       break;
-               default:
-                       abort();
-               }
-               break;
-
-       case GL_LUMINANCE_ALPHA:
-               assert(testChan < 2);
-               switch (baseIntFormat) {
-               case 0:
-               case GL_RGBA:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] = testChan == 0 ? 255 : 0;
-                       exp[3] = testChan == 1 ? 255 : 0;
-                       break;
-               case GL_RGB:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] = testChan == 0 ? 255 : 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_RG:
-                       exp[0] =
-                       exp[1] = testChan == 0 ? 255 : 0;
-                       exp[2] = 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_RED:
-                       exp[0] = testChan == 0 ? 255 : 0;
-                       exp[1] = 0;
-                       exp[2] = 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_ALPHA:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] = 0; // fragment color
-                       exp[3] = testChan == 1 ? 255 : 0;
-                       break;
-               case GL_LUMINANCE:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] = testChan == 0 ? 255 : 0;
-                       exp[3] = defaultAlpha; // fragment alpha or texture 
alpha
-                       break;
-               case GL_LUMINANCE_ALPHA:
-                       exp[0] = testChan == 0 ? 255 : 0;
-                       exp[1] = testChan == 0 ? 255 : 0;
-                       exp[2] = testChan == 0 ? 255 : 0;
-                       exp[3] = testChan == 1 ? 255 : 0;
-                       break;
-               case GL_INTENSITY:
-                       exp[0] =
-                       exp[1] =
-                       exp[2] =
-                       exp[3] = testChan == 0 ? 255 : 0;
-                       break;
-               default:
-                       abort();
-               }
-               break;
-
-       default:
-               abort();
-       }
-}
-
-
-// Read framebuffer and check that region [width x height] is the expected
-// solid color, except the upper-right quadrant will always be black/zero.
-// comp: which color channel in src image was set (0 = red, 1 = green,
-//  2 = blue, 3 = alpha), other channels are zero.
-// format is the color format we're testing.
-bool
-PixelFormatsTest::CheckRendering(int width, int height, int comp,
-                                                                GLenum format, 
GLint intFormat) const
-{
-       const int checkAlpha = alphaBits > 0;
-       GLubyte *image = new GLubyte [width * height * 4];
-       GLboolean ok = 1;
-       GLubyte expected[4];
-       int i;
-
-       assert(comp >= 0 && comp < 4);
-
-       glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, image);
-       for (i = 0; i < width * height; i += 4) {
-
-               ComputeExpected(format, comp, intFormat, expected);
-               if (IsUpperRight(i/4, width, height)) {
-                       expected[0] =
-                       expected[1] =
-                       expected[2] =
-                       expected[3] = 0;
-               }
-
-               if (!checkAlpha) {
-                       expected[3] = 0xff;
-               }
-
-               // do the color check
-               if (!ColorsEqual(image+i, expected)) {
-                       // report failure info
-                       char msg[1000];
-                       env->log << name;
-                       sprintf(msg, " failed at pixel (%d,%d), color channel 
%d:\n",
-                                       i/width, i%width, comp);
-                       env->log << msg;
-                       sprintf(msg, "  Expected: 0x%02x 0x%02x 0x%02x 
0x%02x\n",
-                                       expected[0], expected[1], expected[2], 
expected[3]);
-                       env->log << msg;
-                       sprintf(msg, "  Found:    0x%02x 0x%02x 0x%02x 
0x%02x\n",
-                                       image[i + 0], image[i + 1], image[i + 
2], image[i + 3]);
-                       env->log << msg;
-                       ok = false;
-                       break;
-               }
-       }
-       delete [] image;
-       return ok;
-}
-
-
-
-// Exercise a particular combination of image format, type and internal
-// texture format.
-// Return true for success, false for failure.
-bool
-PixelFormatsTest::TestCombination(GLenum format, GLenum type, GLint intFormat)
-{
-       const int numComps = NumberOfComponentsInFormat(format);
-       const int width = 16;
-       const int height = 16;
-       int colorPos[4];
-       ComponentPositions(format, colorPos);
-
-       for (int comp = 0; comp < numComps; comp++) {
-               if (colorPos[comp] >= 0) {
-                       // make original/incoming image
-                       const int comp2 = colorPos[comp];
-                       GLubyte *image = MakeImage(width, height, format, type, 
comp2);
-
-                       // render with image (texture / glDrawPixels)
-                       bool ok = DrawImage(width, height, format, type, 
intFormat, image);
-
-                       if (ok) {
-                               // check rendering
-                               ok = CheckRendering(width, height, comp, 
format, intFormat);
-                       }
-
-                       delete [] image;
-
-                       if (!ok) {
-                               return false;
-                       }
-               }
-       }
-
-       return true;
-}
-
-
-// Per visual setup.
-void
-PixelFormatsTest::setup(void)
-{
-       haveHalfFloat = GLUtils::haveExtensions("GL_ARB_half_float_pixel");
-       haveABGR = GLUtils::haveExtensions("GL_EXT_abgr");
-       haveSRGB = GLUtils::haveExtensions("GL_EXT_texture_sRGB");
-       haveCombine = GLUtils::haveExtensions("GL_ARB_texture_env_combine");
-       haveRG = GLUtils::haveExtensions("GL_ARB_texture_rg");
-       haveFloat = GLUtils::haveExtensions("GL_ARB_texture_float");
-       haveSnorm = GLUtils::haveExtensions("GL_EXT_texture_snorm");
-       haveTexSharedExp = 
GLUtils::haveExtensions("GL_EXT_texture_shared_exponent");
-
-       glGetIntegerv(GL_ALPHA_BITS, &alphaBits);
-
-       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-
-       glDrawBuffer(GL_FRONT);
-       glReadBuffer(GL_FRONT);
-
-       glColor4f(0, 0, 0, 0);
-
-#if USE_FRAG_PROG
-       {
-               PFNGLPROGRAMSTRINGARBPROC glProgramStringARB_func;
-               PFNGLBINDPROGRAMARBPROC glBindProgramARB_func;
-               static const char *progText =
-                       "!!ARBfp1.0\n"
-                       "TEX result.color, fragment.texcoord[0], texture[0], 2D; 
\n"
-                       "END \n"
-                       ;
-               glProgramStringARB_func = (PFNGLPROGRAMSTRINGARBPROC)
-                       GLUtils::getProcAddress("glProgramStringARB");
-               assert(glProgramStringARB_func);
-               glBindProgramARB_func = (PFNGLBINDPROGRAMARBPROC)
-                       GLUtils::getProcAddress("glBindProgramARB");
-               assert(glBindProgramARB_func);
-               glBindProgramARB_func(GL_FRAGMENT_PROGRAM_ARB, 1);
-               glProgramStringARB_func(GL_FRAGMENT_PROGRAM_ARB,
-                                                               
GL_PROGRAM_FORMAT_ASCII_ARB,
-                                                               
strlen(progText), (const GLubyte *) progText);
-               if (glGetError()) {
-                       fprintf(stderr, "Bad fragment program, error: %s\n",
-                                       (const char *) 
glGetString(GL_PROGRAM_ERROR_STRING_ARB));
-                       exit(0);
-               }
-       }
-#endif
-}
-
-
-
-// Test all possible image formats, types and internal texture formats.
-// Result will indicate number of passes and failures.
-void
-PixelFormatsTest::runOne(MultiTestResult &r, Window &w)
-{
-       int testNum = 0, testStride;
-       (void) w;  // silence warning
-
-       setup();
-
-       if (env->options.quick)
-               testStride = 13;  // a prime number
-       else
-               testStride = 1;
-
-       const unsigned numEnvModes = haveCombine ? 2 : 1;
-
-       for (unsigned envMode = 0; envMode < numEnvModes; envMode++) {
-               if (envMode == 0) {
-                       glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, 
GL_REPLACE);
-                       // When the texture internal format is GL_LUMINANCE or 
GL_RGB,
-                       // GL_REPLACE takes alpha from the fragment, which we 
set to zero
-                       // with glColor4f(0,0,0,0).
-#if USE_FRAG_PROG
-                       defaultAlpha = 255;
-#else
-                       defaultAlpha = 0;
-#endif
-               }
-               else {
-                       assert(haveCombine);
-                       glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, 
GL_COMBINE_ARB);
-                       glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, 
GL_REPLACE);
-                       glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, 
GL_REPLACE);
-                       glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, 
GL_TEXTURE);
-                       glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, 
GL_TEXTURE);
-                       glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, 
GL_SRC_COLOR);
-                       glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, 
GL_SRC_ALPHA);
-                       // For this GL_COMBINE mode, when sampling a texture 
that does
-                       // not have an alpha channel, alpha is effectively 1.0.
-                       defaultAlpha = 255;
-               }
-
-               for (unsigned formatIndex = 0; formatIndex < NUM_FORMATS; 
formatIndex++) {
-                       for (unsigned typeIndex = 0; typeIndex < NUM_TYPES; 
typeIndex++) {
-
-                               if 
(CompatibleFormatAndType(Formats[formatIndex].Token,
-                                                                               
        Types[typeIndex].Token)) {
-
-                                       for (unsigned intFormat = 0; intFormat 
< NUM_INT_FORMATS; intFormat++) {
-
-                                               if 
(!SupportedIntFormat(InternalFormats[intFormat].Token))
-                                                       continue;
-
-#if DEBUG
-                                               env->log << "testing "
-                                                                << testNum
-                                                                << ":\n";
-                                               env->log << "  Format:    " << 
Formats[formatIndex].Name << "\n";
-                                               env->log << "  Type:      " << 
Types[typeIndex].Name << "\n";
-                                               env->log << "  IntFormat: " << 
InternalFormats[intFormat].Name << "\n";
-
-#endif
-                                               bool ok;
-
-                                               if (testNum % testStride == 0) {
-                                                       ok = 
TestCombination(Formats[formatIndex].Token,
-                                                                               
                 Types[typeIndex].Token,
-                                                                               
                 InternalFormats[intFormat].Token);
-                                               }
-                                               else {
-                                                       // skip
-                                                       ok = true;
-                                               }
-
-                                               if (!ok) {
-                                                       // error was reported 
to log, add format info here:
-                                                       env->log << "  Format: " << 
Formats[formatIndex].Name << "\n";
-                                                       env->log << "  Type: " << 
Types[typeIndex].Name << "\n";
-                                                       env->log << "  Internal Format: " << 
InternalFormats[intFormat].Name << "\n";
-                                                       env->log << "  EnvMode: " << 
EnvModes[envMode] << "\n";
-                                                       r.numFailed++;
-                                               }
-                                               else {
-                                                       r.numPassed++;
-                                               }
-                                               testNum++;
-                                       }
-                               }
-                       }
-               }
-       }
-
-       r.pass = (r.numFailed == 0);
-}
-
-
-// The test object itself:
-PixelFormatsTest pixelFormatsTest("pixelFormats", "window, rgb",
-                               "",
-       "Test that all the various pixel formats/types (like\n"
-       "GL_BGRA/GL_UNSIGNED_SHORT_4_4_4_4_REV) operate correctly.\n"
-       "Test both glTexImage and glDrawPixels.\n"
-       "For textures, also test all the various internal texture formats.\n"
-       "Thousands of combinations are possible!\n"
-       );
-
-
-} // namespace GLEAN
diff --git a/tests/glean/tpixelformats.h b/tests/glean/tpixelformats.h
deleted file mode 100644
index d0edb94..0000000
--- a/tests/glean/tpixelformats.h
+++ /dev/null
@@ -1,98 +0,0 @@
-// BEGIN_COPYRIGHT -*- glean -*-
-//
-// Copyright (C) 1999  Allen Akin   All Rights Reserved.
-//
-// 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 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 ALLEN AKIN 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.
-//
-// END_COPYRIGHT
-
-// Brian Paul  September 2006
-
-#ifndef __tpixelformats_h__
-#define __tpixelformats_h__
-
-#include "tmultitest.h"
-
-namespace GLEAN {
-
-#define windowSize 100
-
-
-class PixelFormatsTest: public MultiTest
-{
-public:
-       PixelFormatsTest(const char* testName, const char* filter,
-                                        const char *extensions, const char* 
description):
-               MultiTest(testName, filter, extensions, description),
-               alphaBits(0),
-               defaultAlpha(0),
-               haveHalfFloat(false),
-               haveABGR(false),
-               haveSRGB(false),
-               haveCombine(false),
-               haveRG(false),
-               haveSnorm(false),
-               haveTexSharedExp(false)
-       {
-       }
-
-       virtual void runOne(MultiTestResult &r, Window &w);
-
-private:
-       int alphaBits;
-       int defaultAlpha;  // depends on texture env mode
-       // extensions
-       bool haveHalfFloat;
-       bool haveABGR;
-       bool haveSRGB;
-       bool haveCombine;
-       bool haveRG;
-       bool haveFloat;
-       bool haveSnorm;
-       bool haveTexSharedExp;
-
-       bool CheckError(const char *where) const;
-
-       bool CompatibleFormatAndType(GLenum format, GLenum datatype) const;
-
-       bool SupportedIntFormat(GLint intFormat) const;
-
-       bool DrawImage(int width, int height,
-                                  GLenum format, GLenum type, GLint intFormat,
-                                  const GLubyte *image) const;
-
-       void ComputeExpected(GLenum srcFormat, int testChan,
-                                                GLint intFormat, GLubyte 
exp[4]) const;
-
-       bool CheckRendering(int width, int height, int color,
-                           GLenum format, GLint intFormat) const;
-
-       bool TestCombination(GLenum format, GLenum type, GLint intFormat);
-
-       void setup(void);
-};
-
-} // namespace GLEAN
-
-#endif // __tpixelformats_h__
-

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

Reply via email to